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