Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ojAlgo线性规划求解器的速度_Java_Linear Programming_Ojalgo - Fatal编程技术网

Java 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 我能做点什么吗 另一方面,发现

我对线性编程非常陌生,我确实用lpsolve(从Java调用的二进制dll,通过JavaILP包装器获得更面向对象的代码)解决了我的第一个问题,速度非常快(50毫秒)

然后,我决定避免使用本机代码(如果可能的话),并使用ojAlgo重新编写所有内容。对于我的2100变量问题,解决时间已从50毫秒增加到1089毫秒

这个速度正常/预期吗

是不是因为ojAlgo使用的是
BigDecimal
(不太确定,我在代码中看到了
double
s)而lpsolve可能使用的是
int
s

我能做点什么吗

另一方面,发现的最大值从
1013
增加到
OPTIMAL 1249
,这很好。(使用lpsolve,我甚至不知道还有更好的解决方案)


编辑:我没有注意到一些表达式名称相互冲突,我想这会使它们相互覆盖;现在我修复了这个问题,并在8270毫秒内找到了一个
最优1013
解决方案。

纯java解算器比本机代码慢是完全正常的

你有整数变量吗?如果你这样做,这就是一个MIP,而这些问题可能很难解决

ojAlgo将模型和解算器分离。该模型在内部使用BigDecimal。该模型分析问题,并根据问题特征调用不同的求解器。解算器可以使用他们想要的任何数字类型。内置的ojAlgo解算器使用基本体double

您可以在ojAlgo中插入任何您喜欢的解算器。已经有3个顶级商业解决方案的集成:

还有其他纯java、开源、LP解算器可用:

lpsolve尚未集成