我想用多目标进化算法来解决单个客观优化问题。它在技术上是否正确以及如何完成?
答案 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
。