[英]Solving a multi-objective optimization problem using python DEAP library with NSGA2
我想使用DEAP 庫解決多目標優化問題。 因為我是 DEAP 的新手,所以我使用 這個 NSGA-II 示例作為我自己問題的模板。 在示例中,在第 59 行中, tools.selNSGA2
function 注冊到toolbox
object,之后用作工具箱toolbox.select
toolbox.register("select", tools.selNSGA2)
然后在主要的 function 中,在第 96 行中, tools.selTournamentDCD
function,用於 select 的后代,但它無法弄清楚。 我在提出 NSGA-II 的論文中也找不到任何關於它的信息。
以下代碼是示例的主要 function:
def main(seed=None):
random.seed(seed)
NGEN = 250
MU = 100
CXPB = 0.9
pop = toolbox.population(n=MU)
# Evaluate the individuals with an invalid fitness
invalid_ind = [ind for ind in pop if not ind.fitness.valid]
fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)
for ind, fit in zip(invalid_ind, fitnesses):
ind.fitness.values = fit
# This is just to assign the crowding distance to the individuals
# no actual selection is done
pop = toolbox.select(pop, len(pop))
# Begin the generational process
for gen in range(1, NGEN):
# Vary the population
offspring = tools.selTournamentDCD(pop, len(pop))
offspring = [toolbox.clone(ind) for ind in offspring]
for ind1, ind2 in zip(offspring[::2], offspring[1::2]):
if random.random() <= CXPB:
toolbox.mate(ind1, ind2)
toolbox.mutate(ind1)
toolbox.mutate(ind2)
del ind1.fitness.values, ind2.fitness.values
# 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
pop = toolbox.select(pop + offspring, MU)
return pop, logbook
我的問題: tools.selTournamentDCD
function 是 NSGA-II 算法的一部分嗎? 是否必須使用tools.selTournamentDCD
在 DEAP 中創建后代? 你能告訴我什么時候應該使用這個 function,它有什么作用?
提前致謝
在這篇論文中,您可以查看有關 NSGA-II 的詳細信息(這是 DEAP 引用的一篇) https://link.springer.com/chapter/10.1007/3-540-45356-3_83
我仍然是使用這個庫的新手,但我認為您不會被迫使用tools.selTournamentDCD
我認為您可以使用其他選擇或預選運算符,例如selRandom
或selRoulette
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.