python写GA算法
时间: 2023-10-24 19:25:32 浏览: 37
遗传算法(Genetic Algorithm,GA)是一种基于生物进化规律的优化算法,主要用于解决优化问题,如函数最小值、最大值、约束条件等。在Python中可以用遗传算法库deap来实现遗传算法。
以下是一个简单的遗传算法示例代码,通过遗传算法来寻找函数y=x^2的最小值:
```python
import random
from deap import base, creator, tools
# 定义目标函数
def eval_func(individual):
return individual[0]**2,
# 初始化遗传算法相关参数
creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
creator.create("Individual", list, fitness=creator.FitnessMin)
toolbox = base.Toolbox()
toolbox.register("attr_float", random.uniform, -5, 5)
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_float, n=1)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
toolbox.register("evaluate", eval_func)
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutGaussian, mu=0, sigma=1, indpb=0.1)
toolbox.register("select", tools.selTournament, tournsize=3)
# 遗传算法主程序
def main():
pop = toolbox.population(n=50)
CXPB, MUTPB, NGEN = 0.5, 0.2, 100
for gen in range(NGEN):
offspring = algorithms.varAnd(pop, toolbox, CXPB, MUTPB)
fits = toolbox.map(toolbox.evaluate, offspring)
for fit, ind in zip(fits, offspring):
ind.fitness.values = fit
pop = toolbox.select(offspring, k=len(pop))
top1 = tools.selBest(pop, k=1)[0]
print("gen = {}, top1 = {}, fitness = {}".format(gen, top1, top1.fitness.values[0]))
return top1
if __name__ == "__main__":
main()
```
其中,eval_func是目标函数,用于计算个体的适应度值。creator.create用于创建个体和适应度类,toolbox.register用于注册变异、交叉、选择等操作函数。在遗传算法主程序中,通过pop = toolbox.population(n=50)生成初始种群,CXPB、MUTPB、NGEN分别代表交叉概率、变异概率和遗传代数。通过algorithms.varAnd函数进行遗传操作,计算个体适应度值,选择优秀个体进行繁殖,输出每一代最优解。
注意:遗传算法不保证得到全局最优解,运行结果取决于初始种群、变异概率、交叉概率等参数的选择。