python求遗传算法求多自变量函数最小值
时间: 2023-09-10 18:10:52 浏览: 92
利用遗传算法求最小值
遗传算法可以用于多自变量函数最小值的求解。下面是一个简单的Python实现示例:
```python
import random
# 目标函数,这里使用了经典的Rastrigin函数
def rastrigin(*X):
A = 10
return A * len(X) + sum([(x**2 - A * math.cos(2 * math.pi * x)) for x in X])
# 遗传算法求解多自变量函数最小值
def genetic_algorithm(func, n_vars, n_pop=50, n_gen=100, p_cross=0.9, p_mut=0.1):
# 初始化种群
pop = [[random.uniform(-5.12, 5.12) for _ in range(n_vars)] for _ in range(n_pop)]
# 迭代
for gen in range(n_gen):
# 计算适应度
fitness = [1 / (1 + func(*p)) for p in pop]
# 选择
idxs = random.choices(range(n_pop), weights=fitness, k=n_pop)
parents = [pop[i] for i in idxs]
# 交叉
for i in range(0, n_pop, 2):
if random.random() < p_cross:
point = random.randint(1, n_vars - 1)
parents[i][point:], parents[i+1][point:] = parents[i+1][point:], parents[i][point:]
# 变异
for i in range(n_pop):
if random.random() < p_mut:
point = random.randint(0, n_vars - 1)
parents[i][point] = random.uniform(-5.12, 5.12)
# 替换
pop = parents
# 返回最优解
return max(pop, key=lambda p: 1 / (1 + func(*p)))
# 测试
import math
result = genetic_algorithm(rastrigin, 2)
print(result)
```
其中,`rastrigin`函数是目标函数,这里使用了经典的Rastrigin函数。`genetic_algorithm`函数是遗传算法求解多自变量函数最小值的实现,其中`n_vars`表示自变量的个数,`n_pop`表示种群大小,`n_gen`表示迭代次数,`p_cross`表示交叉概率,`p_mut`表示变异概率。最后通过调用`genetic_algorithm`函数得到最优解。
阅读全文