【问题标题】:Implementing a clearing procedure in DEAP在 DEAP 中实施清算程序
【发布时间】:2019-11-22 18:18:16
【问题描述】:

清算程序 (Petrowski 96) 是一种解决多模式问题的利基方法。有没有办法通过 DEAP 使用清算程序?

对于分享等其他小众方式,只需要修改适应度函数即可。因此,这些方法很容易在 DEAP 框架中部署。但是,清除需要算法中的额外循环来更新每个人的适应度。是否有 DEAP 函数可以做到这一点?

【问题讨论】:

    标签: python genetic-algorithm deap


    【解决方案1】:

    仅仅改变适应度函数是不够的,因为您需要对所有个体进行额外的传递,以根据附近主导个体的存在来更新它们的适应度。但是,您可以为此制定自己的算法。

    一旦您根据Petrowski 96 中描述的过程定义了遍历群体中所有个体以设置其适应度的过程

    def update_fitness(population):
        ... # set fitness of non-dominant individuals to 0
        return population
    

    然后您可以重新定义标准算法,例如eaMuPlusLambda

    def eaMuPlusLambda(population, toolbox, mu, lambda_, cxpb, mutpb, ngen):
        invalid_ind = [ind for ind in population if not ind.fitness.valid]
        fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)
        for ind, fit in zip(invalid_ind, fitnesses):
            ind.fitness.values = fit
    
        population = update_fitness(population)
    
        # Begin the generational process
        for gen in range(1, ngen + 1):
            # Vary the population
            offspring = varOr(population, toolbox, lambda_, cxpb, mutpb)
    
            # Evaluate the individuals with an invalid fitness
            invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
            fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)
            for ind, fit in zip(invalid_ind, fitnesses):
                ind.fitness.values = fit
    
            # Select the next generation population
            population[:] = toolbox.select(population + offspring, mu)
    
        return population
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      相关资源
      最近更新 更多