遗传算法求解无约束单目标优化问题python代码
时间: 2023-09-02 18:06:13 浏览: 61
好的,以下是一个简单的遗传算法求解无约束单目标优化问题的Python代码:
```python
import random
# 定义目标函数
def fitness(x):
return x**2 - 3*x + 4
# 遗传算法参数设置
pop_size = 50 # 种群大小
num_generations = 100 # 迭代次数
mutation_rate = 0.1 # 变异率
crossover_rate = 0.8 # 交叉率
# 生成初始种群
population = []
for i in range(pop_size):
population.append(random.uniform(-10, 10))
# 遗传算法主循环
for generation in range(num_generations):
# 计算适应度并排序
fitness_scores = [(fitness(x), x) for x in population]
fitness_scores.sort(reverse=True)
# 输出当前最优解
print("Generation {}: Best fitness = {:.4f}, Best solution = {:.4f}".format(generation, fitness_scores[0][0], fitness_scores[0][1]))
# 选择
elite_size = int(pop_size * 0.2) # 精英数量
parents = [x[1] for x in fitness_scores[:elite_size]] # 选择精英父母
for i in range(pop_size - elite_size):
parent1 = random.choice(parents)
parent2 = random.choice(parents)
# 交叉
if random.random() < crossover_rate:
child = (parent1 + parent2) / 2
else:
child = parent1
# 变异
if random.random() < mutation_rate:
child += random.gauss(0, 1)
population[i + elite_size] = child
# 输出最终结果
fitness_scores = [(fitness(x), x) for x in population]
fitness_scores.sort(reverse=True)
print("Final solution: x = {:.4f}, fitness = {:.4f}".format(fitness_scores[0][1], fitness_scores[0][0]))
```
在这个代码中,我们首先定义了目标函数 `fitness(x)`,然后设置了遗传算法的参数,包括种群大小、迭代次数、变异率和交叉率。接着我们生成了初始种群,然后开始遗传算法的主循环。在每一次迭代中,我们计算了种群中每个个体的适应度,并对它们进行排序,然后输出当前最优解。接着进行选择、交叉和变异操作,生成下一代种群,直到迭代次数达到设定值为止。最后输出最终的最优解。
当然,这只是一个简单的示例代码,实际应用中可能需要根据具体问题进行调整和优化。