具有多个权重的 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)
我是 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)