遗传算法最优化问题的python代码
时间: 2023-12-13 17:04:32 浏览: 94
遗传算法是一种基于生物进化原理的优化算法,可以用于解决各种最优化问题。下面是一个使用遗传算法解决函数最大值问题的Python代码示例:
```
import random
# 目标函数
def fitness_func(x):
return x * x
# 遗传算法
def genetic_algorithm(pop_size, chrom_size, max_iter, pc, pm):
# 初始化种群
pop = [[random.randint(0, 1) for j in range(chrom_size)] for i in range(pop_size)]
# 迭代
for i in range(max_iter):
# 计算适应度
fitness = [fitness_func(int(''.join(map(str, chrom)), 2)) for chrom in pop]
# 选择
parents = []
for j in range(pop_size):
idx1, idx2 = random.sample(range(pop_size), 2)
if fitness[idx1] > fitness[idx2]:
parents.append(pop[idx1])
else:
parents.append(pop[idx2])
# 交叉
for j in range(0, pop_size, 2):
if random.random() < pc:
k = random.randint(1, chrom_size - 1)
parents[j][k:], parents[j+1][k:] = parents[j+1][k:], parents[j][k:]
# 变异
for j in range(pop_size):
if random.random() < pm:
k = random.randint(0, chrom_size - 1)
parents[j][k] = 1 - parents[j][k]
# 更新种群
pop = parents
# 返回最优解
best_idx = fitness.index(max(fitness))
return int(''.join(map(str, pop[best_idx])), 2)
# 测试
print(genetic_algorithm(100, 10, 100, 0.8, 0.01))
```
该代码使用遗传算法求解函数 f(x) = x^2 的最大值,其中 pop_size 表示种群大小,chrom_size 表示染色体长度,max_iter 表示最大迭代次数,pc 表示交叉概率,pm 表示变异概率。
阅读全文