Я хочу решить многоцелевую задачу оптимизации с использованием библиотеки DEAP . Поскольку я новичок в DEAP, я использовал этот пример NSGA-II в качестве шаблона для моей собственной проблемы. В примере в строке 59 функция tools.selNSGA2
зарегистрирована для объекта toolbox
, после чего используется как toolbox.select
:
toolbox.register("select", tools.selNSGA2)
Затем в основной функции в строке 96 функция tools.selTournamentDCD
используется для выбора потомства, однако я не мог понять, что он делает. Также я не смог найти ничего об этом в газете , в которой предлагается NSGA-II.
Следующий код является основной функцией примера:
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
частью алгоритма NSGA-II? Обязательно ли использовать tools.selTournamentDCD
для создания потомства в DEAP? Подскажите, пожалуйста, когда мне следует использовать эту функцию и для чего она нужна?
Заранее спасибо