相同的优化代码在不同的计算机上有不同

时间:2017-09-04 20:38:52

标签: python optimization scipy minimization

我正在运行嵌套优化代码。

sp.optimize.minimize(fun=A, x0=D, method="SLSQP", bounds=(E), constraints=({'type':'eq','fun':constrains}), options={'disp': True, 'maxiter':100, 'ftol':1e-05})

sp.optimize.minimize(fun=B, x0=C, method="Nelder-Mead", options={'disp': True})

第一个最小化是函数B的一部分,所以它在第二个最小化内运行。

整个优化基于数据,不涉及随机数。

我在两台不同的计算机上运行完全相同的代码,并获得完全不同的结果。

我安装了不同版本的anaconda,但是

scipy,numpy和所有使用的软件包都有相同的版本。

我真的不认为操作系统会很重要,但一个是Windows 10(64位),另一个是Windows 8.1(64位)

我试图弄清楚可能导致这种情况的原因。

即使我没有说明整个选项,如果两台计算机运行相同的代码,结果是否应该相同?

或sp.optimize是否有任何选项可以将默认值设置为与计算机不同?

PS。我在看“eps”选项。在这些计算机上,“eps”的默认值是否可能不同?

1 个答案:

答案 0 :(得分:0)

你永远不要指望数值方法在不同的设备上执行相同的操作;或者甚至在同一设备上运行相同代码。由于机器的精度有限,您无法计算“实际”结果,只能计算数值近似值。在长时间的优化任务中,这些差异可以归结起来。

此外,一些优化方法在内部使用某种随机性来解决陷入局部最小值的问题:它们为先前计算的解决方案添加了一个小的,消失的噪声,以允许算法在全局中更快地收敛最小值,不要陷入局部最小值或鞍点。

您可以尝试绘制想要最小化的功能的横向吗?这可以帮助您分析问题:如果两个结果(在每台机器上)都是局部最小值,那么这种行为可以通过我之前的描述来解释。

如果不是这种情况,则应检查两台计算机上已安装的scipy版本。也许你隐含地在一台设备上使用float值,在另一台设备上使用double值?

你看:对于这个(初看起来)奇怪的数字行为有很多可能的解释;你必须给我们更多细节来解决这个问题。