我正在尝试优化非线性函数(总和),看起来像这样:

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.3)消除了此问题。我相信此标志通过缩放变量使最小化器更加稳定,因此它们的大小更相似。

关于python - 优化两个变量的函数,这些变量的大小在python中相差几个数量级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32813587/

10-11 18:48