【问题标题】:What's the importance of invalid fitness in DEAP?DEAP 中无效适应度的重要性是什么?
【发布时间】:2017-11-26 05:51:03
【问题描述】:

我刚刚开始使用 DEAP。之前,我使用基于Matlab的遗传算法,经过交叉和变异后,选择指定大小的更好个体,然后更新种群。但是我很难理解为什么在 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

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

【问题讨论】:

    标签: python genetic-algorithm deap


    【解决方案1】:

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

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

    【讨论】:

    • 我也在使用 nsga2 和 Deap,但我对无效健身不太了解。这是没有达到函数目标的函数值吗?这就是为什么它被称为无效个体?
    猜你喜欢
    • 1970-01-01
    • 2014-08-25
    • 2013-06-20
    • 2016-09-21
    • 1970-01-01
    • 2017-02-02
    • 2011-01-14
    • 2020-03-03
    • 2013-10-01
    相关资源
    最近更新 更多