python deap_遗传算法库DEAP的示例代码的学习和分析

最近看到用遗传算法优化量化参数的文章,觉得还是有很先进,就开始学习。这个文章主要是针对遗传算法库DEAP的示例代码的学习和分析。

代码链接:其实有不少针对这段代码文章,这里主要说说自己学习和体会。

在分析代码前,先说说这段代码干了什么。这段代码就是如果有一个数组有十个随机数组成,如何得到一组十个最小随机数,其和是最小的。理论上,最小的就是组合就是10个0,但是因这里面因为引入了变异,可以获得负数,所以可以组合变异生成负数值。

1. 定义类型,方法creator.create(name,base,**kargs)

这个有点类似设计模式的工厂模式,这个方法创建一个新的类,名字为参数name,继承的父类为base,这个类的属性如之后的参数名称和参数值。

creator.create("FitnessMin", base.Fitness, weights=(-1.0,))

对应的就是类创建代码:

class FitnessMin(base.Fitness):

weights=(-1.0,)

def __init__(self, values=()):

super(FitnessMin, self).__init__(values=())

creator.create("Individual", list, fitness=creator.FitnessMin)

对应的就是类创建代码:

class Individul(list):

self.fitness=FitnessMin

def __init__(self):

….

1.1 然后取看看base.Fitness这个父类,关键是weights这个属性,主要是做比较用。分析代码,会发现把传入的values序列和weights序列相乘,转为元祖wvalues,返回的时候就相除返回values

defgetValues(self):

returntuple(map(truediv,self.wvalues,self.weights))

defsetValues(self,values):

try:

self.wvalues=tuple(map(mul,values,self.weights))

2.     注册方法;方法

toolbox.register

(self,alias,function,*args,**kargs)

这个是一个比较核心的方法,参数第一个是别名,第二个是需要绑定的真正function,之后其实是针对这个方法的参数。这样做就可以把方法和参数二次打包成

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中常用的遗传算法DEAP(Distributed Evolutionary Algorithms in Python)。 DEAP是一个基于Python的开源遗传算法框架,可以用来构建和应用遗传算法和其他进化算法。它提供了许多内置的进化算法操作和多种编程范式,支持并行处理和分布式计算。DEAP的主要特点是易于使用、高效和灵活。 下面是一个简单的DEAP遗传算法示例,用于解决一个TSP(旅行商问题): ```python import random import numpy as np from deap import algorithms, base, creator, tools # 创建适应度函数 def evalTSP(individual): distance = 0 for i in range(len(individual)): j = (i+1) % len(individual) distance += dist_matrix[individual[i]][individual[j]] return distance, # 创建遗传算法工具箱 creator.create("FitnessMin", base.Fitness, weights=(-1.0,)) creator.create("Individual", list, fitness=creator.FitnessMin) toolbox = base.Toolbox() toolbox.register("indices", random.sample, range(n), n) toolbox.register("individual", tools.initIterate, creator.Individual, toolbox.indices) toolbox.register("population", tools.initRepeat, list, toolbox.individual) toolbox.register("mate", tools.cxOrdered) toolbox.register("mutate", tools.mutShuffleIndexes, indpb=0.05) toolbox.register("select", tools.selTournament, tournsize=3) toolbox.register("evaluate", evalTSP) # 加载数据 dist_matrix = np.array([[0, 1, 2, 3], [1, 0, 4, 5], [2, 4, 0, 6], [3, 5, 6, 0]]) n = len(dist_matrix) # 运行遗传算法 pop = toolbox.population(n=100) algorithms.eaSimple(pop, toolbox, cxpb=0.5, mutpb=0.2, ngen=50, verbose=False) # 输出结果 best_individual = tools.selBest(pop, k=1)[0] print("Best individual is ", best_individual) print("Best fitness is ", evalTSP(best_individual)) ``` 这个示例演示了如何使用DEAP解决一个TSP问题。它创建了一个包含100个个体的种群,并在50代内运行遗传算法来寻找最优解。在每一代中,使用选择、交叉和变异操作来更新种群。最后,找到最优个体并输出其路径和总路程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值