Optaplanner 多线程尝试在自定义移动中产生 "missing rebase"
Optaplanner multithreading attempt yielded "missing rebase" on custom move
我将 Optaplanner 库从 7.5 更新到 7.9,以便与 nurserostering 代码的变体一起使用,并使用发行说明(例如,某些方法名称已更改)成功重建和重新 运行。然后,我将 "moveThreadCount" xml 行(用于多线程)添加到我的求解器配置 xml。
<moveThreadCount>AUTO</moveThreadCount>
运行 然后马上报错:
Caused by: java.lang.UnsupportedOperationException: The custom move class (class westgranite.staffrostering.solver.move.EmployeeChangeMove) doesn't implement the rebase() method, so multithreaded solving is impossible.
我确实有很多自定义动作。我没有在发行说明中看到任何需要添加 rebase() 方法的参考,也没有在当前(较新的)文档中关于构建自定义移动的部分中看到对 rebase() 的参考。
https://docs.optaplanner.org/7.12.0.Final/optaplanner-docs/html_single/index.html#customMoves
有人能告诉我正确的方法吗?谢谢!
我建议阅读这篇优秀的博客 post:http://www.optaplanner.org/blog/2018/07/03/AGiantLeapForwardWithMultithreadedIncrementalSolving.html 因为它更深入地解释了多线程求解的工作原理。
我还建议阅读有关 rebase 方法的 javadoc,它应该为您指明正确的方向:https://docs.optaplanner.org/7.12.0.Final/optaplanner-javadoc/org/optaplanner/core/impl/heuristic/move/Move.html#rebase-org.optaplanner.core.impl.score.director.ScoreDirector-
这是一个例子:
public class CloudComputerChangeMove extends AbstractMove<CloudBalance> {
private CloudProcess cloudProcess;
private CloudComputer toCloudComputer;
...
@Override
public CloudComputerChangeMove rebase(ScoreDirector<CloudBalance> destinationScoreDirector) {
return new CloudComputerChangeMove(
destinationScoreDirector.lookUpWorkingObject(cloudProcess),
destinationScoreDirector.lookUpWorkingObject(toCloudComputer));
}
}
我将 Optaplanner 库从 7.5 更新到 7.9,以便与 nurserostering 代码的变体一起使用,并使用发行说明(例如,某些方法名称已更改)成功重建和重新 运行。然后,我将 "moveThreadCount" xml 行(用于多线程)添加到我的求解器配置 xml。
<moveThreadCount>AUTO</moveThreadCount>
运行 然后马上报错:
Caused by: java.lang.UnsupportedOperationException: The custom move class (class westgranite.staffrostering.solver.move.EmployeeChangeMove) doesn't implement the rebase() method, so multithreaded solving is impossible.
我确实有很多自定义动作。我没有在发行说明中看到任何需要添加 rebase() 方法的参考,也没有在当前(较新的)文档中关于构建自定义移动的部分中看到对 rebase() 的参考。 https://docs.optaplanner.org/7.12.0.Final/optaplanner-docs/html_single/index.html#customMoves
有人能告诉我正确的方法吗?谢谢!
我建议阅读这篇优秀的博客 post:http://www.optaplanner.org/blog/2018/07/03/AGiantLeapForwardWithMultithreadedIncrementalSolving.html 因为它更深入地解释了多线程求解的工作原理。
我还建议阅读有关 rebase 方法的 javadoc,它应该为您指明正确的方向:https://docs.optaplanner.org/7.12.0.Final/optaplanner-javadoc/org/optaplanner/core/impl/heuristic/move/Move.html#rebase-org.optaplanner.core.impl.score.director.ScoreDirector-
这是一个例子:
public class CloudComputerChangeMove extends AbstractMove<CloudBalance> {
private CloudProcess cloudProcess;
private CloudComputer toCloudComputer;
...
@Override
public CloudComputerChangeMove rebase(ScoreDirector<CloudBalance> destinationScoreDirector) {
return new CloudComputerChangeMove(
destinationScoreDirector.lookUpWorkingObject(cloudProcess),
destinationScoreDirector.lookUpWorkingObject(toCloudComputer));
}
}