0

每隔一段时间,我的构建时间就会从 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();
}

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

有没有办法做到这一点?以及如何重新启动求解器?

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

4

0 回答 0