我正在使用python中的Deap库解决遗传编程最大化问题。
我使用eaSimple algorithm
创建了60%的交叉概率和30%的突变概率的种群。
人群中最佳个体的适应度在增加,但人群的平均适应度有时在下降(例如,第一个人群的平均适应度大于最后一个人群的平均适应度)。
这是正常现象还是设置有问题?
要提及的另一件事是,我已将最差适应度设置为零,并且人口中确实包括适应度值为零(人口规模为1000)的个体。
答案 0 :(得分:0)
eaSimple
算法对初始总体的所有个体都使用varAnd
策略,并且没有选择。因此,eaSimple
算法探索了特征空间,但是在优化上没有多大作用。如果确实要使用此算法,建议您使用HallOfFame
对象来记住在探索过程中找到的最佳对象。
根据the documentation中的伪代码描述eaSimple
的行为,
population = select(population, len(population))
表示人口中的所有要素均被占用。例如,如果您的select
函数是tools.SelBest
,那么您选择了n
最佳个体,其中n
是人口总数。
然后使用varAnd
策略(documentation),在该策略中,根据个体在种群中的索引配对父母并进行交配。产生的两个后代具有替换两个原始父代的固定概率。