遗传算法详细完整代码
时间: 2024-09-07 11:02:29 浏览: 36
遗传算法是一种模拟自然选择和遗传学原理的搜索启发式算法,它通常用于解决优化和搜索问题。遗传算法的基本步骤包括初始化一个种群,然后通过选择、交叉(杂交)和变异操作对种群进行迭代,直到满足终止条件。下面是一个简化版的遗传算法的示例代码,用于解决一个简单的优化问题:
```python
import random
# 目标函数,计算个体的适应度
def fitness(individual):
# 假设我们的目标是最大化个体中1的个数
return sum(individual)
# 初始化种群
def init_population(ind_count, gene_count):
return [[random.randint(0, 1) for _ in range(gene_count)] for _ in range(ind_count)]
# 选择过程,这里采用轮盘赌选择
def select(population, fitnesses):
total_fitness = sum(fitnesses)
rel_fitness = [f/total_fitness for f in fitnesses]
probs = [sum(rel_fitness[:i+1]) for i in range(len(rel_fitness))]
new_population = []
for _ in range(len(population)):
r = random.random()
for (i, individual) in enumerate(population):
if r <= probs[i]:
new_population.append(individual)
break
return new_population
# 交叉过程,这里采用单点交叉
def crossover(parent1, parent2):
if random.random() < 0.5:
crossover_point = random.randint(1, len(parent1) - 1)
return parent1[:crossover_point] + parent2[crossover_point:], parent2[:crossover_point] + parent1[crossover_point:]
else:
return parent1, parent2
# 变异过程,这里以概率翻转基因
def mutate(individual, mutation_rate):
for i in range(len(individual)):
if random.random() < mutation_rate:
individual[i] = 1 if individual[i] == 0 else 0
return individual
# 遗传算法主函数
def genetic_algorithm(generations, gene_count, population_size, mutation_rate):
population = init_population(population_size, gene_count)
for generation in range(generations):
new_population = []
fitnesses = [fitness(ind) for ind in population]
for _ in range(population_size // 2):
parent1, parent2 = select(population, fitnesses), select(population, fitnesses)
offspring1, offspring2 = crossover(parent1, parent2)
new_population.extend([mutate(offspring1, mutation_rate), mutate(offspring2, mutation_rate)])
population = new_population
best_fitness = max(fitnesses)
print(f"Generation {generation}: Best Fitness = {best_fitness}")
return population
# 参数设置
generations = 100 # 迭代代数
gene_count = 20 # 基因数量
population_size = 50 # 种群大小
mutation_rate = 0.01 # 变异率
# 运行遗传算法
best_individual = genetic_algorithm(generations, gene_count, population_size, mutation_rate)[-1]
print(f"Best Individual: {best_individual}")
```
这个代码展示了一个简单的遗传算法的实现过程,其中包含了适应度函数、初始化种群、选择、交叉和变异的函数,以及主函数`genetic_algorithm`控制遗传算法的整体流程。这个例子中,目标函数是以最大化种群中个体包含1的数量。