我对线性编程很陌生,我确实用 lpsolve 解决了我的第一个问题(从 Java 调用的二进制 dll,通过 JavaILP 包装器具有更多面向对象的代码),而且速度非常快(50 毫秒)。
然后我决定避免使用本机代码(如果可能)并使用 ojAlgo 重新编写所有内容,对于我的 2100 个变量问题,求解时间从 50 毫秒增加到 1089 毫秒。
这个速度是正常/预期的吗?
是不是因为 ojAlgo 正在使用BigDecimal
(不太确定是这样,我double
在那里和那里的代码中看到了 s)并且 lpsolve 可能正在使用int
s?
我能做点什么吗?
另一方面,发现的最大值从1013
增加到OPTIMAL 1249
,这很好。(使用 lpsolve 我什至不知道存在更好的解决方案)
编辑:我没有注意到一些表达式名称发生冲突,我猜这使它们相互覆盖;现在我解决了这个问题,并OPTIMAL 1013
在 8270 毫秒内找到了解决方案。