Optaplanner終於支持多線程並行運行 - Multithreaded incremental solving

  Optaplanner 7.9.0.Final之前,啓動引擎開始對一個Problem進行規劃的時候,只能是單線程進行的。也就是說,當引擎對每一個possible solution進行分數計算的過程中,細化到每個步驟(Caculation),都只能排隊在同一個線程中依次計算,不管你的問題是否存在並行計算的可能。很顯示這種運算方式應用於一些可並行計劃的場景下,是相當不利的。就算是一些在業務邏輯上無法實現並行運算的情況,若在引擎自行調用指定的算法進行尋優時,若可以將每個Step,甚至每個Move的運行操作,適當地分配到不同的線程中執行,那麼在多核CPU的環境下,無疑能大大提升planning的性能,從而在規定的時間內行到更優的效果。畢竟對於NP-Hard/NP-Complete問題,除了比較算法優劣外,另一個維度對比的就是運算量。

   而在7.9.0.Final版本中,發佈了並行計算功能 - Multithreaded incremental solving. 此功能只需要在配置文檔中指定對應的並行線程數(可指定數量,也可由系統自行決定線程數),在啓動Planning後,每一個Step中的各個Move即有可能被分配於不同的線程進行計算。我在我的項目中啓用了此功能,試用過各種類型的項目,其性能的提升基本上在30% - 150%之間。對於運算量巨大的情況(約束多且複雜、問題規劃大),確實能有不少的提升。

  此功能在7.12.0. Final版本中,也有所優化,主要是針對Chained Throudth Time模式下的優化。

 

關於並行計算功能的更新信息如下:

New and noteworthy: Engine 7.9.0.Final

Multithreaded incremental solving

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:

searchTableOfContents

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.

 

 


 

本系列文章在公衆號不定時連載,請關注公衆號(讓APS成爲可能)及時接收,二維碼:


如需瞭解更多關於Optaplanner的應用,請發電郵致:[email protected]
或到討論組發表你的意見:https://groups.google.com/forum/#!forum/optaplanner-cn
若有需要可添加本人微信(13631823503)或QQ(12977379)實時溝通,但因本人日常工作繁忙,通過微信,QQ等工具可能無法深入溝通,較複雜的問題,建議以郵件或討論組方式提出。(討論組屬於google郵件列表,國內網絡可能較難訪問,需自行解決)

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章