优化一个包含两个变量的函数,这两个变量的大小在python中相差数量级



我正在尝试优化一个非线性函数,一个项的总和,看起来像:

1/(x1+x1)+2/(x1+x2)+1/(x2+x2)+1/(x1+w1)+1/(x2+w1)+1/(x1+w2)+1/(x2+w2)+... 

其中变量是x1x2我有一个w的列表。

在测试我知道答案的各种w集时,我发现我使用的优化器(scipy.optimize.fmin_tnc)无法给出x1x2值的正确答案,这些值相差几个数量级。

如果两个值大小相近,则给出正确答案。

例如,一组2个唯一且多个退化值(给定少量噪声):

w=[5e-13,5e-13,5e-13,5e-13,5e-13,5e-7,5e-7,5e-7] 

返回~5e-13~2.4e-7的值。

我试着调整公差,但这似乎并没有改善这个测试用例的结果。

将'rescale'标志设置为高于默认值(1.3)可以消除此问题。我相信这个标志通过缩放变量使最小化器更稳定,因此它们的大小更相似。

最新更新