Для многоцелевых задач ваша функция пригодности должна возвращать кортеж с тем же количеством результатов, что и указанное количество весов, например ::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)