经过几次测试后,对具有有效适应度的个体的评估是为了评估个体在交叉和变异程序后的适应度。从这段代码我们可以看出:
# 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
使用 删除那些交叉和突变的个体的适应度值del
。所以invalid_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
如前所述,这会增加计算负担。总而言之,需要重新评估以将适应度分配给每个个体,并为offspring = toolbox.select(pop, len(pop))
基于个体适应度值的选择操作做好准备。