我想用多目标进化算法求解一个单目标优化问题。从技术上讲,这是正确的吗?
发布于 2018-01-19 00:53:18
多目标算法通常是通过比较适应度分数来工作的。但是当健身成绩是多目标的时候,你怎么能比较它们呢?因此,神奇之处往往在于算法如何对适应度分数进行排序。对于单个目标,使用多目标算法进行优化时,可能会失去这种魔力,但无论如何,它可能仍然工作得很好。
因为你只是在优化一个目标,所以你可以在最简单的时候利用遗传算法。关于这方面的一个例子,请参考我在多维解优化/预测的人工智能算法的答案。
发布于 2020-06-03 19:12:22
让我在前面的回答中补充一些内容。多目标优化是单目标优化的推广.这意味着单目标优化是它的子集.多目标优化的研究领域解决了多值化的困难,这意味着目标空间中的向量不是标量,而是用于性能评价的向量。为了工作,每个多目标优化算法都必须解决这个问题。
对于单目标优化,目标空间中的控制概念显然仍然有效.在双目标优化(假设最小化)中,我们认为[3, 5]被[2, 4] (因为它在两个目标上都更好)所主导,而对[4, 2]则漠不关心(一次更好,一次更糟)。在单目标优化中,我们基本上只是比较一个列表和一个单元素,这与比较标量是一样的。我们简单地说,3占5。
因此,一般情况下还可以运行多目标优化算法来求解单目标问题.然而,您可能会发现更好的单目标算法,它的收敛速度更快。
例如,您可以使用著名的NSGA-II算法来优化单目标函数,使用皮莫,这是Python中的一个多目标优化框架。
免责声明:我是皮莫的主要开发人员。
下面的源代码使用NSGA-II (一种多目标算法)来获得辛梅布鲁函数(单目标测试问题)的最优解:
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。
https://stackoverflow.com/questions/44898298
复制相似问题