在optaplanner中是否有中止路由计算的功能?

时间:2019-03-28 02:52:03

标签: optaplanner

我想要一个函数,例如,如果计算时间过长,我们将中止路由计算并在时间点上提交最佳解决方案。 optaplanner中有这样的功能吗?

1 个答案:

答案 0 :(得分:2)

例如,在GUI应用程序中,您将开始在后台(工作人员)线程上进行求解。在这种情况下,您可以通过从另一个线程(通常是单击单击停止按钮的UI线程)中调用solver.terminateEarly()来异步停止求解器。

如果这不是您想要的内容,请继续阅读。

通过计算,您实际上表示的是求解所花费的时间,您有几种选择方式来停止求解器。除了第一段中描述的异步终止,您还可以使用同步终止:

    如果您知道要花费多少时间来预先解决,请
  1. 使用花费的时间终止。
  2. 如果您要在指定的时间内没有改善解决方案而想停止求解,请
  3. 使用未花费的时间终止。
  4. 如果要在达到一定分数后停止求解,请使用最佳分数终止。

同步终止是在启动求解器之前定义的,它可以通过XML求解器配置或使用SolverConfig API来完成。有关其他终止条件,请参见OptaPlanner documentation

最后,如果您要谈论的是得分计算,并且计算单步得分(解决方案更改)所花费的时间太长,那么您肯定做错了什么。为了使OptaPlanner能够有效地搜索解决方案空间,得分计算必须快速(每秒至少1000次计算)。

例如在车辆路径问题中,开始求解时必须知道行驶时间或道路距离。您不应该通过事先可以完成的繁重计算来减慢分数计算的速度。