1

我对 DEAP 很陌生,查看了几个地方和示例,我看到它使用这种方法为遗传算法创建类:

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

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

但它是如何与适应度/目标函数相关联的呢?适应度函数是否必须返回多个值,每个权重一个?

4

1 回答 1

3

对于多目标问题,您的适应度函数必须返回一个元组,其结果数与指定的权重数相同,例如:

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)
于 2019-06-11T18:40:57.733 回答