scipy.optimize.fmin_bfgs为同一目标函数返回不同的结果

时间:2014-06-18 22:22:40

标签: python python-2.7 numpy scipy mathematical-optimization

我使用scipy来最小化某些功能但遇到了一个奇怪的问题。问题是如果我使用相同的目标函数和初始点多次运行scipy.optimize.fmin_bfgs,它每次都会返回不同的结果。

这是我的代码:

# objective function (a bit long, I know)
>>> def obj_fun(x):
...     x1, x2, x3, y1, y2, y3 = x[0], x[1], x[2], x[3], x[4], x[5]
...     return -(x1 * (y2 - y3) + x2 * (y1 - y3) + x3 * (y1 - y2)) ** 2.0 + 10240.0 * ((x1 ** 2.0 + 2.0 * x1 * y1 + 3.0
* y1 ** 2.0 - 1.0) ** 2.0 + (x2 ** 2.0 + 3.0 * x2 * y2 + 2.0 * y2 ** 2.0 - 3.0) ** 2.0 + (x3 ** 2.0 + 1.3 * x3 * y3 + 4.
0 * y3 ** 2.0 - 7.0) ** 2.0)

我如何致电fmin_bfgs

>>> fmin_bfgs(obj_fun, np.array([0,1,2,3,4,5,6]))
Warning: Desired error not necessarily achieved due to precision loss.
         Current function value: -234096226752563985252352.000000
         Iterations: 342
         Function evaluations: 4596
         Gradient evaluations: 475
array([ -6.96051555e+04,  -3.83874412e+06,   5.37631361e+04,
         3.48506449e+04,   3.83874414e+06,  -1.94246588e+04,
         6.00000000e+00])
>>> fmin_bfgs(obj_fun, np.array([0,1,2,3,4,5,6]))
Warning: Desired error not necessarily achieved due to precision loss.
         Current function value: -22936558246668045123584.000000
         Iterations: 553
         Function evaluations: 7218
         Gradient evaluations: 747
array([ -3.91291135e+04,  -2.14765204e+06,   3.03606753e+04,
         1.95065952e+04,   2.14765197e+06,  -1.08606776e+04,
         6.00000000e+00])

请注意,我使用完全相同的目标函数和初始点调用fmin_bfgs,但它只是返回不同的结果。

这可能是什么?我怎样才能达到预期的行为?

编辑:

我刚刚在一台带有AMD A10-5750M处理器的计算机上测试过相同的代码,它确实有效!我也在Intel Core2 Duo U9400计算机上测试了它并没有!我自己的电脑有Intel Core i3-2330M,当然它不起作用。 3台计算机在Windows 8.1上运行,安装了相同版本的python,numpy和scipy(分别为2.7,1.7.1和0.11.0)。

我不知道这是否重要,但我已经疯了。

0 个答案:

没有答案