<solver>
<moveThreadCount>4</moveThreadCount> ... </solver>
Optaplanner 7.9.0.Final以前,啓動引擎開始對一個Problem進行規劃的時候,只能是單線程進行的。也就是說,當引擎對每個possible solution進行分數計算的過程當中,細化到每一個步驟(Caculation),都只能排隊在同一個線程中依次計算,無論你的問題是否存在並行計算的可能。很顯示這種運算方式應用於一些可並行計劃的場景下,是至關不利的。就算是一些在業務邏輯上沒法實現並行運算的狀況,若在引擎自行調用指定的算法進行尋優時,若能夠將每一個Step,甚至每一個Move的運行操做,適當地分配到不一樣的線程中執行,那麼在多核CPU的環境下,無疑能大大提高planning的性能,從而在規定的時間內行到更優的效果。畢竟對於NP-Hard/NP-Complete問題,除了比較算法優劣外,另外一個維度對比的就是運算量。html
而在7.9.0.Final版本中,發佈了並行計算功能 - Multithreaded incremental solving. 此功能只須要在配置文檔中指定對應的並行線程數(可指定數量,也可由系統自行決定線程數),在啓動Planning後,每個Step中的各個Move即有可能被分配於不一樣的線程進行計算。我在個人項目中啓用了此功能,試用過各類類型的項目,其性能的提高基本上在30% - 150%之間。對於運算量巨大的狀況(約束多且複雜、問題規劃大),確實能有很多的提高。java
此功能在7.12.0. Final版本中,也有所優化,主要是針對Chained Throudth Time模式下的優化。算法
關於並行計算功能的更新信息以下:微信
New and noteworthy: Engine 7.9.0.Final網絡
OptaPlanner can now solve one dataset (without partitioning) with multiple threads to take advantage of multiple CPU cores.工具
Even with just a few CPU cores, it triples the score calculation speed:性能
Multithreaded incremental solving is easy to activate. Just add a <moveThreadCount>
line in your solver config:優化
<solver>
<moveThreadCount>4</moveThreadCount> ... </solver>
This basically donates 4 extra CPU cores to the solver. Use AUTO
to have OptaPlanner deduce it automatically. Optionally, specify a <threadFactoryClass>
for environments that don’t like arbitrary thread creation.google
本系列文章在公衆號不定時連載,請關注公衆號(讓APS成爲可能)及時接收,二維碼:spa
如需瞭解更多關於Optaplanner的應用,請發電郵致:kentbill@gmail.com
或到討論組發表你的意見:https://groups.google.com/forum/#!forum/optaplanner-cn
如有須要可添加本人微信(13631823503)或QQ(12977379)實時溝通,但因本人平常工做繁忙,經過微信,QQ等工具可能沒法深刻溝通,較複雜的問題,建議以郵件或討論組方式提出。(討論組屬於google郵件列表,國內網絡可能較難訪問,需自行解決)