我不知道为什么这对我来说这么难弄清楚。
例如,我有两个函数,f(x, y) 和 g(x, y)。我想找到 x 和 y 的值,这样:
- f(x, y) 处于目标值(最小化与目标的差异)
- g(x, y) 被最小化(可以是负数,不会停在 0)
- x 和 y 是有界的(因此 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 目标。
词典编纂方法假定目标的顺序。它看起来像:
- 解决第一个目标
z = min [f-target]^2
.设 z* 为最优目标。 - 在接近 z* 的情况下解决第二个目标:
min g subject to [f-target]^2-z* <= tolerance
为了测量目标和 f 之间的偏差,我在这里使用了二次函数。您也可以使用绝对值。
关于math - 如何结合多个目标进行优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45873936/