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

时间:2017-08-25 03:20:12

标签: math mathematical-optimization nonlinear-optimization

我不知道为什么我这么难以弄明白。

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

  • f(x,y)处于目标值(最小化与目标的差异)
  • g(x,y)被最小化(可以是负数,不会停在0)
  • x y 是有界的(所以 g ' s的最小值不一定是0的渐变)

因此,如果我只是找到 f 的解决方案,我可以最小化abs(f(x, y) - target),例如,当它找到解决方案时它会达到零。但是有多个这样的解决方案,我也希望找到最小化 g 的解决方案。

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

我的第一次尝试是100*abs(f(x, y) - target) + g(x, y)强烈强调首先击中目标,并且它对某些目标值的情况起作用,但对其他情况失败,因为g(x, y)可能会如此负面以至于它占主导地位组合和优化器停止关心 f 。我如何保证击中目标的 f 始终占主导地位?

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

2 个答案:

答案 0 :(得分:2)

有关于多目标优化的丰富文献。两种流行的方法是加权目标和词典方法。

加权目标可以设计为:

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
  3. 为了测量目标与f之间的偏差,我在这里使用了二次函数。您也可以使用绝对值。

答案 1 :(得分:0)

由于无法将f(x,y)-target精确地设为零,因此必须接受一定量的错误。我将使用相对误差r = abs((f(x,y) - target)/ target)。

用r快速增长的功能应该可以解决问题。

exp(r / epsilon)+ g(x,y)

如果我选择epsilon = 1e-10,那么我知道r必须小于1e-7,因为exp(1000)是一个巨大的数字,但是当r很小时,如r = 1e-12,那么指数变化非常缓慢,g(x,y)将成为主导词。您甚至可以更进一步,计算x和y与其真实值的接近程度,但通常只需更轻松地调整参数,直到获得所需内容为止。