用遗传算法求函数最大值的代码
时间: 2024-08-13 20:04:51 浏览: 49
python 遗传算法求函数极值的实现代码
遗传算法(Genetic Algorithm, GA)是一种模拟自然选择和遗传机制的优化搜索方法,常用于解决复杂问题中的全局优化问题。以下是一个简单的 Python 代码示例,使用 DEAP(Distributed Evolutionary Algorithms in Python)库来实现遗传算法求解函数最大值:
```python
from deap import base, creator, tools, algorithms
# 定义问题的函数,这里假设我们正在寻找函数 f(x) = x^2 - 10 * x + 20 的最小值,这是一个简单的函数,但遗传算法可以处理更复杂的函数
def fitness_function(solution):
return -solution # 因为我们要找的是最大值,所以取其负值
# 初始化DEAP
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)
toolbox = base.Toolbox()
toolbox.register("attr_float", random.uniform, -100, 100) # 定义染色体由浮点数组成,范围-100到100
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_float, n=1) # 创建个体
toolbox.register("population", tools.initRepeat, list, toolbox.individual) # 创建种群
toolbox.register("evaluate", fitness_function)
toolbox.register("mate", tools.cxTwoPoint) # 随机交叉
toolbox.register("mutate", tools.mutGaussian, mu=0, sigma=1, indpb=0.01) # 高斯变异
toolbox.register("select", tools.selTournament, tournsize=3) # 锦标赛选择
# 遗传算法参数设置
ngen = 100 # 进化代数
pop_size = 100 # 种群大小
# 运行遗传算法
pop = toolbox.population(n=pop_size)
hof = tools.HallOfFame(1) # 保存最佳解
history = tools.Statistics(lambda ind: ind.fitness.values)
history.register("avg", mean)
history.register("std", std)
pop, logbook = algorithms.eaSimple(pop, toolbox, cxpb=0.5, mutpb=0.2, ngen=ngen,
stats=history, halloffame=hof, verbose=True)
# 输出最佳解和对应的函数值
best_solution = hof
print(f"Best solution found: {best_solution}, with a fitness of {best_solution.fitness.values}")
阅读全文