繁体   English   中英

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

[英]Same optimization code different results on different computers

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

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})

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

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

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

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

scipy、numpy,所有使用的包版本相同。

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

我想弄清楚是什么原因造成的。

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

或者是否有任何 sp.optimize 选项可以将默认值设置为因计算机而异?

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

您永远不应期望数值方法在不同的设备上具有相同的性能。 甚至同一设备上同一代码的不同运行。 由于机器的精度有限,您永远无法计算“实际”结果,而只能计算数值近似值。 在漫长的优化任务中,这些差异可以加总。

此外,一些优化方法在内部使用某种随机性来解决陷入局部极小值的问题:它们在先前计算的解决方案中添加了一个很小的,几乎没有消失的噪声,以使算法能够在全局最小值中更快地收敛而不会被卡在局部最小值或鞍点中。

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

如果不是这种情况,则应检查两台计算机上安装的scipy版本。 也许你正在使用隐式float在一个设备上和价值double对另外一个值,太?

您会看到:对于这种奇怪的数字行为(乍一看)有很多可能的解释; 您必须提供更多详细信息以解决此问题。

我发现 SciPy 的不同版本允许或不允许最小和最大边界相同。 例如,在 SciPy 版本 1.5.4 中,具有相等最小和最大边界的参数将该项的 Jacobian 发送到 nan,这使最小化提前停止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM