python求遗传算法求多自变量函数最小值
时间: 2023-09-10 19:11:02 浏览: 191
遗传算法是一种通用的优化算法,可以用于多自变量函数的最小值求解。
下面是一个使用Python实现的遗传算法求解多自变量函数最小值的示例:
``` python
import random
# 定义目标函数
def fitness_func(x, y):
return x ** 2 + y ** 2
# 遗传算法参数
POP_SIZE = 50 # 种群大小
GEN_MAX = 100 # 最大迭代次数
CROSS_RATE = 0.8 # 交叉概率
MUTATE_RATE = 0.1 # 变异概率
X_BOUND = [-5, 5] # x自变量范围
Y_BOUND = [-5, 5] # y自变量范围
# 初始化种群
pop = []
for i in range(POP_SIZE):
x = random.uniform(X_BOUND[0], X_BOUND[1])
y = random.uniform(Y_BOUND[0], Y_BOUND[1])
pop.append((x, y))
# 遗传算法迭代
for gen in range(GEN_MAX):
# 计算适应度
fitness = [1 / (fitness_func(x, y) + 1e-6) for x, y in pop]
# 选择
idx = random.choices(range(POP_SIZE), weights=fitness, k=POP_SIZE)
# 交叉
for i in range(0, POP_SIZE, 2):
if random.random() < CROSS_RATE:
x1, y1 = pop[idx[i]]
x2, y2 = pop[idx[i+1]]
alpha = random.random()
pop[idx[i]] = (alpha*x1 + (1-alpha)*x2, alpha*y1 + (1-alpha)*y2)
pop[idx[i+1]] = ((1-alpha)*x1 + alpha*x2, (1-alpha)*y1 + alpha*y2)
# 变异
for i in range(POP_SIZE):
if random.random() < MUTATE_RATE:
x, y = pop[idx[i]]
x += random.uniform(-0.5, 0.5)
y += random.uniform(-0.5, 0.5)
x = max(min(x, X_BOUND[1]), X_BOUND[0])
y = max(min(y, Y_BOUND[1]), Y_BOUND[0])
pop[idx[i]] = (x, y)
# 输出结果
best_idx = max(range(POP_SIZE), key=lambda i: fitness[i])
print("gen:", gen, "best:", pop[best_idx], "fitness:", fitness[best_idx])
```
该程序使用了遗传算法来求解目标函数`x^2 + y^2`的最小值,其中`x`和`y`均为自变量。程序中的遗传算法包括种群初始化、适应度计算、选择、交叉和变异等操作,具体实现方式可以参考代码注释。
运行程序后,可以看到每一代迭代的最佳个体和适应度值。遗传算法的收敛速度取决于算法参数的设置以及目标函数的复杂程度。在实际应用中,通常需要进行多次试验来调整算法参数以获得更好的结果。
阅读全文