优化两个变量的函数,这些变量的大小在python中的数量级不同

时间:2015-09-27 22:41:46

标签: python optimization nonlinear-functions

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

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

变量是 x1 x2 ,我有一个w的列表。

在测试我知道答案的各种w,我发现我使用的优化器( scipy.optimize.fmin_tnc )无法正确使用回答 x1 x2 值,它们相隔几个数量级。

如果值的大小更相似,它会给出正确的答案。

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

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

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

我尝试调整容差,但这似乎并没有改善此测试用例的结果。

1 个答案:

答案 0 :(得分:1)

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