遗传算法代码

遗传算法是一种模拟自然选择和遗传机制的搜索启发式算法,广泛应用于解决优化和搜索问题。它模仿生物进化过程中的遗传学机制,包括选择、交叉(杂交)和变异等操作。遗传算法主要由以下几个步骤组成:初始化种群、评估适应度、选择、交叉、变异以及终止条件。

遗传算法的基本流程

1. 初始化种群:随机生成一个初始解集,每个解称为一个个体。个体可以是数值型或字符串形式,取决于问题的性质。

2. 评估适应度:根据预定的目标函数计算每个个体的适应度值。适应度值反映了个体在解决问题上的表现,值越大表示该个体越优。

3. 选择:基于适应度值从当前种群中选择一些个体作为下一代的父母。常见的选择方法有轮盘赌选择、锦标赛选择等。

4. 交叉:将选中的父母进行配对,通过交换部分基因来产生新的后代。交叉概率决定了交叉发生的频率。

5. 变异:以一定的变异概率随机改变后代的一部分基因,增加种群多样性,防止过早收敛于局部最优解。

6. 终止条件:当达到预设的迭代次数或适应度达到预期目标时,算法停止运行,并输出最优解。

Python示例代码

下面是一个简单的遗传算法实现,用于求解一个简单的数学问题,如找到函数$f(x) = x^2 - 4x + 4$的最大值。

```python

import random

def fitness(x):

return -(x2 - 4x + 4) 负号是因为我们希望最大化这个函数

def generate_population(size, low, high):

return [random.uniform(low, high) for _ in range(size)]

def select_parents(population, fitnesses):

total_fitness = sum(fitnesses)

probabilities = [f/total_fitness for f in fitnesses]

parents = random.choices(population, weights=probabilities, k=2)

return parents

def crossover(parent1, parent2):

alpha = random.random()

child1 = alpha parent1 + (1 - alpha) parent2

child2 = alpha parent2 + (1 - alpha) parent1

return child1, child2

def mutate(individual, mutation_rate):

if random.random() < mutation_rate:

mutation_amount = random.uniform(-1, 1)

individual += mutation_amount

return individual

主程序

population_size = 100

mutation_rate = 0.01

generations = 100

low_bound, high_bound = -10, 10

population = generate_population(population_size, low_bound, high_bound)

for generation in range(generations):

fitnesses = [fitness(x) for x in population]

new_population = []

while len(new_population) < population_size:

parent1, parent2 = select_parents(population, fitnesses)

child1, child2 = crossover(parent1, parent2)

child1 = mutate(child1, mutation_rate)

child2 = mutate(child2, mutation_rate)

new_population.extend([child1, child2])

population = new_population

best_solution = max(population, key=fitness)

print("Best solution found: ", best_solution, "with fitness:", fitness(best_solution))

```

此代码段展示了遗传算法的基本框架,包括种群初始化、适应度计算、选择、交叉、变异等步骤。通过调整参数,如种群大小、迭代次数、变异率等,可以控制算法的表现。

免责声明:本文由用户上传,与本网站立场无关。财经信息仅供读者参考,并不构成投资建议。投资者据此操作,风险自担。 如有侵权请联系删除!