[英]Construction Heuristics takes long time
將Optaplanner 7.3.0與多個計划變量結合使用,從而可以進行多個(2)施工啟發式階段。 這是我的CH階段2的樣子:
<constructionHeuristic>
<queuedEntityPlacer>
<entitySelector id="taskChainEntitySelector">
<entityClass>....Task</entityClass>
</entitySelector>
<changeMoveSelector>
<entitySelector mimicSelectorRef="taskChainEntitySelector"/>
<valueSelector>
<variableName>previousTaskOrEmployee</variableName>
</valueSelector>
</changeMoveSelector>
</queuedEntityPlacer>
</constructionHeuristic>
我有814個任務,previousTaskOrEmployee是一個鏈接的計划變量。 但是,此CH階段大約需要7-8分鍾,甚至比如果我不使用其中任何一個還要多:
1.緩存valueSelector(Cache:PHASE,selectionOrder:SORTED)
2. selectedCountLimit = 100
selectedCountLimit起作用的原因是,此CH階段隨着步驟的進行會創建大量移動,這是一個無需緩存/限制/過濾的簡單數據:
-814init = selectedMovesCOunt:1
..
-621init = selectedMovesCOunt:300
..
-421init = selectedMovesCOunt:500
..
-221init = selectedMovesCOunt:800// increases downwards
In same cases, I've seen moves per step to be more than 50k which is crazy
我的問題:
答:CH的changeMove生成許多步驟是否正常?
B.過濾在CH中沒有多大意義,因為未初始化變量。 那么,應該理想地使用selectedCountLimit嗎?
C.我的第一個CH階段不需要花費任何4-5秒的時間,因為它是相對較少的實體,沒有鏈條。 我的CH階段2擁有814個鏈接實體的理想時間應該是什么?
請參閱文檔部分“按比例縮放構造試探法”。 有多種非笛卡爾非笛卡爾替代方法 ,速度更快。 如果這還不夠用,可以使用“ 分區搜索”(僅使用CH) 。 兩者都有權衡。
另外,請檢查您的分數計算速度是否不太低(至少應高於1000 /秒)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.