我想要一个函数,例如,如果计算时间过长,我们将中止路由计算并在时间点上提交最佳解决方案。 optaplanner中有这样的功能吗?
答案 0 :(得分:2)
例如,在GUI应用程序中,您将开始在后台(工作人员)线程上进行求解。在这种情况下,您可以通过从另一个线程(通常是单击单击停止按钮的UI线程)中调用solver.terminateEarly()
来异步停止求解器。
如果这不是您想要的内容,请继续阅读。
通过计算,您实际上表示的是求解所花费的时间,您有几种选择方式来停止求解器。除了第一段中描述的异步终止,您还可以使用同步终止:
同步终止是在启动求解器之前定义的,它可以通过XML求解器配置或使用SolverConfig
API来完成。有关其他终止条件,请参见OptaPlanner documentation。
最后,如果您要谈论的是得分计算,并且计算单步得分(解决方案更改)所花费的时间太长,那么您肯定做错了什么。为了使OptaPlanner能够有效地搜索解决方案空间,得分计算必须快速(每秒至少1000次计算)。
例如在车辆路径问题中,开始求解时必须知道行驶时间或道路距离。您不应该通过事先可以完成的繁重计算来减慢分数计算的速度。