本發(fā)明公開了一種基于多核處理器的傳感網(wǎng)路由結(jié)構(gòu)優(yōu)化方法,主要用于在多核處理器的環(huán)境下利用并行計算的思想解決傳感網(wǎng)路由結(jié)構(gòu)優(yōu)化的問題。本發(fā)明屬于無線網(wǎng)絡(luò)技術(shù)領(lǐng)域,是一種無線傳感網(wǎng)絡(luò)中信息傳遞的優(yōu)化方法。
背景技術(shù):
無線傳感器網(wǎng)絡(luò)的主要應(yīng)用是在監(jiān)測方面,主要通過接受和發(fā)送數(shù)據(jù)的方式,比如環(huán)境和建筑物的監(jiān)測。但是每個傳感器都有著固定的電量,而每次發(fā)送和接受數(shù)據(jù)都需要消耗一定的能量,由于這些傳感器通常布置在野外無法及時更換電池,因此在給定初始電量的前提下延長網(wǎng)絡(luò)壽命是一個非常重要的問題。通過近幾年在路由結(jié)構(gòu)優(yōu)化方面的研究,基于已有的精確算法或是近似算法,在找到最佳生命期的同時時間復(fù)雜度也得到了比較好的降低。同時隨著計算機(jī)設(shè)備的普及和發(fā)展以及該領(lǐng)域研究的相關(guān)進(jìn)展,有了新的算法設(shè)計的需求,這類設(shè)計問題主要分為兩個方向:
(1)基于計算機(jī)gpu的計算能力的算法設(shè)計;
(2)基于計算機(jī)多核處理器的算法設(shè)計,即多線程實(shí)現(xiàn)并行計算的思想。
第一個方向針對的是利用計算機(jī)上的gpu計算能力,gpu最大的優(yōu)勢在于其提供的并行運(yùn)算。通俗點(diǎn),就是增加了處理圖形計算的計算單元,使之在保證算法運(yùn)行正常的情況下達(dá)到相當(dāng)高的計算速度。第二個方向則是利用計算機(jī)上多核處理器的計算能力,創(chuàng)建多線程實(shí)現(xiàn)并行計算,從而提高解決問題的速度。
這一系列關(guān)于路由結(jié)構(gòu)優(yōu)化的研究都說明了在找到結(jié)構(gòu)中最佳生命期的同時盡可能的降低計算的時間是主要的發(fā)展方向,也就意味著在算法效率不能有效提升的情況下,通過并行算法提高計算速度是一個好的思路。本發(fā)明的主要目的是利用現(xiàn)有計算機(jī)都有著多核cpu可以實(shí)現(xiàn)并行計算的特性,創(chuàng)建多線程調(diào)用算法對路由結(jié)構(gòu)并行計算從而得到比較高的運(yùn)行速度。
本發(fā)明的意義與重要性在于不同于以往的路由結(jié)構(gòu)優(yōu)化的研究,并不是在算法方面優(yōu)化,而是在問題本身上進(jìn)行優(yōu)化,即對問題結(jié)構(gòu)進(jìn)行拆分并行地解決拆分的問題,這就使得運(yùn)行速度提升了數(shù)倍,在規(guī)定時間內(nèi)解決不了的問題也有了解決的可能。所以本發(fā)明不僅僅拘泥于算法的設(shè)計,更加著重于在問題的剖析,對于路由結(jié)構(gòu)優(yōu)化問題有著深化和精細(xì)化的重要意義;如今傳感器網(wǎng)絡(luò)逐漸普及和應(yīng)用,優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu)顯得尤為重要,本發(fā)明對于這一方面的應(yīng)用和研究有著啟發(fā)性的意義。
技術(shù)實(shí)現(xiàn)要素:
[發(fā)明目的]:為了優(yōu)化已有技術(shù)存在的不足,本發(fā)明提出在多核處理器的環(huán)境下利用并行計算的思想解決傳感網(wǎng)路由結(jié)構(gòu)優(yōu)化的問題,充分利用了多核處理器的性能,替代以往的單線程計算。
[技術(shù)方案]:本發(fā)明方案主要包括以下內(nèi)容:
1)網(wǎng)絡(luò)構(gòu)建
建立初始路由樹:根據(jù)已有的節(jié)點(diǎn)的鄰居信息以及相應(yīng)節(jié)點(diǎn)的電量信息構(gòu)建網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。
2)路由結(jié)構(gòu)處理
路由結(jié)構(gòu)處理是整個系統(tǒng)處理過程的重要部分,為后續(xù)的并行調(diào)用算法提供了基本問題實(shí)例,主要包含以下處理過程:找環(huán)和拆環(huán)。
找環(huán):這里主要是讀入一個路由結(jié)構(gòu)圖后從一個節(jié)點(diǎn)出發(fā)找到一條再回到出發(fā)節(jié)點(diǎn)的一個環(huán),出發(fā)節(jié)點(diǎn)不能為匯聚節(jié)點(diǎn),將找到的環(huán)的邊存放起來,以用來下一步拆環(huán)。
拆環(huán):為了將問題拆分來多線程運(yùn)行,需要將問題分解成多個子問題,由多線程運(yùn)行完后再匯聚成整個問題的解。因此對原問題進(jìn)行破圈處理從而獲得多個子問題,拆環(huán)的步驟是逐條考慮找環(huán)步驟中存放的邊然后依次刪除,但每次刪除不同的邊,最后生成與環(huán)的邊數(shù)相同數(shù)量的子問題。每次刪邊時上次刪的邊要加進(jìn)去,然后考慮下一條邊。
3)多線程調(diào)用算法計算
在完成對路由結(jié)構(gòu)處理之后,需要創(chuàng)建與子問題數(shù)量相同的線程數(shù),每個線程運(yùn)行一個子問題,這里主要包含以下幾個部分:1、多線程的創(chuàng)建;2、方法參數(shù)的傳遞;3、運(yùn)行算法記錄結(jié)果。多線程的創(chuàng)建需要根據(jù)前面拆分的子問題進(jìn)行創(chuàng)建,相應(yīng)每個子問題用一個線程運(yùn)行;然后每個子問題即路由結(jié)構(gòu)圖作為參數(shù)傳遞到線程中;最后根據(jù)算法運(yùn)行分為兩種情況:一是在規(guī)定時間內(nèi)多線程運(yùn)行完畢,完成了對問題的求解,則對輸出的生命期進(jìn)行對比取出最大的生命期作為最佳生命期記錄下來;二是在規(guī)定時間內(nèi)多個線程沒有全部完成運(yùn)行,則將還存活的線程殺死并記錄超時,運(yùn)行失敗。
4)路由分發(fā)
利用步驟1)所建立的路由樹,將步驟3)中求解得到的路由結(jié)構(gòu)分發(fā)給對應(yīng)節(jié)點(diǎn),每個節(jié)點(diǎn)在收到信息后,更新自己的父節(jié)點(diǎn)。此時,路由結(jié)構(gòu)建立完成。
[有益效果]:本發(fā)明使用多核處理器并行計算最優(yōu)的路由結(jié)構(gòu),相較于以往的單線程運(yùn)行算法,能夠充分利用現(xiàn)代計算機(jī)的硬件資源,極大降低程序運(yùn)行時間。
附圖說明
圖1為多線程運(yùn)行流程圖;
圖2為調(diào)用算法的流程圖;
具體實(shí)施方式
以下結(jié)合附圖和具體實(shí)例對本發(fā)明做具體的介紹。
如附圖1所示,本發(fā)明為一種基于多核處理器的傳感網(wǎng)路由結(jié)構(gòu)優(yōu)化方法,分為四個階段,網(wǎng)絡(luò)構(gòu)建、路由結(jié)構(gòu)處理、多線程調(diào)用算法求解、路由分發(fā)。
1.網(wǎng)絡(luò)構(gòu)建
此步驟的目的是根據(jù)已有傳感器節(jié)點(diǎn)的電量信息和連通性信息建立網(wǎng)絡(luò)拓?fù)?,以供后續(xù)步驟使用。本發(fā)明中所指的匯聚節(jié)點(diǎn)是一臺連著傳感器節(jié)點(diǎn)的計算機(jī),傳感器節(jié)點(diǎn)將從無線天線收集的數(shù)據(jù)通過usb連接線發(fā)送給計算機(jī),由計算機(jī)執(zhí)行計算任務(wù),并將決策通過usb連接線回傳給傳感器,由傳感器通過無線天線發(fā)布給傳感器網(wǎng)絡(luò)。
2.路由結(jié)構(gòu)處理
路由結(jié)構(gòu)的處理主要是通過找環(huán)和破環(huán)的方式對原結(jié)構(gòu)進(jìn)行拆分,獲得一定數(shù)量的子問題,以供多個線程運(yùn)行。找環(huán)主要是從給定節(jié)點(diǎn)出發(fā)廣度遍歷的找出再次回到此節(jié)點(diǎn)的環(huán),并通過每次刪除環(huán)中一條邊獲得一個子圖,所以相應(yīng)環(huán)中有幾條邊就會拆成相應(yīng)多的子圖。通過迭代的方式,重復(fù)此步驟直到生成相應(yīng)多的子圖。具體分為以下四步:
2.1將從匯聚節(jié)點(diǎn)至鄰居節(jié)點(diǎn)間的有向邊刪除,將得到的圖設(shè)置為當(dāng)前問題的圖。因?yàn)閰R聚節(jié)點(diǎn)的鄰居節(jié)點(diǎn)的最佳策略是將數(shù)據(jù)發(fā)送給匯聚節(jié)點(diǎn),而不是通過其他節(jié)點(diǎn)轉(zhuǎn)發(fā),所以刪除這些構(gòu)建路由樹時無用的邊。初始化子問題集合為空。
2.2對當(dāng)前問題,任選一個節(jié)點(diǎn),從其出發(fā)進(jìn)行廣度優(yōu)先遍歷,找出一個由此節(jié)點(diǎn)出發(fā)再回到此節(jié)點(diǎn)的最小環(huán)。
2.3逐條考慮最小環(huán)中的邊,每次刪除一條邊,將得到的網(wǎng)絡(luò)圖構(gòu)建一個子問題,輸出到子問題集合中。將刪除的邊加回到網(wǎng)絡(luò)中,考慮最小環(huán)的下一條邊。
2.4如果子問題集合中的問題個數(shù)小于需要的問題數(shù)量,則從中選擇一個子問題,將其從子問題集合中刪除,將其設(shè)置為當(dāng)前問題,跳轉(zhuǎn)至步驟2.2。否則,執(zhí)行步驟3.
3.多線程調(diào)用算法求解
3.1對于步驟2得到的子問題集合,創(chuàng)建多線程,線程的數(shù)量等于子問題數(shù)量。每個線程調(diào)用任何一個已有算法去求解一個子問題。子問題作為參數(shù)傳進(jìn)線程中,一個線程對應(yīng)一個子問題。例如,對某個子問題,可采用建立單一的整數(shù)線性規(guī)劃問題如下:
minxt(1)
subjectto
σj|ij∈dxij=1,foralli∈v\{0}(2)
σj|ij∈dyij=σj|ij∈dyji+di,foralli∈v\{0}(3)
σj|ij∈dyij≥0,σj|ij∈dxij∈{0,1},foralli,j∈v(4)
σj|ij∈dxij≤σj|ij∈dyij≤(ei*t+rx)/(rx+tx),foralli,j∈v\{0}(5)
其中xij為待求解的未知0-1整型變量,表示i的父節(jié)點(diǎn)是否為j;符號d、v、n、di、ei、rx、tx已知,分別表示子網(wǎng)絡(luò)的有向邊集合、子網(wǎng)絡(luò)的頂點(diǎn)集合、整個網(wǎng)絡(luò)的節(jié)點(diǎn)數(shù)量、非根節(jié)點(diǎn)i在其他子網(wǎng)絡(luò)中作為根節(jié)點(diǎn)時的子孫個數(shù)加1、節(jié)點(diǎn)i的剩余電量、接收一個數(shù)據(jù)包消耗的能量、發(fā)送一個數(shù)據(jù)包消耗的能量。t為子網(wǎng)絡(luò)的生存時間的倒數(shù),yij表示從i發(fā)到j(luò)的數(shù)據(jù)包的個數(shù)。
之后采用整數(shù)線性規(guī)劃求解工具對其求解。
3.2在規(guī)定時間內(nèi)等待多線程運(yùn)行結(jié)束,如果在規(guī)定時間內(nèi)有線程未運(yùn)行結(jié)束,則停止當(dāng)前正在運(yùn)行的所有線程,并記錄結(jié)果為超時,標(biāo)記本次計算為失敗,終止計算;如果所有線程在規(guī)定時間內(nèi)都運(yùn)行完畢,獲取每個線程求得的生命期,比較取出最大值作為此路由結(jié)構(gòu)的最大生命期。
4.分發(fā)路由
如果步驟3執(zhí)行成功,則分發(fā)最優(yōu)路由結(jié)構(gòu)到網(wǎng)絡(luò)中。每個節(jié)點(diǎn)在收到信息后,更新白己的父節(jié)點(diǎn),此時路由結(jié)構(gòu)建立成功。
實(shí)施案例
本發(fā)明的效果可以用以下仿真實(shí)驗(yàn)進(jìn)一步說明。傳感器網(wǎng)絡(luò)包含41個節(jié)點(diǎn),其中1個節(jié)點(diǎn)為匯聚節(jié)點(diǎn),節(jié)點(diǎn)間的連接邊按如下方式隨機(jī)生成:節(jié)點(diǎn)均勻分布在100×100的正方形區(qū)域內(nèi),兩個節(jié)點(diǎn)間的距離不超過20時可以通信。節(jié)點(diǎn)剩余能量均勻分布在1~10j內(nèi),接受和發(fā)送一個數(shù)據(jù)包消耗的能量分別為3.33×10-4j和6.66×10-4j。隨機(jī)生成50個網(wǎng)絡(luò)實(shí)例,對比本發(fā)明與現(xiàn)有的方案,當(dāng)時間限定為10分鐘時,在隨機(jī)產(chǎn)生的50個網(wǎng)絡(luò)中,由單線程方法未解決的14個網(wǎng)絡(luò)中,本發(fā)明可以解決其中的4個網(wǎng)絡(luò),且耗時均在三分鐘內(nèi)。