本發(fā)明主要涉及無線傳感器網(wǎng)絡(luò)柵欄覆蓋領(lǐng)域,涉及基于集合最大流算法的WSN柵欄修復(fù)方法。
背景技術(shù):
柵欄覆蓋是無線傳感器網(wǎng)絡(luò)領(lǐng)域主要的覆蓋模型之一,是覆蓋控制研究的熱點(diǎn),主要考察監(jiān)測(cè)目標(biāo)穿越傳感器網(wǎng)絡(luò)時(shí)被檢測(cè)的情況。無線傳感器網(wǎng)絡(luò)柵欄覆蓋有著廣泛的用途,如在國防應(yīng)用中柵欄能夠有效地檢測(cè)邊境狀況,將柵欄部署在邊境線可以探測(cè)非法越境者并防止入侵;在博物館構(gòu)建柵欄能夠很好地監(jiān)測(cè)被保護(hù)區(qū)域;在環(huán)保方面,將柵欄部署在污染源周圍可檢測(cè)污染物的擴(kuò)散情況;在林業(yè)保護(hù)方面,將柵欄部署在森林火災(zāi)現(xiàn)場(chǎng)可檢測(cè)火災(zāi)蔓延情況等。由于在柵欄構(gòu)建初很可能出現(xiàn)間隙或者隨著節(jié)點(diǎn)能量的消耗,節(jié)點(diǎn)感知半徑減小也極易出現(xiàn)間隙而導(dǎo)致柵欄失效。因此,研究如何修復(fù)柵欄間隙對(duì)于加強(qiáng)柵欄的生存能力延長網(wǎng)絡(luò)生存能力具有極其重要的意義。
技術(shù)實(shí)現(xiàn)要素:
為了克服現(xiàn)有WSN柵欄修復(fù)方法的柵欄容易出現(xiàn)間隙、柵欄的生存能力較差的不足,本發(fā)明提出了一種基于集合最大流算法的WSN柵欄修復(fù)方法,該方法采用基于集合的最大流算法計(jì)算出能修復(fù)間隙的數(shù)量并且具有較高的效率,然后利用移動(dòng)節(jié)點(diǎn)修復(fù)柵欄,修復(fù)過程中移動(dòng)節(jié)點(diǎn)的總移動(dòng)距離最短,大大加強(qiáng)了柵欄的生存能力。
為了解決上述技術(shù)問題提供了如下技術(shù)方案:
一種基于集合最大流算法的WSN柵欄修復(fù)方法,包括如下步驟:
步驟1:柵欄間隙計(jì)算;
步驟1.1:根據(jù)已知位置節(jié)點(diǎn)計(jì)算可得到柵欄間隙集合Gap;
步驟2:柵欄修復(fù);
步驟2.1:可修復(fù)柵欄間隙的數(shù)量統(tǒng)計(jì);
步驟2.1.1:以步驟1.1得到的柵欄間隙集合Gap為輸入,修復(fù)間隙所需要的移動(dòng)節(jié)點(diǎn)數(shù)量如公式(1)所示:
式(1)中L表示間隙長度,R表示傳感器節(jié)點(diǎn)的感知半徑,mnum表示需要的移動(dòng)節(jié)點(diǎn)數(shù)量,對(duì)間隙均勻分為mnum段,每段中點(diǎn)為移動(dòng)節(jié)點(diǎn)的待修復(fù)點(diǎn),得到整條柵欄待修補(bǔ)點(diǎn)的集合GD;
步驟2.1.2:以步驟2.1.1得到的待修補(bǔ)點(diǎn)集合GD為輸入和移動(dòng)節(jié)點(diǎn)集合為條件,以距離D為閾值建立待修補(bǔ)點(diǎn)的鄰居移動(dòng)節(jié)點(diǎn),可得到各修補(bǔ)點(diǎn)的鄰居移動(dòng)節(jié)點(diǎn)集合NG;
步驟2.1.3:基于移動(dòng)鄰節(jié)點(diǎn)集合的最大流算法解決間隙修復(fù)問題,具體步驟如下所示:
步驟2.1.3.1:分別計(jì)算出專屬于待修補(bǔ)點(diǎn)的鄰居移動(dòng)節(jié)點(diǎn)集合,剔除公共集合,可得到對(duì)應(yīng)的所有待補(bǔ)點(diǎn)的移動(dòng)鄰居節(jié)點(diǎn)集合NG’;
步驟2.1.3.2:以步驟2.1.3.1得到的待補(bǔ)點(diǎn)和其對(duì)應(yīng)的集合NG’為輸入,集合元素的數(shù)量為權(quán)重值建立有向圖G;
步驟2.1.3.3:采用最大流算法計(jì)算圖G的最大流,最大流等于待修復(fù)點(diǎn)的數(shù)量,柵欄間隙能被全部修復(fù),否則間隙不能被修復(fù);
步驟2.2:柵欄間隙修復(fù);
步驟2.2.1,以步驟2.1.3.1得到待補(bǔ)點(diǎn)的移動(dòng)鄰居節(jié)點(diǎn)集合NG’為輸入,利用移動(dòng)節(jié)點(diǎn)修復(fù)柵欄的間隙,并且使得移動(dòng)節(jié)點(diǎn)的移動(dòng)距離最小,集合NG’中的可移動(dòng)節(jié)點(diǎn)到它的鄰居薄弱點(diǎn)的距離集合為MD={md1,md2,md3,…,mdnum|mdi≤md},mdi(i∈{1,2,…,num})為鄰節(jié)點(diǎn)集合到待修復(fù)點(diǎn)的距離,num為所有移動(dòng)節(jié)點(diǎn)的個(gè)數(shù),對(duì)集合MD升序排序得到集合MD',采用二分查找法搜索mdoptimum,mdmin<mdoptimum<mdmax,mdmin和mdmax為升序得到的最小值和最大值,使得滿足集合ED={MD'|mdi≤mdoptimum}的移動(dòng)節(jié)點(diǎn)恰好能強(qiáng)化所有的薄弱點(diǎn),則此時(shí)移動(dòng)節(jié)點(diǎn)移動(dòng)的距離總和最小,二分法算法具體步驟為:
步驟2.2.1.1:初始化L=0,
步驟2.2.1.2:更新薄弱點(diǎn)的鄰居子集合NG’,將距離待修復(fù)點(diǎn)大于mdoptimum的節(jié)點(diǎn)從鄰居集合NG’中移除,并更新有向圖G的權(quán)重和拓?fù)洌?/p>
步驟2.2.1.3:計(jì)算有向圖G的最大流,(如果最大流小于n,n為待修補(bǔ)點(diǎn)集合GD元素?cái)?shù)量,則L=optimum,如果最大流等于n,且|L-optimum|≤ε,輸出mdoptimum;
步驟2.2.1.4,算法結(jié)束,否則執(zhí)行步驟2.2.1.2。
本發(fā)明的有益效果是:
(1)本發(fā)明通過再次部署較少的移動(dòng)節(jié)點(diǎn)將柵欄中薄弱點(diǎn)進(jìn)行強(qiáng)化,使得柵欄不容易出現(xiàn)間隙,大大加強(qiáng)了柵欄的生存能力;
(2)本發(fā)明提出的基于集合的最大流算法,大大降低了算法復(fù)雜度,并且使得移動(dòng)節(jié)點(diǎn)修復(fù)柵欄的移動(dòng)距離總和最小。
附圖說明
圖1是本發(fā)明的柵欄間隙圖。
圖2是本發(fā)明的修復(fù)過程圖。
圖3是本發(fā)明的集合最大流算法圖,其中,(a)是待修補(bǔ)點(diǎn),(b)是有向圖。
圖4是本發(fā)明的傳統(tǒng)的有向圖。
具體實(shí)施方式
下面結(jié)合附圖進(jìn)一步說明本發(fā)明。
參照?qǐng)D1~圖4,基于集合最大流算法的WSN柵欄修復(fù)方法,包括如下步驟:
步驟1:柵欄間隙計(jì)算;
將一定比例的可移動(dòng)節(jié)點(diǎn)和靜態(tài)節(jié)點(diǎn)混合部署在監(jiān)測(cè)區(qū)域中,假設(shè)本發(fā)明中的傳感器節(jié)點(diǎn)可以通過定位技術(shù)獲得坐標(biāo)并且柵欄已經(jīng)通過文獻(xiàn)的柵欄構(gòu)建方法構(gòu)建完成。柵欄在工作過程中由于某些原因(故障)導(dǎo)致柵欄出現(xiàn)間隙,可利用移動(dòng)節(jié)點(diǎn)修復(fù)柵欄,當(dāng)移動(dòng)節(jié)點(diǎn)與間隙的距離小于移動(dòng)節(jié)點(diǎn)的可移動(dòng)距離D時(shí),此時(shí)移動(dòng)節(jié)點(diǎn)可用于修復(fù)該間隙,如圖1所示,柵欄中節(jié)點(diǎn)ni和ni+1之間出現(xiàn)了間隙。
步驟1.1:查找出柵欄間隙的位置,才能對(duì)其進(jìn)行修復(fù)。假設(shè)節(jié)點(diǎn)的感知半徑為R,由于柵欄中節(jié)點(diǎn)的位置已知,所以可以根據(jù)柵欄中相鄰節(jié)點(diǎn)的距離判斷是否存在間隙,最后得到柵欄間隙集合Gap。
步驟2:柵欄修復(fù);
通過基于集合的最大流算法計(jì)算可修復(fù)的柵欄間隙數(shù)量,然后將可移動(dòng)節(jié)點(diǎn)移動(dòng)到柵欄中的間隙處修復(fù)柵欄并且使得移動(dòng)節(jié)點(diǎn)的總移動(dòng)距離最小。
步驟2.1:可修復(fù)柵欄間隙的數(shù)量統(tǒng)計(jì);
采用基于集合的最大流算法,利用集合的數(shù)量代替移動(dòng)節(jié)點(diǎn)的數(shù)量,使得能夠保證移動(dòng)節(jié)點(diǎn)修復(fù)所有柵欄間隙的移動(dòng)距離總和最小,并且可以大大降低算法的復(fù)雜度。
步驟2.1.1:步驟1.1已經(jīng)找到了柵欄的間隙并存放在集合Gap中,修補(bǔ)柵欄的過程如圖2所示。修補(bǔ)長度為L的間隙至少需要移動(dòng)節(jié)點(diǎn)的數(shù)量為mnum,如式(1)所示。將間隙長度L均勻的分為mnum段,每段的中點(diǎn)為待修補(bǔ)點(diǎn),如圖中g(shù)所示,將移動(dòng)節(jié)點(diǎn)移動(dòng)到這些位置即可完成修復(fù)。
步驟2.1.2:假設(shè)整條柵欄所有待修補(bǔ)點(diǎn)的集合為GD={g1,g2...gn},移動(dòng)節(jié)點(diǎn)集合為M={m1,m2,m3...ms},當(dāng)移動(dòng)節(jié)點(diǎn)和待修補(bǔ)點(diǎn)的距離小于D時(shí),移動(dòng)節(jié)點(diǎn)稱為待修補(bǔ)點(diǎn)的鄰居移動(dòng)節(jié)點(diǎn)。建立各個(gè)待修補(bǔ)節(jié)點(diǎn)的鄰居移動(dòng)節(jié)點(diǎn)集合ngi(i∈{1,2,…,num})表示待修補(bǔ)點(diǎn)gi的鄰居移動(dòng)節(jié)點(diǎn)集合。
步驟2.1.3:相鄰的鄰居移動(dòng)節(jié)點(diǎn)集合存在重疊元素,以相鄰結(jié)合ngi、ngi+1、ngi+2為例,介紹本發(fā)明提出的基于集合的最大流算法解決間隙修復(fù)問題,具體步驟如下:
步驟2.1.3.1:分別計(jì)算出專屬于待修補(bǔ)點(diǎn)gi和gi+1的集合a、c,然后計(jì)算屬于集合gi和gi+1的公共集合b,假設(shè)集合d專屬于待修補(bǔ)點(diǎn)gi+2,如式(2)、(3)、(4)、(5)和圖3(a)所示。
a=ngi-ngi∩ngi+1 (2)
b=ngi∩ngi+1 (3)
c=ngi+1-ngi∩ngi+1 (4)
d=ngi+2 (5)
步驟2.1.3.2:以集合a、b、c、d和待修補(bǔ)點(diǎn)gi、gi+1、gi+2作為點(diǎn),以集合的元素?cái)?shù)量Na、Nb、Nc。Nd為權(quán)重值,建立有向圖G(V,E),如圖3(b)所示,圖中添加開始節(jié)點(diǎn)u和結(jié)束節(jié)點(diǎn)v,與u連接的權(quán)重值為集合元素的數(shù)量,與v連接的權(quán)重值都為1。V表示有向圖的點(diǎn)集合,E表示有向圖的邊集合,待修復(fù)點(diǎn)和其鄰居移動(dòng)節(jié)點(diǎn)集合存在一條邊,對(duì)應(yīng)的權(quán)重值為集合元素的數(shù)量,公共的鄰居移動(dòng)節(jié)點(diǎn)集合與它對(duì)應(yīng)的多個(gè)待修復(fù)點(diǎn)分別存在一條邊,對(duì)應(yīng)的權(quán)重值為集合元素的數(shù)量,如集合b與待修復(fù)點(diǎn)gi、gi+1都存在一條邊,對(duì)應(yīng)的權(quán)重值為Nb。
步驟2.1.3.3:采用最大流算法計(jì)算圖G的最大流,當(dāng)最大流等于待修復(fù)點(diǎn)的數(shù)量,此時(shí)柵欄間隙能被全部修復(fù),否則存在不能被修復(fù)的間隙。
步驟2.2:柵欄間隙修復(fù);
步驟2.2.1:本小節(jié)利用可移動(dòng)節(jié)點(diǎn)修復(fù)柵欄的間隙,并且使得移動(dòng)節(jié)點(diǎn)的移動(dòng)距離最小。在步驟2.1.3.1得到了待修補(bǔ)點(diǎn)集合GD的所有鄰居移動(dòng)節(jié)點(diǎn)集合NG,集合NG中的所有移動(dòng)節(jié)點(diǎn)表示可用于修復(fù)柵欄間隙的節(jié)點(diǎn),集合NG有num個(gè)元素。集合NG中的可移動(dòng)節(jié)點(diǎn)距離它對(duì)應(yīng)的鄰居待修復(fù)點(diǎn)的距離集合為MD={md1,md2,md3,...mdnum|mdi≤md},對(duì)集合MD非降序排序,得到集合MD',找出集合MD'中的最小元素mdoptimum和最大元素mdmax。假設(shè)現(xiàn)在存在一個(gè)距離mdoptimum,mdmin<mdoptimum<mdmax,使得集合MD中的元素不大于mdoptimum時(shí),柵欄間隙能被完全修復(fù),則此時(shí)移動(dòng)節(jié)點(diǎn)的總移動(dòng)距離最短,因此尋找合適的mdoptimum是關(guān)鍵。
本發(fā)明采用二分搜索法查找mdoptimum,ε為一個(gè)值很小的閾值,用于結(jié)束算法,算法具體操作如下步驟所示:
步驟2.2.1.1:L=0,
步驟2.2.1.2:更新待修復(fù)點(diǎn)的鄰居集合NG,將距離待修復(fù)點(diǎn)大于mdoptimum的節(jié)點(diǎn)從鄰居集合NG中移除,并更新有向圖G的權(quán)重和拓?fù)洹?/p>
步驟2.2.1.3:計(jì)算有向圖G的最大流,如果最大流小于n(待修補(bǔ)點(diǎn)集合GD元素?cái)?shù)量),則L=optimum,最大流不會(huì)大于待修復(fù)點(diǎn)的數(shù)量;如果最大流等于n,且|L-optimum|≤ε,輸出mdoptimum。
步驟2.2.1.4:算法結(jié)束,否則執(zhí)行步驟2.2.1.2。