2017-09-04 151 views
1

我正在运行嵌套优化代码。相同的优化代码不同的计算机上的不同结果

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的一部分,所以它是第二次最小化中运行的一种。

而整个优化是基于数据,没有涉及到随机数。

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

我已经安装了不同版本的森蚺,但

SciPy的,numpy的,以及所使用的所有包具有相同的版本。

我真的不认为操作系统将无关紧要,但一个是Windows 10(64位),另一种是Windows 8.1中(64位)

我试图找出什么可能导致此。

即使我没有说明整个选项,如果两台电脑运行相同的代码,不应该结果是相同的吗?

或者是否有sp.optimize的任何选项,默认值设置为不同于计算机到计算机?

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

+0

Python版本有区别吗? –

+0

哦。你是对的。我错过了这个......一个是Python 3.6.0,另一个是Python 3.6.1 它会导致差异吗?我的意思是......这有点令人沮丧,因为在一台计算机上,它在3000次迭代中收敛,但在另一台计算机上,直到7000次迭代才收敛。 – WKW

+0

这两个Python实例都是64位的吗?这也可能是一个因素。检查numpy数组在两个实例上使用相同的'dtype'。 –

回答

0

您不应该期望数值方法在不同的设备上具有相同的性能;或者甚至在同一设备上运行相同代码的不同运行。由于机器的有限精度,您无法计算“真实”结果,但只能计算数值近似值。在长期的优化任务中,这些差异可以总结出来。此外,一些优化方法在内部使用某种随机性来解决陷入局部最小值的问题:它们为先前计算的解决方案添加了一个小的alomost消失噪声,以允许算法在全球最低限度,而不会陷入局部最低点或鞍点。

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

如果不是这种情况,您应该检查两台机器上安装的scipy版本。也许你是在一个设备上隐式使用float值,另一个设备上是否使用double值?

你会看到:这里有很多可能的解释(第一眼看)奇怪的数字行为;你必须给我们更多的细节来解决这个问题。

+0

首先,谢谢你的回答!但是我多次在同一台计算机上获得了相同的结果。我只是尝试在另一台电脑上,得到不同的结果,有点惊讶.. 我真的希望我可以上传我的代码,但我认为我不应该.. :( 你可能是非常善良和告诉我更多关于“隐式使用float和double”的内容吗?这是否与机器精度有关?我怎样才能检查它?(scipy版本是相同的。) – WKW

+0

@WonkiWoo尝试绘制你想要的函数的空间正如我告诉过你的,尽量减少。 – FlashTek

相关问题