[英]Optaplanner early termination deltas between Incremental Score state and solution
我正在使用增量分數計算器類,因為大量使用地圖和計算,這些地圖和計算在流口水中不能很好地擴展。
它似乎運行良好,但由於我不得不調試,我注意到最終解決方案中使用的移動次數與我的 before/afterVariableChanged 處理程序處理的移動次數之間存在差異。 這會導致解決方案中實際分配的內容與增量分數對象中的狀態之間存在差異。 根據一些日志,增量似乎不知道解決方案何時因提前終止而停止接受移動(我使用的是 secondsSpentLimit)。
如何阻止我的增量分數實施接收由於提前終止而不會在解決方案中考慮的 before/afterVariableChanged 事件?
您能否打開TRACE
日志記錄以確認此行為?
本質上,LocalSearch 看起來像這樣( moveThreadCount=NONE
(= 默認)):
for (each step && not terminated) {
stepStarted()
for (each move && not terminated) {
doMove(); // Triggers variable listeners
if (better move) updateBestSolution();
undoMove(); // Triggers variable listeners
}
stepEnded()
}
所以終止是原子與移動評估。 所以你的問題應該有另一個原因。
使用moveThreadCount=4
等,這個故事變得有點復雜,但每個移動線程都有自己的 ScoreDirector,所以它們幾乎是獨立工作的。
話雖這么說,增量Java分數計算和影子變量一起可以讓人發瘋......這主要是因為before
事件發生在doMove()的中間,就在變量改變之前。 當時,模型的一半可能已經處於無法理解的中間狀態,因為移動的其他變量已經發生了變化。 FWIW,看看VariableListener.requiresUniqueEntityEvents()
,它可能會有所幫助......或者嘗試 ConstraintStreams (如果你喜歡速度而不是功能,BAVET 實現)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.