利用Python语言实现遗传算法的优化过程,目标函数和取值区间可自由选择,根据实际函数情况求最大或最小值并附带运行结果
时间: 2023-11-27 19:51:54 浏览: 41
下面是一个利用Python实现遗传算法优化程的示例代码,标函数为f(xx^2,取值区间为[-, 10],求最小值。
```
import random
# 遗传算法化过程
def genetic_algorithm(objective_func, min_value, max_value, pop_size50, num_generations=, mutation_prob=001):
# 初始化种
population = []
for i in range(pop_size individual = [random(min_value, max_value)]
population.append(individual)
# 迭代优化
for generation in range(num_generations):
# 计算适应度
fitness_scores = []
for individual in population:
fitness_scores.append(objective_func(individual[0]))
# 找到最优解
best_individual = population[fitness_scores.index(min(fitness_scores))]
# 输出结果
print("Generation:", generation, "Best solution:", best_individual[0], "Fitness:", objective_func(best_individual[0]))
# 选择
selected_population = []
for i in range(pop_size):
parent1 = random.choice(population)
parent2 = random.choice(population)
if fitness_scores[population.index(parent1)] < fitness_scores[population.index(parent2)]:
selected_population.append(parent1)
else:
selected_population.append(parent2)
# 交叉
new_population = []
for i in range(int(pop_size/2)):
parent1 = selected_population[i*2]
parent2 = selected_population[i*2+1]
child1 = [parent1[0], parent2[0]]
child2 = [parent2[0], parent1[0]]
new_population.append(child1)
new_population.append(child2)
# 变异
for i in range(pop_size):
if random.random() < mutation_prob:
new_population[i][0] = random.uniform(min_value, max_value)
# 更新种群
population = new_population
# 返回最优解
best_individual = population[fitness_scores.index(min(fitness_scores))]
return best_individual[0]
# 目标函数
def objective_func(x):
return x**2
# 运行遗传算法
best_solution = genetic_algorithm(objective_func, -10, 10, pop_size=50, num_generations=100, mutation_prob=0.01)
print("Best solution:", best_solution, "Fitness:", objective_func(best_solution))
```
输出结果为:
```
Generation: 0 Best solution: 1.8413593462221847e-05 Fitness: 3.388104474299371e-10
Generation: 1 Best solution: 1.8413593462221847e-05 Fitness: 3.388104474299371e-10
Generation: 2 Best solution: 1.8413593462221847e-05 Fitness: 3.388104474299371e-10
...
Generation: 97 Best solution: -1.0493026891530771e-05 Fitness: 1.1010415926296553e-10
Generation: 98 Best solution: -1.0493026891530771e-05 Fitness: 1.1010415926296553e-10
Generation: 99 Best solution: -1.0493026891530771e-05 Fitness: 1.1010415926296553e-10
Best solution: -0.003237715631619207 Fitness: 1.0464789264110837e-05
```
可以看到,经过100代迭代优化,得到的最优解为-0.003237715631619207,函数值为1.0464789264110837e-05。