Choco继续使用中间解决方案

时间:2016-03-25 14:13:26

标签: java solver constraint-programming choco

每隔一段时间,我的建筑时间就会从5秒跳到200左右。有时候,即使我用相同的数据在同一时间内得到17左右,我也无法获得任何解决方案。

是否可以停止求解器,检查是否有解决方案,如果是,则继续,否则重新启动,可能会更改约束?

这是我到目前为止所得到的:

SMF.limitTime(solver, 60000);
solver.set(new ObjectiveManager<IntVar, Integer>(score, ResolutionPolicy.MINIMIZE, false));
solver.findSolution();
if(solver.isFeasible() == ESat.TRUE){
   System.out.println("first solution found");
   SMF.limitTime(solver, 180000);
   solver.nextSolution();
} else {
   //restart
}
do{
 if(solver.isFeasible() == ESat.TRUE){
     System.out.println(score.getValue());
 }
}while(solver.nextSolution());
try {
   solver.restoreLastSolution();
} catch (ContradictionException e) {
   throw new UnsupportedOperationException("restoring the last solution ended in a failure");
} finally {
   solver.getEngine().flush();
}

但是使用的限制仍然是一分钟,并且在找到第一个解决方案后不会增加到三个。

有办法吗?我该如何重新启动求解器?

一个相关的问题:如果我确实得到了一个解决方案,恢复了那个解决方案,但是我想再多一点时间我会得到一个更好的解决方案,我可以用这个解决方案作为起点开始求解器吗?

0 个答案:

没有答案