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

问题描述 投票:0回答:1

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

optaplanner
1个回答
2
投票

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

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

如果通过计算你实际上意味着解决的时间,你有几个选项如何停止求解器。除了第一段中描述的异步终止外,您还可以使用同步终止:

  1. 如果您知道您希望事先解决多少时间,请花费终止时间。
  2. 如果您希望在解决方案在指定时间内没有改善的情况下停止求解,请使用未经改进的终止时间。
  3. 如果您想在达到某个分数后停止解决,请使用最佳分数终止。

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

最后,如果您正在谈论得分计算,并且计算单个移动(解决方案更改)的得分需要很长时间,那么您肯定会做错事。为了使OptaPlanner能够有效地搜索解空间,分数计算必须快速(每秒至少1000次计算)。

例如,在车辆路线问题中,必须在开始求解时知道驾驶时间或道路距离。您不应该通过可以预先完成的大量计算来减慢分数计算。

© www.soinside.com 2019 - 2024. All rights reserved.