【问题标题】:DEAP algorithm with several weights具有多个权重的 DEAP 算法
【发布时间】:2019-10-04 17:58:36
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python-3.x genetic-algorithm deap


    【解决方案1】:

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

    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)
    

    【讨论】:

    • 我有个疑问,function_maximize需要返回0到1.0之间的值吗?并且 function_minimize 需要返回一个介于 -0.5 和 0 之间的值?如果我的 func_min 返回一个介于 0 - 800 之间的值,我的 func_max 返回一个介于 0 - 100 之间的值(以 % 为单位),我该怎么办?
    • 您好,这些值只是权重,您的最大化或最小化函数的结果与它无关。例如,如果您的最小化和最大化函数返回相同的值,则使用权重或多或少地赋予其中一个或另一个的重要性。
    猜你喜欢
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    相关资源
    最近更新 更多