Решение многоцелевой задачи оптимизации с использованием библиотеки python DEAP с NSGA2 - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу решить многоцелевую задачу оптимизации с использованием библиотеки 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? Подскажите, пожалуйста, когда мне следует использовать эту функцию и для чего она нужна?

Заранее спасибо

...