纸浆编程输出



我正在与合作者合作进行涉及线性编程的某些优化项目。我们都使用硬币或分支和切割求解器来解决问题。我使用基于Python的PULP软件包构建.LP文件。我不确定合作者如何创建他们的.lp文件(绝对不使用Python(,但是从本质上讲,我们有两个不同的系统生成.lp文件,以解决完全相同的问题 - 即目标函数,变量,约束完全相同。

我通常在Python(myProblm.solve()(中解决我的问题,但是我也一直在生成.lp文件并从命令行调用CBC求解器来求解此文件(问题(。接下来,我将我从系统(Python或命令行(获得的输出与我的合作者获得的输出进行了比较。[请注意,我一边的问题的输出完全是 无论是在纸浆还是在命令行中解决。]

我们之间的目标函数的值匹配很好,但是其他细节不完全匹配。例如,如果我们要解决此晶须混合问题,那么成分的总成本将完全相同,但是成分的比率有所不同。知道为什么会这样?

我手动比较了我们的.lp文件,并注意到了一些差异。对于初学者来说,约束和变量的序列不同。换句话说,如果有5个约束,我的文件将其列为C1,C2,C5,C4,C3,而相同的约束将列为C1,C2,C3,C4,C5。另外,我的python代码将所有数字汇合到10的位置,而他的系统将它们绕到了1的位置。因此,某些变量的系数具有略有不同的值。

这些差异在求解器的确切输出中起作用?

另外,下一个问题是:在求解线性编程优化问题时,我们该怎么做才能获得完全相同的输出?哪些因素会影响LP问题的解决方案?.lp文件的结构之类的因素是否起作用?如果我在不同的计算机上使用完全相同的条件运行相同的LP文件,我会得到完全相同的输出吗?

,因为具有相同最佳目标函数的LP问题有多个解决方案,因此不同的求解器无法保证它们将返回相同的解决方案。当MIP问题使用分支并绑定时,此问题变得更加复杂。使用多线程或多处理几乎不可能。

总结获得相同的解决方案要么生成完全相同的LP文件并使用相同的求解器求解。或更改目标功能,以便只有一个最佳解决方案(也许更喜欢成分的某些顺序,而成分的成本很小(。

最新更新