Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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
CPLEX&x2B;JAVA内存问题,保留上次找到的解决方案_Java_Memory_Cplex - Fatal编程技术网

CPLEX&x2B;JAVA内存问题,保留上次找到的解决方案

CPLEX&x2B;JAVA内存问题,保留上次找到的解决方案,java,memory,cplex,Java,Memory,Cplex,我有以下问题:我的CPLEX模型遇到内存不足错误(1001)。这是意料之中的,但我希望保留最后一个解决方案(现有和差距,以及所有变量值) 问题是我“结束”在catch部分,在那里我不能再保留任何变量值、目标函数值等 有没有办法帮我找到最后一个解决方案? 谢谢大家! 而不是 cplex.solve() 在试一试中,你可以做一个循环 cplex.setParam(IloCplex.Param.MIP.Limits.Solutions, 1); cplex.solve(); 然后你会得到一个接一

我有以下问题:我的CPLEX模型遇到内存不足错误(1001)。这是意料之中的,但我希望保留最后一个解决方案(现有和差距,以及所有变量值)

问题是我“结束”在catch部分,在那里我不能再保留任何变量值、目标函数值等 有没有办法帮我找到最后一个解决方案? 谢谢大家!

而不是

cplex.solve() 
在试一试中,你可以做一个循环

cplex.setParam(IloCplex.Param.MIP.Limits.Solutions, 1);
cplex.solve();
然后你会得到一个接一个的解决方案。如果您在最后一个崩溃,您将能够拥有上一个。

而不是

cplex.solve() 
在试一试中,你可以做一个循环

cplex.setParam(IloCplex.Param.MIP.Limits.Solutions, 1);
cplex.solve();

然后你会得到一个接一个的解决方案。如果您在最后一个解决方案中崩溃,您将能够拥有上一个解决方案。

如果其他人尝试实现此解决方案:效果很好,我选择了时间限制和“如果尚未优化”
while(System.nanoTime()-starttime<720000000000l&!status.equals(“优化”){
的组合,其中状态是使用cplex.getStatus()设置的).toString()还有一个问题,这可能会影响其他问题:如果起始解决方案是最优的,则差距非常大(99.x%),而不是0。我发现,只要确保再次迭代(我使用一个变量statusPrev,在状态一次迭代后达到最优),就可以避免这一问题。还有其他问题(IMO更好)方法:a)可以使用MIPInfoCallback。这是经常调用的,可以从中捕获可行的解决方案。b)可以使用通用全局进度回调。这也允许在找到解决方案时捕获解决方案。c)可以使用参数
CPX\u PARAM\u INTSOLFILEPREFIX
将解决方案写入磁盘,就像它们是f一样ound.d)即使内存不足,您也几乎总是能够调用
cplex.getValues()
,即使在
catch
块中也是如此。e)使用磁盘上的节点文件来实际避免完全内存不足。如果其他人尝试实现此解决方案:效果很好,我选择了时间限制和“如果还不是最佳”的组合
while(System.nanoTime()-starttime<720000000000l&&!status.equals(“最优”){
其中使用cplex.getStatus().toString()设置状态还有一个问题,这可能会影响其他问题:如果初始解决方案是最优的,则差距非常大(99.x%)而不是0。我发现这可以通过确保再次迭代来避免(我通过使用一个变量statusPrev实现了这一点,该变量一次又一次地达到最佳状态),还有其他变量(IMO更好)方法:a)可以使用MIPInfoCallback。这是经常调用的,可以从中捕获可行的解决方案。b)可以使用通用全局进度回调。这也允许在找到解决方案时捕获解决方案。c)可以使用参数
CPX\u PARAM\u INTSOLFILEPREFIX
将解决方案写入磁盘,就像它们是f一样ound.d)即使内存不足,您几乎总是能够调用
cplex.getValues()
即使在
catch
block.e)中,也可以使用磁盘上的节点文件来完全避免内存不足。