math - 如何结合多个目标进行优化?

标签 math mathematical-optimization nonlinear-optimization

我不知道为什么这对我来说这么难弄清楚。

例如,我有两个函数,f(x, y)g(x, y)。我想找到 xy 的值,这样:

  • f(x, y) 处于目标值(最小化与目标的差异)
  • g(x, y) 被最小化(可以是负数,不会停在 0)
  • xy 是有界的(因此 g 的最小值不一定具有 0 的梯度)

因此,如果我只是为 f 寻找解决方案,我可以最小化 abs(f(x, y) - target),例如,它会命中找到解决方案时为零。但是有多种这样的解决方案,我也想找到最小化 g 的解决方案。

那么我如何将这两个函数组合成一个表达式,然后我可以最小化它(使用类似牛顿的方法)?

我的第一次尝试是 100*abs(f(x, y) - target) + g(x, y) 以强调首先击中目标,并且它适用于某些情况目标值,但对其他人来说失败了,因为 g(x, y) 可能变得如此负以至于它支配组合并且优化器不再关心 f。我如何保证 f 命中目标始终占优势?

是否有关于如何将多个目标合并为一个目标的一般规则?

最佳答案

有大量关于多目标优化的文献。两种流行的方法是加权目标法和字典法。

加权目标可以设计为:

min w1 * [f-target]^2 + w2 * g

对于某些权重 w1, w2 >= 0 .通常我们有 w1+w2=1所以我们也可以这样写:

min w1 * [f-target]^2 + (1-w1) * g

将 w1 设置为大于 w2 的值以强调 f 目标。

词典编纂方法假定目标的顺序。它看起来像:

  1. 解决第一个目标 z = min [f-target]^2 .设 z* 为最优目标。
  2. 在接近 z* 的情况下解决第二个目标: min g subject to [f-target]^2-z* <= tolerance

为了测量目标和 f 之间的偏差,我在这里使用了二次函数。您也可以使用绝对值。

关于math - 如何结合多个目标进行优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45873936/

相关文章:

c++ - 在 C/C++ 中快速实现/逼近 pow() 函数

python - Networkx 旅行商问题 (TSP)

nlp - 插值权重

python - Pyomo 值错误 : PositiveReals is not a valid domain

linear-programming - LP/MILP (CPLEX) 困难

r - 寻找曲线以匹配数据

c - 在 C 中,如何计算两个 48 位无符号整数之间的有符号差?

c++ - 将整数乘以适当分数的快速方法,无需 float 或溢出

python - 质因数,帮助理解平方根的用途

r - 过滤表以仅保留非冗余组