清除过程(Petrowski 96)是一种求解多模态问题的方法。是否有一种在DEAP中使用清算过程的方法?
对于其他细分方法,如共享,只需修改适应度函数。因此,这些方法很容易部署在DEAP框架中。然而,清除需要和额外的循环在算法中,以更新每个个体的适应度。是否有DEAP函数来执行此操作?
发布于 2019-11-22 10:18:16
仅仅改变健身功能是不够的,因为你需要对所有的个体做一个额外的传递,以更新他们的健身基于附近的优势个体的存在。但是,您可以为此制定自己的算法。
一旦您定义了通过人口中的所有个体来设置他们的适应度的过程,基于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 populationhttps://stackoverflow.com/questions/58972817
复制相似问题