multithreading - PlanningEntity 中的多线程与 ValueRangeProvider
问题描述
我们尝试使用 7.9Final 引入的新“多线程增量求解”功能,只需将其添加到我们的 .xml 配置文件中即可。
似乎当我们在 PlanningEntity 中停用 ValueRangeProvider 时,它可以工作,但是当我们激活 ValueRangeProvider 时,它会中断。
- 首先:这是预期的吗?
为了解决这个问题,我们尝试用 ValueSelector 替换 ValueRangeProvider。
不幸的是,除了第 8.6.4.2 节中非常简短的介绍外,我们没有找到此功能的示例。(“过滤的实体选择”)的文档。这不足以让我们理解如何正确实现 ValueSelector。
- 这是解决问题的好方法吗?
- 如果是的话,你有任何关于我们如何实现它的指针/提示/示例吗?
提前感谢您的帮助
堆栈跟踪 :
"Thread-7@7390" prio=6 tid=0x28 nid=NA waiting
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Unsafe.java:-1)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:403)
at org.optaplanner.core.impl.heuristic.thread.OrderByMoveIndexBlockingQueue.take(OrderByMoveIndexBlockingQueue.java:135)
at org.optaplanner.core.impl.localsearch.decider.MultiThreadedLocalSearchDecider.forageResult(MultiThreadedLocalSearchDecider.java:187)
at org.optaplanner.core.impl.localsearch.decider.MultiThreadedLocalSearchDecider.decideNextStep(MultiThreadedLocalSearchDecider.java:157)
at org.optaplanner.core.impl.localsearch.DefaultLocalSearchPhase.solve(DefaultLocalSearchPhase.java:70)
at org.optaplanner.core.impl.solver.AbstractSolver.runPhases(AbstractSolver.java:87)
at org.optaplanner.core.impl.solver.DefaultSolver.solve(DefaultSolver.java:191)
at com.astree.business.planning.automaticplanning.optaplanner.testbed.gui.OptaPlannerTestBedGui.lambda$toggleSolving$1(OptaPlannerTestBedGui.java:110)
at com.astree.business.planning.automaticplanning.optaplanner.testbed.gui.OptaPlannerTestBedGui$$Lambda$120.796893540.run(Unknown Source:-1)
at java.lang.Thread.run(Thread.java:745)
"OptaPool-2-MoveThread-3@7448" prio=5 tid=0x2b nid=NA runnable
java.lang.Thread.State: RUNNABLE
at com.astree.business.planning.automaticplanning.optaplanner.temporalmodel.score.TemporalIncrementalScoreCalculator.afterVariableChanged(TemporalIncrementalScoreCalculator.java:86)
at org.optaplanner.core.impl.score.director.incremental.IncrementalScoreDirector.afterVariableChanged(IncrementalScoreDirector.java:154)
at org.optaplanner.core.impl.heuristic.selector.move.generic.SwapMove.doMoveOnGenuineVariables(SwapMove.java:115)
at org.optaplanner.core.impl.heuristic.move.AbstractMove.doMove(AbstractMove.java:40)
at org.optaplanner.core.impl.heuristic.move.AbstractMove.doMove(AbstractMove.java:30)
at org.optaplanner.core.impl.score.director.AbstractScoreDirector.doAndProcessMove(AbstractScoreDirector.java:175)
at org.optaplanner.core.impl.heuristic.thread.MoveThreadRunner.run(MoveThreadRunner.java:142)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
解决方案
推荐阅读
- reactjs - 如何显示数组的前三项并隐藏其他项?
- json - 如何在环境变量的 json 文件中包含变量?
- object - 如何从场景类访问游戏对象?
- c++ - 避免矩阵复制构造函数
- c# - BrowserStack Selenium 本地身份验证对话框
- python - flask_sqlalchemy `pool_pre_ping` 有时只工作
- windows-installer - InstallShield 安装程序以恢复模式启动 - 我如何禁用它?
- css - 将字体大小设置为 1em 是否有意义?
- protocols - 官方 Direct Connect (DC) 协议连接文档位于何处?
- php - 你可以在 Elasticsearch 上使用 PHP 命名查询吗?