多目标优化的python代码中用到deap库,首先要在命令行安装deap:
pip install deap
安装后deap下的一些常用的方法就可以使用了,下面是一些我第一次见的新工具。
- creator
-
creator.create(“FitnessMin”, base.Fitness, weights=(-1.0,))
这里代表创建一个名为“FitnessMin”的单目标最小问题
类
,并且继承了base.Fitness这个类(后面有介绍)。weights属性是tuple的形式,里面含有几个元素就代表几个目标函数,其中元素为负值代表最小化问题,正值代表最大化问题。 -
creator.create(“Individual”, list, fitness=creator.FitnessMin)
使用creator创建一个Individual类,继承标准list类型,并拥有一个fitness属性,这个属性的值为上面1中创建的名为FitnessMin的类。
- toolbox
-
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
-
tools.initRepeat(container, func, n)
调用 func 方法n 次,产生的结果放在 container。
eg
: tools.initRepeat(list,random.random,2)
-
tools.initIterate(container, generator)
我的理解是和initRepeat()类似,只是执行一遍方法即可,不需要重复n次了。
eg
:
-
tools.cxSimulatedBinaryBounded(ind1, ind2, eta, low, up)
tools子代的交叉算法之——二进制交叉ind1 – 参与交叉的第一个个体
ind2 – 参与交叉的第二个个体
eta – 交叉的拥挤程度。较高的ETA将产生与其父代相似的子代,而较小的ETA将产生更多不同的解决方案
low – 作为搜索空间下界的值或值序列
up – 作为搜索空间上界的值或值序列
返回: 由两个个体组成的一个元组 -
tools.selTournamentDCD(individuals, k)
基于两个个体的支配优势(D)进行锦标赛选择,若不互相支配,则根据拥挤距离(CD)进行选择。
- base.Fitness的属性
-
valid
判断适应度是否有效(true/false) -
values
适应度值。直接使用individual.fitness.values = values来设置适配度,并使用del del individual.fitness.values来清除适应度(使适应度无效)。(未加权的)适应度可以通过individual.fitness.values直接访问 -
weights = None
weights用在适应度的比较上。权重必须定义为一个元组,其中每个元素都与目标相关联。负数对应于相关目标的最小化,正数对应于最大化。