每次我運行solverManager.solveAndListen(...)OptaPlanner 時,都需要500ms初始化它,然后實際求解開始。
有什么辦法可以顯著加快速度嗎?我對其進行了基準測驗,但我不確定它一直在哪里花費。
我做的CVRPTWPD和目前正在測驗3 Vehicles用167 Visits,但降低Visits似乎也沒有影響,所以它一定是別的東西。
如果第一次呼叫solveAndListen很慢,我的場景沒關系,但我需要后續呼叫非常快(30ms理想情況下)。
謝謝
***編輯:
我運行以下代碼一次:
solverConfig = SolverConfig.createFromXmlResource("solverConfig.xml") // takes 315ms
solverManager = SolverManager.create(solverConfig, SolverManagerConfig()) // takes 1409ms
scoreManager = ScoreManager.create(solverManager) // takes 556ms
然后我多次運行一個方法:
加載/重置物體(由 使用
this::findById)運行它(我將它包裝在一個計時器中),每次大約需要 500 毫秒:
solverManager.solveAndListen(
1,
this::findById,
this::save
)
uj5u.com熱心網友回復:
可能的罪魁禍首:
- solverAndListen() 轉移到求解器執行緒池的求解器執行緒。但是 500ms 不太可能在這里。
- 求解器執行緒呼叫
SolverFactory.createSolver(). 創建求解器的速度還不夠快(盡管在 optaplanner 8.0 中,我們有 API 更改允許我們現在內化求解器配置,但我們仍然沒有這樣做。) - 實際解決開始:首先從頭計算分數,第一次計劃克隆等。
我會打賭第 2 項。特別是如果你使用scoreDRL,那么它每次都會決議scoreDRL,并且每次都構建Drools KieBase,這很昂貴。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/404891.html
標籤:
上一篇:我如何使用Selenium查找父類名稱-ChromeDriver
下一篇:在Oracle中讀取執行計劃
