【问题标题】:Solving single objective optimization using multi objective algorithm使用多目标算法解决单目标优化
【发布时间】:2020-06-04 03:12:22
【问题描述】:

我想使用多目标进化算法来解决单目标优化问题。它在技术上是否正确以及如何完成?

【问题讨论】:

    标签: optimization evolutionary-algorithm


    【解决方案1】:

    多目标算法通常通过比较适应度得分来工作。但是当健身分数是多目标时,你怎么能比较它们呢?因此,神奇之处通常在于算法如何对适应度分数进行排序。对于单目标,当尝试使用多目标算法进行优化时,这种魔力可能会丢失,但尽管如此,它可能仍然可以很好地工作。

    由于您只优化一个目标,您可以使用最简单的遗传算法。例如,请参阅我在AI algorithm for multi dimension solution optimization / prediction 上的回答。

    【讨论】:

    • 乔,谢谢你的回答。我实际上需要优化一个利润函数,所以我把它分成了收入和费用两个子函数。我正在使用 SPEA2 进行优化。
    【解决方案2】:

    让我在前面的答案中添加一些内容。多目标优化是单目标优化的推广。这意味着单目标优化是它的一个子集。多目标优化的研究领域解决了具有多个值的困难,这意味着在目标空间中用于性能评估的不是标量而是向量。每个多目标优化算法都必须解决这个问题才能工作。

    对于单目标优化,目标空间中的支配概念显然仍然成立。在双目标优化(假设最小化)中,我们说[3, 5][2, 4] 主导(因为它在两个目标上都更好)并且对[4, 2] 无动于衷(一次更好,一次更糟)。在单目标优化中,我们基本上将列表与 single 元素进行比较,这与仅比较标量相同。我们简单地说 3 支配 5

    因此,您通常还可以对单目标问题运行多目标优化算法。但是,您可能会发现更好的收敛速度更快的单目标算法。

    例如,您可以使用著名的 NSGA-II 算法使用 Python 中的多目标优化框架 pymoo 优化单目标函数。

    免责声明:我是pymoo的主要开发者。

    下面的源代码使用 NSGA-II(一种多目标算法)来获得 Himmelblau 函数(单目标测试问题)的最优解:

    from pymoo.algorithms.nsga2 import NSGA2
    from pymoo.factory import get_problem
    from pymoo.optimize import minimize
    
    problem = get_problem("himmelblau")
    
    algorithm = NSGA2(pop_size=20)
    
    res = minimize(problem,
                   algorithm,
                   seed=1,
                   verbose=True)
    
    print(res.F) 
    

    在 2000 次函数评估中找到 F=0.00034225

    但是,如果您使用Hooke and Jeeves Pattern Search,您将更快地获得最佳值:

    from pymoo.algorithms.so_pattern_search import PatternSearch
    from pymoo.factory import get_problem
    from pymoo.optimize import minimize
    
    problem = get_problem("himmelblau")
    
    algorithm = PatternSearch()
    
    res = minimize(problem,
                   algorithm,
                   seed=1,
                   verbose=True)
    
    print(res.F) 
    

    仅在 224 次评估中找到 F=4.62182083e-18

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-23
      • 2021-06-13
      • 2018-06-25
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多