在DEAP中实现清算程序

2024-05-19 20:54:52 发布

您现在位置:Python中文网/ 问答频道 /正文

清理程序(Petrowski 96)是一种解决多模态问题的小生境方法。有没有办法在DEAP中使用清算程序

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


Tags: 方法函数程序功能算法框架部署模态
1条回答
网友
1楼 · 发布于 2024-05-19 20:54:52

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

一旦您根据Petrowski 96中描述的过程定义了通过群体中的所有个体来设置其适合度的过程

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

然后可以重新定义标准算法,例如^{}

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

相关问题 更多 >