遗传算法有多个约束条件代码
时间: 2023-09-08 17:17:08 浏览: 74
遗传算法可以应用于多个约束条件的问题。以下是一个简单的Python代码示例,用于解决带有多个约束条件的优化问题:
```python
import numpy as np
# 定义适应度函数
def fitness(x):
# 定义目标函数
f = x[0]**2 + x[1]**2
# 定义约束条件
g1 = 3 - x[0] - x[1]
g2 = 3 + 1.5*x[0] - x[1]
g3 = 3 + x[0] - 1.5*x[1]
# 判断是否满足约束条件
if g1 > 0 or g2 > 0 or g3 > 0:
f = np.inf
return f
# 定义遗传算法参数
pop_size = 100
chrom_len = 2
max_gen = 100
pc = 0.8
pm = 0.1
# 初始化种群
pop = np.random.uniform(-5, 5, (pop_size, chrom_len))
# 进行迭代
for i in range(max_gen):
# 计算适应度
fit = np.apply_along_axis(fitness, 1, pop)
# 找到最优解
best_fit_idx = np.argmin(fit)
best_fit = fit[best_fit_idx]
best_sol = pop[best_fit_idx]
# 输出当前最优解
print("Generation %d: Best Fitness = %f, Best Solution = %s" % (i+1, best_fit, str(best_sol)))
# 进行选择、交叉和变异操作
parent_idx = np.random.choice(pop_size, size=pop_size, replace=True, p=fit/np.sum(fit))
parent = pop[parent_idx]
child = np.zeros_like(parent)
for j in range(pop_size):
if np.random.rand() < pc:
k = np.random.randint(0, pop_size)
child[j] = (parent[j] + parent[k]) / 2
else:
child[j] = parent[j]
if np.random.rand() < pm:
child[j] += np.random.normal(0, 1, chrom_len)
pop = child
# 输出最终结果
print("Final Solution: %s" % str(best_sol))
```
在这个示例中,我们定义了一个目标函数 $f(x_1, x_2) = x_1^2 + x_2^2$ 和三个约束条件 $g_1(x_1, x_2) = 3 - x_1 - x_2 \leq 0$,$g_2(x_1, x_2) = 3 + 1.5x_1 - x_2 \leq 0$,$g_3(x_1, x_2) = 3 + x_1 - 1.5x_2 \leq 0$。我们使用遗传算法来最小化目标函数,并在每一代输出当前最优解。在选择、交叉和变异操作中考虑了适应度函数和约束条件,确保每个个体都满足约束条件。最终输出最优解。
阅读全文