用多目标算法求解单目标优化问题

时间:2017-07-04 06:21:24

标签: optimization evolutionary-algorithm

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

2 个答案:

答案 0 :(得分:0)

多目标算法通常通过比较健身分数来工作。但是当健身分数是多目标时,你如何比较它们呢?因此,魔术通常在于算法如何对健身分数进行分类。使用单目标,当尝试使用多目标算法进行优化时,这种魔力可能会丢失,但同样,它可能仍然可以很好地工作。

由于您只是优化单个目标,因此您可以最简单地利用遗传算法。有关此示例,请参阅我在AI algorithm for multi dimension solution optimization / prediction处的回答。

答案 1 :(得分:0)

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

对于单目标优化,目标空间中的支配概念显然仍然成立。在双目标优化(假设最小化)中,我们说[3, 5][2, 4]主导(因为在两个目标上都更好),而对[4, 2]则无动于衷(一次更好,一次更糟)。在单目标优化中,我们基本上只比较带有单个元素的列表,这与比较标量相同。我们只是说 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