Zhi*_*eng 7 python genetic-algorithm deap
我刚刚开始使用 DEAP。之前我用的是基于Matlab的GA,交叉变异后就是选择指定大小的较好个体,然后更新种群。但是我很难理解为什么在 DEAP 中,在交叉和变异过程之后需要评估具有无效适应度的个体:
invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
fitnesses = map(toolbox.evaluate, invalid_ind)
for ind, fit in zip(invalid_ind, fitnesses):
ind.fitness.values = fit
Run Code Online (Sandbox Code Playgroud)
我尝试删除这些代码,但似乎算法永远不会收敛。甚至我也没有看到那些可以更新人口/后代的东西,那么它们有什么用呢。提前致谢!!!
经过几次测试后,对具有无效适应度的个体的评估是为了评估经过交叉和变异过程后的个体的适应度。从这段代码我们可以看出:
# Apply crossover and mutation on the offspring
for child1, child2 in zip(offspring[::2], offspring[1::2]):
if random.random() < CXPB:
toolbox.mate(child1, child2)
del child1.fitness.values
del child2.fitness.values
for mutant in offspring:
if random.random() < MUTPB:
toolbox.mutate(mutant)
del mutant.fitness.values
Run Code Online (Sandbox Code Playgroud)
使用 删除那些交叉和变异的个体的适应度值del。Soinvalid_ind = [ind for ind in offspring if not ind.fitness.valid]用于选择那些个体进行重新评估,这样可以显着减少计算量。此外,我们还可以使用以下方法重新评估整个后代:
fitnesses = map(toolbox.evaluate, offspring)
for ind, fit in zip(offspring, fitnesses):
ind.fitness.values = fit
Run Code Online (Sandbox Code Playgroud)
如上所述,这会增加计算负担。总而言之,需要这种重新评估来为每个个体分配适应度,并为offspring = toolbox.select(pop, len(pop))基于个体适应度值的选择操作做好准备。
| 归档时间: |
|
| 查看次数: |
1247 次 |
| 最近记录: |