使用多 objective 算法解决单个 objective 优化
Solving single objective optimization using multi objective algorithm
我想用多objective进化算法来解决单个objective优化问题。它在技术上是否正确以及如何实现?
Multi objective 算法通常通过比较适应度分数来工作。但是当适应度分数是multi-objective的时候,怎么比较呢?因此,神奇之处通常在于算法如何对健身分数进行排序。对于单objective,当尝试使用多objective算法进行优化时,这种魔力可能会丢失,但同样,它可能仍然会工作得很好。
由于您只优化一个 objective,因此您可以使用最简单的遗传算法。例如,请参阅我在 .
的回答
让我对之前的回答补充一些内容。 Multi-objective 优化是 single-objective 优化的推广。这意味着单objective优化是它的子集。 multi-objective 优化的研究领域解决了具有多个值的困难,这意味着在 objective space 中不是标量而是向量用于性能评估。每个 multi-objective 优化算法都必须解决这个问题才能工作。
对于单objective优化,支配概念在objectivespace中显然仍然成立。在 bi-objective 优化(假设最小化)中,我们说 [3, 5]
被 [2, 4]
支配(因为它在 objective 中都更好)并且对 [=14= 无动于衷](一次好一次坏)。在 single-objective 优化中,我们基本上只比较一个列表和一个 single 元素,这与只比较一个标量是一样的。我们简单地说 3 支配 5.
因此,您通常还可以针对单个 objective 问题使用 运行 多 objective 优化算法。但是,您可能会发现更好的单 objective 算法,它们收敛得更快。
例如,您可以使用著名的 NSGA-II 算法优化单 objective 函数,使用 pymoo 中的多 objective 优化框架 Python.
免责声明:我是pymoo的主要开发者。
下面的源码使用NSGA-II(一个multi-objective算法)得到Himmelblau函数(一个single-objective测试问题)的最优解:
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
。
我想用多objective进化算法来解决单个objective优化问题。它在技术上是否正确以及如何实现?
Multi objective 算法通常通过比较适应度分数来工作。但是当适应度分数是multi-objective的时候,怎么比较呢?因此,神奇之处通常在于算法如何对健身分数进行排序。对于单objective,当尝试使用多objective算法进行优化时,这种魔力可能会丢失,但同样,它可能仍然会工作得很好。
由于您只优化一个 objective,因此您可以使用最简单的遗传算法。例如,请参阅我在
让我对之前的回答补充一些内容。 Multi-objective 优化是 single-objective 优化的推广。这意味着单objective优化是它的子集。 multi-objective 优化的研究领域解决了具有多个值的困难,这意味着在 objective space 中不是标量而是向量用于性能评估。每个 multi-objective 优化算法都必须解决这个问题才能工作。
对于单objective优化,支配概念在objectivespace中显然仍然成立。在 bi-objective 优化(假设最小化)中,我们说 [3, 5]
被 [2, 4]
支配(因为它在 objective 中都更好)并且对 [=14= 无动于衷](一次好一次坏)。在 single-objective 优化中,我们基本上只比较一个列表和一个 single 元素,这与只比较一个标量是一样的。我们简单地说 3 支配 5.
因此,您通常还可以针对单个 objective 问题使用 运行 多 objective 优化算法。但是,您可能会发现更好的单 objective 算法,它们收敛得更快。
例如,您可以使用著名的 NSGA-II 算法优化单 objective 函数,使用 pymoo 中的多 objective 优化框架 Python.
免责声明:我是pymoo的主要开发者。
下面的源码使用NSGA-II(一个multi-objective算法)得到Himmelblau函数(一个single-objective测试问题)的最优解:
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
。