我不知道为什么我这么难以弄明白。
例如,我有两个函数, f(x,y)和 g(x,y)。我想找到 x 和 y 的值,以便:
因此,如果我只是找到 f 的解决方案,我可以最小化abs(f(x, y) - target)
,例如,当它找到解决方案时它会达到零。但是有多个这样的解决方案,我也希望找到最小化 g 的解决方案。
那么如何将这两个函数组合成一个表达式,然后我可以将其最小化(使用类似牛顿的方法)?
我的第一次尝试是100*abs(f(x, y) - target) + g(x, y)
强烈强调首先击中目标,并且它对某些目标值的情况起作用,但对其他情况失败,因为g(x, y)
可能会如此负面以至于它占主导地位组合和优化器停止关心 f 。我如何保证击中目标的 f 始终占主导地位?
是否有关于如何将多个目标合并为一个目标的一般规则?
答案 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目标。
词典编纂方法假定了目标的排序。它看起来像:
z = min [f-target]^2
。设z *为最佳目标。min g subject to [f-target]^2-z* <= tolerance
为了测量目标与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与其真实值的接近程度,但通常只需更轻松地调整参数,直到获得所需内容为止。