多目标优化初学习——遗传算法以及python的deap库

  • Post author:
  • Post category:python


多目标优化的python代码中用到deap库,首先要在命令行安装deap:

pip install deap

安装后deap下的一些常用的方法就可以使用了,下面是一些我第一次见的新工具。

  • creator
  1. creator.create(“FitnessMin”, base.Fitness, weights=(-1.0,))

    这里代表创建一个名为“FitnessMin”的单目标最小问题



    ,并且继承了base.Fitness这个类(后面有介绍)。weights属性是tuple的形式,里面含有几个元素就代表几个目标函数,其中元素为负值代表最小化问题,正值代表最大化问题。
  2. creator.create(“Individual”, list, fitness=creator.FitnessMin)

    使用creator创建一个Individual类,继承标准list类型,并拥有一个fitness属性,这个属性的值为上面1中创建的名为FitnessMin的类。
  • toolbox

  1. toolbox.register(self,alias,function,*args,**kargs)


    把方法function和参数二次打包成一个新方法,其别名为self,下次可直接用

    toolbox.别名

    直接调用。


    eg

    : toolbox.register(“attribute”, random.random)

    给toolbox注册了random.random,使用” attribute “别名。程序中直接调用toolbox.attribute()就相当于调用random.random()。

    在这里插入图片描述

  • tools

  1. tools.initRepeat(container, func, n)


    调用 func 方法n 次,产生的结果放在 container。


    eg

    : tools.initRepeat(list,random.random,2)

    在这里插入图片描述


  2. tools.initIterate(container, generator)


    我的理解是和initRepeat()类似,只是执行一遍方法即可,不需要重复n次了。


    eg



    在这里插入图片描述


  3. tools.cxSimulatedBinaryBounded(ind1, ind2, eta, low, up)


    tools子代的交叉算法之——二进制交叉

    ind1 – 参与交叉的第一个个体

    ind2 – 参与交叉的第二个个体

    eta – 交叉的拥挤程度。较高的ETA将产生与其父代相似的子代,而较小的ETA将产生更多不同的解决方案

    low – 作为搜索空间下界的值或值序列

    up – 作为搜索空间上界的值或值序列

    返回: 由两个个体组成的一个元组


  4. tools.selTournamentDCD(individuals, k)


    基于两个个体的支配优势(D)进行锦标赛选择,若不互相支配,则根据拥挤距离(CD)进行选择。

  • base.Fitness的属性
  1. valid

    判断适应度是否有效(true/false)

  2. values

    适应度值。直接使用individual.fitness.values = values来设置适配度,并使用del del individual.fitness.values来清除适应度(使适应度无效)。(未加权的)适应度可以通过individual.fitness.values直接访问

  3. weights = None

    weights用在适应度的比较上。权重必须定义为一个元组,其中每个元素都与目标相关联。负数对应于相关目标的最小化,正数对应于最大化。



版权声明:本文为Seeyouer原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。