具有多个权重的 DEAP 算法

DEAP algorithm with several weights

我是 DEAP 的新手,查看了几个地方和示例,我看到它使用这种方法为遗传算法创建 类:

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

我不明白的是weights参数。假设DEAP可以用来解决多目标问题(最大化和最小化),这就是为什么权重可以是正的也可以是负的。

但是它是如何链接到 fitness/objective 函数的呢? fitness 函数必须 return 多个值,每个值对应一个权重?

对于 multi-objective 问题,您的适应度函数必须 return 一个结果数与指定权重数相同的元组,例如:

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)),

此外,请记住您的选择方法必须支持 multi-objective 问题,例如锦标赛选择不支持,因此如果您使用它,权重将被忽略)。支持这种问题的一种选择方法是NSGA2:

toolbox.register('select', tools.selNSGA2)