首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在DEAP中实现一个清算过程

在DEAP中实现一个清算过程
EN

Stack Overflow用户
提问于 2019-11-21 10:34:09
回答 1查看 153关注 0票数 0

清除过程(Petrowski 96)是一种求解多模态问题的方法。是否有一种在DEAP中使用清算过程的方法?

对于其他细分方法,如共享,只需修改适应度函数。因此,这些方法很容易部署在DEAP框架中。然而,清除需要和额外的循环在算法中,以更新每个个体的适应度。是否有DEAP函数来执行此操作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-22 10:18:16

仅仅改变健身功能是不够的,因为你需要对所有的个体做一个额外的传递,以更新他们的健身基于附近的优势个体的存在。但是,您可以为此制定自己的算法。

一旦您定义了通过人口中的所有个体来设置他们的适应度的过程,基于Petrowski 96中描述的过程

代码语言:javascript
复制
def update_fitness(population):
    ... # set fitness of non-dominant individuals to 0
    return population

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58972817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档