專利名稱::一種基于tbb的多核并行蟻群設(shè)計方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種基于TBB(ThreadBuildingBlocking)的多核并行蟻群設(shè)計方法,屬于計算機仿真與算法優(yōu)化領(lǐng)域。
背景技術(shù):
:離散系統(tǒng)的組合優(yōu)化問題是實際生產(chǎn)中經(jīng)常遇到的問題,比如任務(wù)分配、作業(yè)調(diào)度、路徑規(guī)劃、網(wǎng)絡(luò)路由、數(shù)據(jù)挖掘、生命科學(xué)計算等問題,這些問題隨著規(guī)模的擴大,往往造成計算規(guī)模的迅速增加,被稱為NP復(fù)雜性難題。自從DorigoM提出蟻群算法以來,該算法在解決這類型問題時取得了比較好的效果,但如果問題規(guī)模繼續(xù)擴大,基于單CPU的串行蟻群算法所消耗的時間將迅速增長,也往往不能滿足人們的實時計算需求。如何獲取一種簡單適用的方法來提高蟻群算法的運行時間效率將對實際工程應(yīng)用有重要意義。提高蟻群算法運行效率的一種有效方法是并行化設(shè)計,現(xiàn)有的并行蟻群算法多數(shù)是基于MPI(MessagePassingInterface)實現(xiàn)的,伹MPI設(shè)計并行算法相對繁瑣,尤其在處理數(shù)據(jù)共享和數(shù)據(jù)交換過程中,因此通常只適用于專業(yè)編程人員在計算機集群上設(shè)計的并行蟻群算法。
發(fā)明內(nèi)容本發(fā)明提供一種基于TBB的多核并行蟻群設(shè)計方法,利用TBB并行計算平臺設(shè)計了一種簡單適用的多核并行蟻群方法。蚊群算法本身具有極高的并行性,所有螞蟻獨立,并行構(gòu)建問題的可行解,每個螞蟻在構(gòu)建解的過程中只與當(dāng)前的信息素和啟發(fā)函數(shù)有關(guān),只有在所有螞蟻均完成了可行解的構(gòu)造之后,信息素更新時存在螞蟻間的通信。因此可以將各個螞蟻構(gòu)建可行解的過程分配到不同的線程中。而且蟻群算法中消耗時間、限制效率的主要部分在于循環(huán)迭代計算和循環(huán)賦值,特別是當(dāng)問題規(guī)模擴大時,消耗時間急速增加,這些循環(huán)迭代計算和循環(huán)賦值相對獨立,不存在循環(huán)儂賴或循環(huán)依賴較弱。本發(fā)明利用TBB支持多核處理器并行計算的優(yōu)勢來設(shè)計并行蟻群算法,即釆用TBB面向?qū)ο蟮牟⑿袃?yōu)化方法,通過相關(guān)的模版類,優(yōu)化蚊群算法中最為耗時的循環(huán)迭代和循環(huán)賦值,將每個螞蟻的求解過程分配到不同線程,充分利用計算機多核的資源優(yōu)勢,在基本不改變串行蟻群算法的基礎(chǔ)上實現(xiàn)了算法的并行化,保持了原有的設(shè)計結(jié)構(gòu),并且采用串行和并4行相結(jié)合的方法對蟻群算法中的信息素進行更新。本發(fā)明提供的一種基于TBB的多核并行蟻群設(shè)計方法,通過如下步驟來實現(xiàn)步驟l:TBB并行計算平臺的安裝與環(huán)境設(shè)置。步驟2:編寫并行計算的模版類,將蟻群算法中并行度高的各個部分分離出來,根據(jù)需要選擇合適的TBB模版,將其利用TBB設(shè)計成面向?qū)ο蟮哪0骖?,包括將循環(huán)迭代改寫為類、參數(shù)變量的特殊處理等。步驟3:TBB任務(wù)調(diào)度的初始化。步驟4:調(diào)用并行計算的模版類。步驟5:得到并行計算結(jié)果,結(jié)束TBB任務(wù)調(diào)度。所述步驟2中編寫模版類由如下步驟完成(a)設(shè)置問題規(guī)模;利用TBB中paralleUor并行模版編寫節(jié)點間距離計算和初始信息素設(shè)置的模版類;并行模版中編寫計算兩個節(jié)點間距離的類ComputeDistance。類ComputeDistance中包含節(jié)點數(shù)據(jù)結(jié)構(gòu)、operator接口和一個構(gòu)造函數(shù)。在構(gòu)造函數(shù)中通過對象參數(shù)來初始化節(jié)點數(shù)據(jù)結(jié)構(gòu),在operator接口中計算任意兩個節(jié)點間的距離,通過優(yōu)化后的雙重循環(huán)實現(xiàn),外循環(huán)的循環(huán)次數(shù)由調(diào)用parallel_for時的傳入?yún)?shù)確定,在內(nèi)循環(huán)中加入條件判斷減少重復(fù)計算;1(b)初始化各個螞蟻。首先設(shè)置螞蟻數(shù)目,將螞蟻隨機放置到各個節(jié)點;然后并行初始化各個螞蟻,設(shè)置螞蟻路徑的禁忌表。利用TBB中pamlleLfor并行模版編寫初始化各個螞蟻的模版類;在并行模版中編寫初始化螞蟻的類InitializeAnts。類InitializeAnts中包含螞蟻數(shù)據(jù)結(jié)構(gòu),operator接口和一個構(gòu)造函數(shù)。在構(gòu)造函數(shù)中通過對象參數(shù)來初始化螞蟻數(shù)據(jù)結(jié)構(gòu),在operator接口中通過優(yōu)化后的雙重循環(huán)實現(xiàn)螞蟻的初始化。外循環(huán)將螞蟻隨機放置在各個節(jié)點,設(shè)置螞蟻路徑長度為零,循環(huán)次數(shù)由調(diào)用paralleLfor時的傳入?yún)?shù)確定,內(nèi)循環(huán)清空螞蟻路徑禁忌表;(c)各個螞蟻搜尋遍歷路徑,編寫各個螞蟻搜尋路徑的模版類。螞蟻根據(jù)概率選擇添加下一個節(jié)點;根據(jù)當(dāng)前節(jié)點,修改每個螞蟻的路徑禁忌表,計算當(dāng)前路徑長度。利用TBB中paralleLreduce并行模版編寫各個螞蟻搜尋路徑的模版類;在并行模版中編寫各個螞蟻獨立搜尋路徑的類SimulateAnt。類SimulateAnt包含螞蟻數(shù)據(jù)結(jié)構(gòu)、operator接口、join接口,兩個構(gòu)造函數(shù)①,②。構(gòu)造函數(shù)①通過對象參數(shù)來初始化螞蟻數(shù)據(jù)結(jié)構(gòu),并設(shè)置螞蟻全部完成遍歷的標(biāo)志為假;構(gòu)造函數(shù)②從整個任務(wù)空間中分離并構(gòu)建子任務(wù),支持join接口中的合并操作。在operator接口中將循環(huán)的參數(shù)修改成TBB定義的blockecLrange模版類,該參數(shù)由調(diào)用parallel_reduce時的傳入?yún)?shù)確定,使之能夠支持循環(huán)體內(nèi)任務(wù)的并行劃分、循環(huán)體內(nèi)實現(xiàn)螞蟻尋找下一個節(jié)點、螞蟻路徑禁忌表的修改及螞蚊路徑長度的更新,其中螞蟻尋找下一節(jié)點是通過調(diào)用GetNextCity()函數(shù)來實現(xiàn),該函數(shù)根據(jù)狀態(tài)轉(zhuǎn)移概率公式計算螞蟻選擇節(jié)點的轉(zhuǎn)移概率,得到螞蟻訪問的下一個節(jié)點。join接口將多個線程中的各個螞蟻遍歷節(jié)點的結(jié)果進行合并,返回是否所有螞蟻都完成了遍歷的標(biāo)志;上述實現(xiàn)過程中需要注意的是并行優(yōu)化循環(huán)體中的代碼要盡量使用局部變量或者類SimulateAnt的成員變量,而不能使用全局變量,否則不僅不能夠加快運行速度,反而會造成運算時間的倍增;(c)判斷螞蟻狀態(tài)。如果存在未遍歷完所有節(jié)點的螞蟻,則跳轉(zhuǎn)到步驟(c),繼續(xù)重復(fù)螞蟻搜尋路徑過程,否則進行下一步即步驟(e);(d)比較各個螞蟻的路徑長度,選擇最優(yōu)路徑;利用TBB中pamlleLfor并行模版編寫比較各個螞蟻路徑長度的模版類;在并行模版中編寫尋找蟻群中最優(yōu)路徑的類ComputeBestPath。類ComputeBestPath包含螞蟻數(shù)據(jù)結(jié)構(gòu)、當(dāng)前最優(yōu)路徑變量、operator接口和一個構(gòu)造函數(shù)。在構(gòu)造函數(shù)中通過對象參數(shù)來初始化螞蟻數(shù)據(jù)結(jié)構(gòu)和當(dāng)前最優(yōu)路徑變量,在operator接口中將循環(huán)的參數(shù)修改成TBB定義的blockecLrange模版類,該參數(shù)由調(diào)用parallel_for時的傳入?yún)?shù)確定,各個螞蟻的路徑與當(dāng)前蟻群最優(yōu)路徑比較后,更新當(dāng)前最優(yōu)路徑。(e)并行計算節(jié)點間路徑上的信息素殘留量,串行計算螞蟻產(chǎn)生的信息增量,更新路徑上的信息素。禾偶TBB中paralleLfor并行模板編寫更新路徑上的信息素的模版類;模版中編寫兩個節(jié)點間信息素更新的類UpdatePheromone。類UpdatePheromone包含operator接口和一個構(gòu)造函數(shù),構(gòu)造函數(shù)是一個空實現(xiàn),在operator接口中包含TBB規(guī)范的雙重循環(huán),計算任意兩個節(jié)點間殘留的信息素。節(jié)點間的信息素是殘留的信息素與信息素增量的疊加,其中信息素增量的計算需要各個螞蟻之間的通信,為了避免并行過程中頻繁的通信,不使用TBB并行優(yōu)化,而采用串行計算。上述實現(xiàn)過程需要注意的是信息素更新既存在循環(huán)依賴部分,也存在循環(huán)獨立部分,其中計算殘留信息素部分循環(huán)獨立,適合利用TBB改寫為并行^莫版類。但計算信息素增量部分存在各個螞蟻的通信,以便用來交換信息素的修改信息,若改為并行模版會使得通信量過大反而效率降低,因此這一部分釆用串行計算方法。本發(fā)明通過并行和串行相結(jié)合的方法,對并行設(shè)計的殘留信息素部分,串行設(shè)計的信息素增量部分進行串,并行計算來實現(xiàn)信息素更新。本發(fā)明的優(yōu)點在于(1)提高了算法的運行時間效率,為大規(guī)模組合優(yōu)化工程問題的實時解算提供了可能性;(2)并行優(yōu)化計算過程簡單靈活,易于操作,而且符合計算機技術(shù)向著多處理器及多核6架構(gòu)的發(fā)展趨勢;(3)充分利用多核處理優(yōu)勢,提高運行效率,減少資源浪費。附圖說明圖l為本發(fā)明基于TBB的多核并行蚊群設(shè)計方法流程圖;圖2為編寫并行計算的模版類的方法流程圖;圖3為蟻群算法并行實現(xiàn)的示意圖4為蟻群算法的串行實現(xiàn)與本發(fā)明提出的TBB并行實現(xiàn)的運行時間曲線;圖5為蟻群算法的串行實現(xiàn)CPU使用記錄圖6為本發(fā)明提出的TBB并行蟻群實現(xiàn)CPU使用記錄圖。具體*力《本發(fā)明利用TBB并行計算平臺設(shè)計了一種簡單適用的多核并行蟻群設(shè)計方法。下面以解決大規(guī)模TSP問題為例,對本發(fā)明的一種基于TBB的多核并行蟻群設(shè)計方法進一步的說明。TSP問題是指給定n個城市,遍歷每個城市且僅遍歷一次的最短封閉路徑。如圖1所示,應(yīng)用本發(fā)明的方法可以按照如下步驟完成步驟一TBB并行計算平臺的安裝與環(huán)境設(shè)置;步驟二編寫并行計算的模版類。將蟻群算法中并行度高的各個部分分離出來,根據(jù)需要選擇合適的TBB模版,將其利用TBB設(shè)計成面向?qū)ο蟮哪0骖?,包括將循環(huán)迭代改寫為類、參數(shù)變量的特殊處理等;為了實現(xiàn)本發(fā)明的并行方法,本實施例首先編寫5個并行計算的禾莫版類,分別為1)城市間距離計算和初始信息素設(shè)置的模版類;2)初始化各個螞蟻的模版類;3)各個螞蟻搜尋路徑的l莫版類;4)比較各個螞蟻路徑長度的模版類;5)更新路徑上的信息素的模版類。步驟三初始化TBB中的任務(wù)調(diào)度。由于TBB定義了任務(wù)的概念,在初始化TBB任務(wù)調(diào)度時,由任務(wù)調(diào)度器對象taskjcheduler—init實現(xiàn)多任務(wù)的分配和并行計算,支持對多線程的劃分。步驟四調(diào)用所編寫的并行計算的模版類。在調(diào)用并行計算的模版類時,由模版類參數(shù)指定循環(huán)處理的數(shù)值范圍以及任務(wù)粒度參數(shù)。任務(wù)粒度參數(shù)決定了任務(wù)劃分的粒度,如果粒度太大,不能充分提高運行攀率;如果粒度太小,過度的并行化任務(wù)分配造成的開銷反而降低了運行效率。在無法獲得合適任務(wù)粒度情況下可以使用TBB提供的自動分配函數(shù)auto_partitioner()幫助用戶設(shè)置合適的任務(wù)粒度參數(shù)。步驟五得到并行計算結(jié)果;結(jié)束TBB任務(wù)調(diào)度。所述步驟二中五個模版類具體由如下步驟來完成a、設(shè)置問題規(guī)模,即城市的數(shù)目,利用TBB中paralleLfor并行模版編寫城市間距離計算和初始信息素設(shè)置的模版類;并行模版中編寫計算兩個城市間距離的類ComputeDistance。類ComputeDistance中包含城市數(shù)據(jù)結(jié)構(gòu)、operator接口和一個構(gòu)造函數(shù)。在構(gòu)造函數(shù)中通過對象參數(shù)來初始化城市數(shù)據(jù)結(jié)構(gòu),在operator接口中計算任意兩個城市間的距離,通過優(yōu)化后的雙重循環(huán)實現(xiàn),外循環(huán)的循環(huán)次數(shù)由調(diào)用parallel—for時的傳入?yún)?shù)確定,在內(nèi)循環(huán)中加入條件判斷減少重復(fù)計算。b、初始化各個螞蟻。首先設(shè)置螞蟻數(shù)目,將螞蟻隨機放置到各個城市;然后并行初始化各個螞蟻,設(shè)置螞蟻路徑的禁忌表。利用TBB中paralleljor并行模版編寫初始化各個螞蟻的模版類;在并行模版中編寫初始化螞蟻的類InitializeAnts。類InitializeAnts中包含螞蟻數(shù)據(jù)結(jié)構(gòu),operator接口和一個構(gòu)造函數(shù)。在構(gòu)造函數(shù)中通過對象參數(shù)來初始化螞蟻數(shù)據(jù)結(jié)構(gòu),在operator接口中通過優(yōu)化后的雙重循環(huán)實現(xiàn)螞蟻的初始化。外循環(huán)將螞蟻隨機k置在各個城市,設(shè)置螞蟻路徑長度為零,循環(huán)次數(shù)由調(diào)用parallel—for時的傳入?yún)?shù)確定,內(nèi)循環(huán)清空螞蟻路徑禁忌表。c、各個螞蟻搜尋遍歷路徑,編寫各個螞蟻搜尋路徑的l莫版類。螞蟻根據(jù)概率選擇下一個城市節(jié)點,根據(jù)當(dāng)前城市節(jié)點,修改每個螞蟻的路徑禁忌表,計算當(dāng)前路徑長度。這一步是限制蟻群算法運行效率的主要部分,因此采用TBB進行并行設(shè)計對提高算法效率至關(guān)重要。利用TBB中paralleLreduce并行模版編寫各個螞蟻搜尋路徑的模版類。在并行模版中編寫各個螞蟻獨立搜尋路徑的類SimulateAnt。類SimulateAnt包含螞蟻數(shù)據(jù)結(jié)構(gòu)、operator接口、join接口及兩個構(gòu)造函數(shù)①,②。構(gòu)造函數(shù)①通過對象參數(shù)來初始化螞蟻數(shù)據(jù)結(jié)構(gòu),并設(shè)置螞蟻全部完成遍歷的標(biāo)志為假;構(gòu)造函數(shù)②從整個任務(wù)空間中分離并構(gòu)建子任務(wù),支持join接口中的合并操作。在operator接口中將循環(huán)的參數(shù)修改成TBB定義的blocked—range模版類,該參數(shù)由調(diào)用pamlleLreduce時的傳入?yún)?shù)確定,使之能夠支持循環(huán)體內(nèi)任務(wù)的并行劃分、循環(huán)體內(nèi)實現(xiàn)螞蟻尋找下一個城市節(jié)點、螞蟻路徑禁忌表的修改及螞蟻路徑長度的更新,其中螞蟻尋找下一城市節(jié)點是通過調(diào)用GetNextCity()函數(shù)來實現(xiàn),該函數(shù)根據(jù)狀態(tài)轉(zhuǎn)移概率公式計算螞蟻選擇城市的轉(zhuǎn)移概率,得到螞蟻訪問的下一個城市節(jié)點。join接口將多個線程中的各個螞蟻遍歷城市的結(jié)果進行合并,返回是否所有螞蟻都完成了遍歷的標(biāo)志。上述實現(xiàn)過程中需要注意的是并行優(yōu)化循環(huán)體中的代碼要盡量使用局部變量或者類SimulateAnt的成員變量,而不能使用全局變量,否則不僅不能夠加快運行速度,反而會造成運算時間的倍增。d、判斷螞蟻狀態(tài)。如果存在未遍歷完所有城市的螞蟻,則跳轉(zhuǎn)到步驟c,繼續(xù)重復(fù)螞蟻搜尋路徑過程,否則進行下一步即步驟e;e、比較各個螞蟻的路徑長度,選擇最優(yōu)路徑。利用TBB中paralleLfor并行模版編寫比較各個螞蟻路徑長度的模版類。在并行模版中編寫尋找蟻群中最優(yōu)路徑的類ComputeBestPath。類ComputeBestPath包含螞蟻數(shù)據(jù)結(jié)構(gòu)、當(dāng)前最優(yōu)路徑變量、operator接口和一個構(gòu)造函數(shù)。在構(gòu)造函數(shù)中通過對象參數(shù)來初始化螞蟻數(shù)據(jù)結(jié)構(gòu)和當(dāng)前最優(yōu)路徑變量,在operator接口中將循環(huán)的參數(shù)修改成TBB定義的blocked—range模版類,該參數(shù)由調(diào)用parallel—for時的傳入?yún)?shù)確定,各個螞蟻的路徑與當(dāng)前蟻群最優(yōu)路徑比較后,更新當(dāng)前最優(yōu)路徑。f、并行計算城市間路徑上的信息素殘留量,串行計算螞蟻產(chǎn)生的信息增量,更新路徑上的信息素。利用TBB中paralleLfor并行模板編寫更新路徑上的信息素的模版類。并行模版中編寫兩個城市間信息素更新的類UpdatePheromone。類UpdatePheromone包含operator接口和一個構(gòu)造函數(shù),構(gòu)造函數(shù)是一個空實現(xiàn),在operator接口中包含TBB規(guī)范的雙重循環(huán),計算任意兩個城市間殘留的信息素。城市間的信息素是殘留的信息素與信息素增量的疊加,其中信息素增量的計算需要各個螞蟻之間的通信,為了避免并行過程中頻繁的通信,不使用TBB并行優(yōu)化,而采用串行計算。上述實現(xiàn)過程需要注意'的是信息素更新既存在循環(huán)依賴部分,也存在循環(huán)獨立部分,其中計算殘留信息素部分循環(huán)獨立,適合利用TBB改寫為并行模版類。但計算信息素增量部分存在各個螞蟻的通信,以便用來交換信息素的修改信息,若改為并行模版會使得通信量過大反而效率降低,因此這一部分采用串行計算方法。步驟f中所述更新路徑上的信息素按下式更新ry(r+")=(1-/).~W+△若螞蟻A在本次循環(huán)中經(jīng)過邊e(/,/)、_';若螞蟻A在本次循環(huán)中未經(jīng)過邊e(/,力其中/(0〈p〈l)為信息素蒸發(fā)系數(shù),1-p表示信息素殘留因子,A、表示本次遍歷中路徑(zW)上的信息素增量,A《表示第^:只螞蟻在本次遍歷中留在路徑(zW)上的信息素量。2表示信息素強度,A表示第A:只螞蟻在本次遍歷中所走路徑的總長度。通過上述算法的描述可以看出,算法本身具有極高的并行性,如圖3所示,圖中每一個圓圈標(biāo)記代表一個螞蟻,可見,所有螞蟻獨立,并行搜索路徑中的各個城市,每個螞蟻的路徑選擇只與當(dāng)前路徑中的信息素和啟發(fā)函數(shù)有關(guān),只有在所有螞蟻均完成了各個城市的遍歷之后,對各路徑上信息素更新時存在螞蟻間的通信。因此可以將各個螞蟻尋找路徑過程分配到不同的線程中。本發(fā)明蟻群算法描述在算法的初始時刻,將m只螞蟻隨機放在n座城市,開始時各路徑上的信息素量均相等,設(shè)r"0卜C(C為一較小常數(shù)),隨后,每只螞蟻根據(jù)路徑上殘留的信息素量和啟發(fā)式信息(通常為兩城市間的距離)獨立地選擇下一座城市,在時刻G螞蟻A從城市/轉(zhuǎn)移到城市_/的概率《(0為橋「垂固、o若風(fēng)(O上式中、(0為f時刻連接城市z'到城市y'上的信息素量;^(0為啟發(fā)函數(shù),為,時刻螞蟻從城市/轉(zhuǎn)移到城市j'的期望程度,通常選擇兩城市間距離的倒數(shù);力(o-P,2,…,4—f"^"表示螞蟻&下一步允許選擇的城市集合,其中toZ^表示螞蟻A的禁忌表,記錄了螞蚊A當(dāng)前走過的城市,當(dāng)n座城市都加入到to6^中時,螞蟻A:完成了一次遍歷;"為信息素啟發(fā)式因子,^為期望啟發(fā)式因子。上述設(shè)計方法在IntelPentiumIV雙核3.00GHz處理器上實現(xiàn),對串行計算的蟻群算法和本發(fā)明提出的TBB多核并行設(shè)計的蟻群算法進行仿真,通過對運行時間的比較,如圖4與表1所示,可以看出在問題規(guī)模比較小時,串行蟻群算法和本發(fā)明設(shè)計的算法的運行時間相差不大,但隨著問題規(guī)模的擴大,本方法的運行時間將會縮短到原來的60%左右,明顯提高了算法的運行效率。通過對串行和并行兩種方法解算同樣規(guī)模問題的CPU利用情況的比較,如圖5、圖6所示,可以看出串行算法不能充分調(diào)度兩個處理核心的資源,其中一個CPU的使用率在50%左右,造成了資源的浪費,并沒有體現(xiàn)出計算機雙核的優(yōu)勢,而TBB設(shè)計的并行算法,充分調(diào)度了兩個處理核心資源,使兩個CPU的使用率都能達到90%以上,這也正是運行效率提高的原因。最終實現(xiàn)結(jié)果表1問題規(guī)模對兩種方法運行時間的影響<table>tableseeoriginaldocumentpage10</column></row><table><table>tableseeoriginaldocumentpage11</column></row><table>權(quán)利要求1、一種基于TBB的多核并行蟻群設(shè)計方法,其特征在于由下列步驟實現(xiàn)步驟1TBB并行計算平臺的安裝與環(huán)境設(shè)置;步驟2編寫并行計算的模版類;步驟3TBB任務(wù)調(diào)度的初始化;步驟4調(diào)用并行計算的模版類;步驟5得到并行計算結(jié)果,結(jié)束TBB任務(wù)調(diào)度;步驟2中所述的編寫并行計算的模版類通過下述步驟完成(a)設(shè)置問題規(guī)模;利用TBB中parallel_for并行模版編寫節(jié)點間距離計算和初始信息素設(shè)置的模版類;并行模版中編寫計算兩個節(jié)點間距離的類ComputeDistance;(b)初始化各個螞蟻;首先設(shè)置螞蟻數(shù)目,將螞蟻隨機放置到各個節(jié)點;然后并行初始化各個螞蟻,設(shè)置螞蟻路徑的禁忌表;利用TBB中parallel_for并行模版編寫初始化各個螞蟻的模版類;在并行模版中編寫初始化螞蟻的類InitializeAnts;(c)各個螞蟻搜尋遍歷路徑,編寫各個螞蟻搜尋路徑的模版類;螞蟻根據(jù)概率選擇下一個節(jié)點;根據(jù)當(dāng)前節(jié)點,修改每個螞蟻的路徑禁忌表,計算當(dāng)前路徑長度;利用TBB中parallel_reduce并行模版編寫各個螞蟻搜尋路徑的模版類;在并行模版中編寫各個螞蟻獨立搜尋路徑的類SimulateAnt;(d)判斷螞蟻狀態(tài);如果存在未遍歷完所有節(jié)點的螞蟻,則跳轉(zhuǎn)到步驟(c),繼續(xù)重復(fù)螞蟻搜尋路徑過程,否則進行下一步即步驟(e);(e)比較各個螞蟻的路徑長度,選擇最優(yōu)路徑;利用TBB中parallel_for并行模版編寫比較各個螞蟻路徑長度的模版類;在并行模版中編寫尋找蟻群中最優(yōu)路徑的類ComputeBestPath;(f)并行計算節(jié)點間路徑上的信息素殘留量,串行計算螞蟻產(chǎn)生的信息增量,更新路徑上的信息素;利用TBB中parallel_for并行模板編寫更新路徑上的信息素的模版類;模版中編寫兩個節(jié)點間信息素更新的類UpdatePheromone。2、如權(quán)利要求1所述的一種基于TBB的多核并行蟻群設(shè)計方法,其特征在于類ComputeDistance中包含節(jié)點數(shù)據(jù)結(jié)構(gòu)、operator接口和一個構(gòu)造函數(shù);在構(gòu)造函數(shù)中通過對象參數(shù)來初始化節(jié)點數(shù)據(jù)結(jié)構(gòu),在operator接口中計算任意兩個節(jié)點間的距離,通過優(yōu)化后的雙重循環(huán)實現(xiàn),外循環(huán)的循環(huán)次數(shù)由調(diào)用parallel—for時的傳入?yún)?shù)確定,在內(nèi)循環(huán)中加入條件判斷減少重復(fù)計算。3、如權(quán)利要求1所述的一種基于TBB的多核并行蟻群設(shè)計方法,其特征在于類InitializeAnts中包含螞蟻數(shù)據(jù)結(jié)構(gòu),operator接口和一個構(gòu)造函數(shù);在構(gòu)造函數(shù)中通過對象參數(shù)來初始化螞蟻數(shù)據(jù)結(jié)構(gòu),在operator接口中通過優(yōu)化后的雙重循環(huán)實現(xiàn)螞蟻的初始化;外循環(huán)將螞蟻隨機放置在各個節(jié)點,設(shè)置螞蟻路徑長度為零,循環(huán)次數(shù)由調(diào)用pamllel_for時的傳入?yún)?shù)確定,內(nèi)循環(huán)清空螞蟻路徑禁忌表。4、如權(quán)利要求1所述的一種基于TBB的多核并行蟻群設(shè)計方法,其特征在于類SimulateAnt包含螞蟻數(shù)據(jù)結(jié)構(gòu)、operator接口、join接口及兩個構(gòu)造函數(shù)①,②;構(gòu)造函數(shù)①通過對象參數(shù)來初始化螞蟻數(shù)據(jù)結(jié)構(gòu),并設(shè)置螞蟻全部完成遍歷的標(biāo)志為假;構(gòu)造函數(shù)②從整個任務(wù)空間中分離并構(gòu)建子任務(wù),支持join接口中的合并操作;在operator接口中將循環(huán)的參數(shù)修改成TBB定義的blocked_range模版類,該參數(shù)由調(diào)用parallel_reduce時的傳入?yún)?shù)確定,使之能夠支持循環(huán)體內(nèi)任務(wù)的并行劃分、循環(huán)體內(nèi)實現(xiàn)螞蟻尋找下一個節(jié)點、螞蟻路徑禁忌表的修改及螞蟻路徑長度的更新,其中螞蟻尋找下一節(jié)點是通過調(diào)用GetNextCity()函數(shù)來實現(xiàn),該函數(shù)根據(jù)狀態(tài)轉(zhuǎn)移概率公式計算螞蟻選擇節(jié)點的轉(zhuǎn)移概率,得到螞蟻訪問的下一個節(jié)點;join接口將多個線程中的各個螞蟻遍歷節(jié)點的結(jié)果進行合并,返回是否所有螞蟻都完成了遍歷的標(biāo)志。5、如權(quán)利要求1所述的一種基于TBB的多核并行蟻群設(shè)計方法,其特征在于類ComputeBestPath包含螞蟻數(shù)據(jù)結(jié)構(gòu)、當(dāng)前最優(yōu)路徑變量、operator接口和一個構(gòu)造函數(shù);在構(gòu)造函數(shù)中通過對象參數(shù)來初始化螞蟻數(shù)據(jù)結(jié)構(gòu)和當(dāng)前最優(yōu)路徑變量,在operator接口中將循環(huán)的參數(shù)修改成TBB定義的blocked—range模版類,該參數(shù)由調(diào)用pamlleUor時的傳入?yún)?shù)確定,各個螞蟻的路徑與當(dāng)前蟻群最優(yōu)路徑比較后,更新當(dāng)前最優(yōu)路徑。6、如權(quán)利要求1所述的一種基于TBB的多核并行蟻群設(shè)計方法,其特征在于;類UpdatePheromone包含operator接口和一個構(gòu)造函數(shù),構(gòu)造函數(shù)是一個空實現(xiàn),在operator接口中包含TBB規(guī)范的雙重循環(huán),計算任意兩個節(jié)點間殘留的信息素;節(jié)點間的信息素是殘留的信息素與信息素增量的疊加,其中信息素增量的計算采用串行計算。7、如權(quán)利要求1所述的一種基于TBB的多核并行蟻群設(shè)計方法,其特征在于步驟(f)所述的路徑上信息素更新既存在循環(huán)依賴部分,也存在循環(huán)獨立部分,其中計算殘留信息素部分循環(huán)獨立,適合利用TBB改寫為并行模版類;計算信息素增量部分釆用串行計算方法。8、如權(quán)利要求1所述的一種基于TBB的多核并行蟻群設(shè)計方法,其特征在于所述步驟2中編寫各個螞蟻搜尋路徑的模版類的實現(xiàn)過程中,并行優(yōu)化循環(huán)體中的代碼使用局部變量或者類SimulateAnt的成員變量。全文摘要本發(fā)明公開了一種基于TBB的多核并行蟻群設(shè)計方法,利用TBB支持多核處理器并行計算的優(yōu)勢來設(shè)計并行蟻群算法,即采用TBB面向?qū)ο蟮牟⑿袃?yōu)化方法,通過編寫相關(guān)的模版類,優(yōu)化蟻群算法中最為耗時的循環(huán)迭代和循環(huán)賦值,將每個螞蟻的求解過程分配到不同線程,充分利用計算機多核的資源優(yōu)勢。在基本不改變串行蟻群算法的基礎(chǔ)上實現(xiàn)了算法的并行化,保持了原有的設(shè)計結(jié)構(gòu),并且采用串行計算和并行計算相結(jié)合的方法對蟻群算法中的信息素進行更新。并行優(yōu)化計算過程簡單靈活,易于操作,而且符合計算機技術(shù)向著多處理器及多核架構(gòu)的發(fā)展趨勢,提高了算法的運行時間效率,為大規(guī)模組合優(yōu)化工程問題的實時解算提供了可能性。文檔編號G06N3/00GK101464965SQ200910077119公開日2009年6月24日申請日期2009年1月16日優(yōu)先權(quán)日2009年1月16日發(fā)明者妮李,亮韓,高棟棟,龔光紅申請人:北京航空航天大學(xué)