Алгоритм DEAP с несколькими весами - PullRequest
1 голос
/ 17 мая 2019

Я довольно новичок в DEAP и, глядя на несколько мест и примеров, которые я видел, он создает классы для генетических алгоритмов, используя этот метод:

creator.create('FitnessMax', base.Fitness, weights=(1.0, -0.5,))
creator.create('Individual', list, fitness=creator.FitnessMax)

Что я не понимаю, так это параметр weights . Предполагается, что DEAP можно использовать для решения многоцелевых задач (максимизировать и минимизировать), поэтому веса могут быть положительными или отрицательными.

Но как это связано с функцией пригодности / цели? Должна ли функция fitness возвращать несколько значений, по одному на каждый вес?

1 Ответ

1 голос
/ 11 июня 2019

Для многоцелевых задач ваша функция пригодности должна возвращать кортеж с тем же количеством результатов, что и указанное количество весов, например ::100100

creator.create('Fitness', base.Fitness, weights=(1.0, -0.5,))
creator.create('Individual', list, fitness=creator.Fitness)

[...]

toolbox.register('evaluate', fitness)

def function_minimize(individual):
    return individual[0] - sum(individual[1:])

def function_maximize(individual):
    return sum(individual)

def fitness(individual):
    return (function_maximize(individual), function_minimize(individual)),

Кроме того, имейте в виду, что ваш метод выбора должен поддерживать многоцелевые задачи, например, выбор турнира - нет, поэтому, если вы его используете, веса будут игнорироваться). Метод выбора, который поддерживает такую ​​проблему: NSGA2 :

toolbox.register('select', tools.selNSGA2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...