gpt4 book ai didi

python - DEAP 中无效体能的重要性是什么?

转载 作者:行者123 更新时间:2023-12-01 01:50:47 26 4
gpt4 key购买 nike

我刚刚开始使用 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

我尝试删除这些代码,但似乎算法永远不会收敛。甚至我也没有看到那些可以更新人口/后代的东西,那么它们有什么用呢。提前致谢!!!

最佳答案

经过几次测试后,对具有无效适应度的个体的评估是为了评估经过交叉和变异过程后的个体的适应度。从这段代码我们可以看出:

# 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)) 中进行选择操作。它基于个体的适应度值。

关于python - DEAP 中无效体能的重要性是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44708050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com