Java ojAlgo线性规划求解器的速度
我对线性编程非常陌生,我确实用lpsolve(从Java调用的二进制dll,通过JavaILP包装器获得更面向对象的代码)解决了我的第一个问题,速度非常快(50毫秒) 然后,我决定避免使用本机代码(如果可能的话),并使用ojAlgo重新编写所有内容。对于我的2100变量问题,解决时间已从50毫秒增加到1089毫秒 这个速度正常/预期吗 是不是因为ojAlgo使用的是Java ojAlgo线性规划求解器的速度,java,linear-programming,ojalgo,Java,Linear Programming,Ojalgo,我对线性编程非常陌生,我确实用lpsolve(从Java调用的二进制dll,通过JavaILP包装器获得更面向对象的代码)解决了我的第一个问题,速度非常快(50毫秒) 然后,我决定避免使用本机代码(如果可能的话),并使用ojAlgo重新编写所有内容。对于我的2100变量问题,解决时间已从50毫秒增加到1089毫秒 这个速度正常/预期吗 是不是因为ojAlgo使用的是BigDecimal(不太确定,我在代码中看到了doubles)而lpsolve可能使用的是ints 我能做点什么吗 另一方面,发现
BigDecimal
(不太确定,我在代码中看到了double
s)而lpsolve可能使用的是int
s
我能做点什么吗
另一方面,发现的最大值从1013
增加到OPTIMAL 1249
,这很好。(使用lpsolve,我甚至不知道还有更好的解决方案)
编辑:我没有注意到一些表达式名称相互冲突,我想这会使它们相互覆盖;现在我修复了这个问题,并在8270毫秒内找到了一个
最优1013
解决方案。纯java解算器比本机代码慢是完全正常的
你有整数变量吗?如果你这样做,这就是一个MIP,而这些问题可能很难解决
ojAlgo将模型和解算器分离。该模型在内部使用BigDecimal。该模型分析问题,并根据问题特征调用不同的求解器。解算器可以使用他们想要的任何数字类型。内置的ojAlgo解算器使用基本体double
您可以在ojAlgo中插入任何您喜欢的解算器。已经有3个顶级商业解决方案的集成:
还有其他纯java、开源、LP解算器可用:
lpsolve尚未集成