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:
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.
?
?
對于Optaplanner有任何疑問,可以通過郵件將問題發到我郵件,我將及時處理。通過即時通訊工具,我確實沒辦法即時處理,導致無意忽略了不少信息。
12977379@qq.com?或?kentbill@gmail.com
?
?