何建強 滕志軍 張 帆 劉 皎
(1.商洛學(xué)院電子信息與電氣工程學(xué)院 商洛 726000)(2.東北電力大學(xué)信息工程學(xué)院 吉林 132012)
無線傳感器網(wǎng)絡(luò)的功率控制技術(shù)主要指網(wǎng)絡(luò)節(jié)點在無線通信過程中選擇合適的功率發(fā)送分組以達到優(yōu)化網(wǎng)絡(luò)性能的目的[1]??刂乒?jié)點的發(fā)射功率對提升無線傳感器網(wǎng)絡(luò)的性能具有較大意義,它既可以提升網(wǎng)絡(luò)能量的有效性,又能增加網(wǎng)絡(luò)并發(fā)吞吐量。目前,無線傳感器網(wǎng)絡(luò)路由節(jié)點能量的研究已取得一些成果。文獻[2]中Camilo等提出了一種基于蟻群的能量有效性路由算法,即EEABR(Energy-efficient ant-based routing)路由算法,EEABR算法提升了收發(fā)螞蟻包時的能量使用效率,即減小了發(fā)送螞蟻包時的能量消耗,但沒有考慮螞蟻環(huán)路效應(yīng)。文獻[3]在EEABR算法的基礎(chǔ)上提出一種EEABR改進算法,即EEIABR(Energy-efficient improved ant-based routing)路由算法。該算法通過在螞蟻包中增加螞蟻包序列號sq_num,有效削弱螞蟻環(huán)路,同時修正信息素更新公式,將路由跳數(shù)修正為多跳消耗的能量值,并在信息素更新公式中引入節(jié)點能量與路徑平均能量的偏離值,使全網(wǎng)節(jié)點的能量消耗更加平均,延長網(wǎng)絡(luò)的生存周期。
本文在EEIABR路由算法的基礎(chǔ)上,提出帶有發(fā)射功率控制的PCABR算法。該算法通過提取接收hello分組的接收信號強度,并通過文獻[4]中Friss公式推導(dǎo)出合適的發(fā)送功率級,并將該功率級存儲在節(jié)點的鄰居列表中。節(jié)點以概率公式選擇下一跳路由發(fā)送前向螞蟻分組時,會將綜合考慮下一跳節(jié)點的剩余能量和自身的發(fā)送功率級,通過對節(jié)點發(fā)射功率級的控制,減小螞蟻尋優(yōu)過程和信息發(fā)送過程中的能量消耗,提升路徑的優(yōu)化程度,進一步增加網(wǎng)絡(luò)生存周期。
EEIABR算法采用EEABR算法的螞蟻包分類,分為Hello包和螞蟻包兩類[5]。節(jié)點通過廣播Hello包來維護鄰居列表,通過發(fā)送螞蟻包來優(yōu)化路徑和傳輸信息。針對算法中容易形成環(huán)路和節(jié)點能量分布不均的缺點,在Hello包、螞蟻包、節(jié)點鄰居表中增添pkt_src(發(fā)送螞蟻包的源地址)和sq_num(螞蟻包序列號)的組合項,在發(fā)送螞蟻包時,在螞蟻包頭中添加下一跳節(jié)點地址naddr以及<pkt_src,sq_num>。節(jié)點在廣播Hello包時,除了要廣播自己節(jié)點地址和能量,還應(yīng)該廣播路鄰居列表中的<pkt_src,sq_num>,這樣接收節(jié)點就會“知道”自己的鄰居節(jié)點轉(zhuǎn)發(fā)過的螞蟻包,避免不必要的回傳,改善螞蟻的環(huán)路效應(yīng)[6]。同時修正了后向螞蟻包的信息素更新公式,并引入了能量差異因子,平衡了全網(wǎng)能量,提升能量分布均勻性。
PCABR采用與EEIABR算法相同的Hello分組結(jié)構(gòu),同樣采用<pkt_src,sq_num>螞蟻分組標識組合項,削弱環(huán)路效應(yīng)。圖1為PCABR算法的Hello分組結(jié)構(gòu)圖。
圖1 PCABR Hello分組結(jié)構(gòu)
其中,Type為分組類型,Hello_pkt_src為Hello分組的源地址,Energy為廣播該Hello分組的節(jié)點的剩余能量,Phero為該條路徑上的信息素濃度。
PCABR算法在螞蟻能見度函數(shù)中引入了節(jié)點發(fā)送功率作為前向螞蟻概率選擇下一跳節(jié)點的參考因子,因此其能見度函數(shù)E(s)需要重新定義,PCABR算法的概率選擇式如(1)所示。能見度函數(shù)E(s)如式(2)所示。
式中T(r,s)、T(r,u)函數(shù)指螞蟻轉(zhuǎn)移路徑的信息素濃度;α和β為參數(shù),分別表征螞蟻在概率選擇過程中,信息素濃度和啟發(fā)式信息的重要程度。
式中Prs為節(jié)點r向節(jié)點s的發(fā)送分組的發(fā)送功率。由已知參數(shù)可計算出節(jié)點所需要發(fā)送的最小功率值Prs。將該最小功率存儲到如表1所示的鄰居列表中。
表1 PCABR節(jié)點鄰居列表
表 1 中,NeighbourAddr、NeighbourEng、Pheromone分別表示鄰居節(jié)點地址、鄰居節(jié)點能量以及該一跳路徑上的信息素濃度。由于PCABR需要根據(jù)節(jié)點間距離而調(diào)節(jié)發(fā)射功率,因此,PCABR的鄰居列表中需要加入<NeighbourAddr,Pm>的組合項,當(dāng)前向螞蟻分組從鄰居列表中選取下一跳節(jié)點時,根據(jù)式(1)求出選擇下一跳的概率值。
PCABR采用與EEIABR相同的前向螞蟻分組結(jié)構(gòu),如圖2所示。
圖2 前向螞蟻包結(jié)構(gòu)
其中Type為分組類型,這里標識為螞蟻分組。Pkt_src為螞蟻分組的源地址,Daddr為螞蟻分組下一跳地址,由式(1)得出。Saddr為螞蟻分組上一跳的節(jié)點地址。Energy_sum為前向螞蟻分組到達當(dāng)前節(jié)點時,所有訪問過的節(jié)點的剩余能量總和。Energy_min為前向螞蟻分組到達當(dāng)前節(jié)點時,所有訪問過的剩余能量最小節(jié)點的能量值。toSintNode為布爾型變量,表明螞蟻分組方向。hops為螞蟻經(jīng)過的節(jié)點數(shù)。
當(dāng)前向螞蟻分組到達Sink節(jié)點時,需要轉(zhuǎn)化成后向螞蟻分組,沿原路徑返回,再返回之前,需要由Sink節(jié)點根據(jù)前向螞蟻分組攜帶的路徑信息,即前向螞蟻分組的中攜帶的信息計算該路徑上的信息更新量。PCABR信息素更新公式如式(3)、(4)、(5)所示。
式(3)所示為節(jié)點r到節(jié)點s路徑上的的信息素更新規(guī)則,其中ρ為信息素蒸發(fā)系數(shù),防止信息素濃度的無限制累積。ΔTk為后向螞蟻k攜帶的更新該條路徑的信息素增量。由式(4)所示。
其中EAvgk為前向螞蟻分組k訪問過節(jié)點的平均剩余能量,如式(5)所示。
Energy_sum為前向路徑上剩余能量的總和,F(xiàn)dk為訪問過的節(jié)點數(shù),由圖1中的hops得出。
從PCABR算法的信息素更新公式中可以得出,剩余能量較大,路由跳數(shù)較少,能量分布較為平均的路徑信息素增加較多,后續(xù)螞蟻分組選擇該條路徑的概率增大。
PCABR后向螞蟻分組負責(zé)更新前向路徑上的信息素濃度,后向螞蟻分組結(jié)構(gòu)如圖3所示。
圖3 后向螞蟻分組結(jié)構(gòu)
其中Type為分組類型,Pkt_src為后向螞蟻分組的最終目的地址,Daddr為后向螞蟻分組下一跳地址,Saddr為后向螞蟻上一跳的節(jié)點地址。Pheromone為信息素增量,toSinkNode為布爾型變量,與前向螞蟻分組相對應(yīng),定義為false,Energy_avg為該條路徑上的平均能量。
如圖4所示節(jié)點周期性的發(fā)送Hello分組與鄰節(jié)點建立聯(lián)系,節(jié)點在收到Hello分組后更新自己的鄰居節(jié)點列表。與EEIABR算法不同之處在于,接收節(jié)點除了提取Hello信息中的鄰節(jié)點地址,鄰節(jié)點剩余能量和該一跳路徑的信息素之外,還需要提取RSSI,得出發(fā)送給該跳節(jié)點的最優(yōu)發(fā)射功率,存儲在相應(yīng)的鄰居列表當(dāng)中。
圖4 PCABR Hello分組收發(fā)流程
如圖5所示,節(jié)點每隔一段時間發(fā)送前向螞蟻分組尋找通往Sink節(jié)點的路徑。首先源節(jié)點查詢鄰居列表是否存在Sink節(jié)點,若存在則直接向Sink節(jié)點發(fā)送前向螞蟻分組;若不存,則按式(1)概率選擇下一跳分組轉(zhuǎn)發(fā)節(jié)點。
當(dāng)Sink節(jié)點收到前向螞蟻分組之后,隨即生成后向螞蟻分組,按原路徑返回至源節(jié)點并更新路徑上信息素。首先,Sink節(jié)點查詢鄰居列表是否存在源節(jié)點,若存在則直接向源節(jié)點發(fā)送后向螞蟻分組,若不存在則需要根據(jù)當(dāng)前節(jié)點的路由表按原路徑轉(zhuǎn)發(fā)后向螞蟻分組,并通過式(3)更新該跳路徑上的信息素濃度。如此循環(huán),直到源節(jié)點收到后向螞蟻分組,該輪螞蟻收發(fā)結(jié)束。
圖5 PCABR螞蟻分組收發(fā)流程
為了驗證PCABR、EEIABR和EEABR算法在多節(jié)點無線傳感器網(wǎng)絡(luò)中能量使用效率和能量均衡性上的優(yōu)劣程度。通過Vmware9.0虛擬機下Ubuntu10.04+NS2.35平臺對上述三種算法進行仿真。移動場景參數(shù)表如表2所示。CBR數(shù)據(jù)流參數(shù)表如表3所示。傳感器節(jié)點參數(shù)如表4所示。
表2 移動場景參數(shù)表
表3 CBR數(shù)據(jù)流參數(shù)表
表4 傳感器節(jié)點參數(shù)
除此之外,設(shè)定三種算法的節(jié)點的初始發(fā)送功率(txPower)為 0.6W,初始接收功率(rxPower)為0.3W,空閑能量消耗(idlePower)為0.06W,仿真時間為100s[7]。圖6為節(jié)點平均剩余能量隨節(jié)點數(shù)目變化,圖7為節(jié)點最小剩余能量隨節(jié)點數(shù)目變化。
圖6 節(jié)點剩余能量隨節(jié)點數(shù)目變化
如圖6與圖7所示,隨著節(jié)點的不斷增加,PCABR算法通過動態(tài)調(diào)整發(fā)射分組的功率,在節(jié)點平均剩余能量和節(jié)點最小剩余能量均優(yōu)于EEABR和EEIABR算法[8],表明PCABR算法在多節(jié)點的無線傳感器網(wǎng)絡(luò)對能量的使用效率的提升較為明顯。
圖7 節(jié)點最小剩余能量隨節(jié)點數(shù)目變化
為了進一步驗證PCABR算法在多節(jié)點時的能量均衡性,保持100*100m2不變,節(jié)點數(shù)目為65個,仿真時間為50s~100s[9]。圖8為節(jié)點平均剩余能量隨時間變化曲線,圖9為節(jié)點最小剩余能量隨時間變化曲線。
如圖8與圖9所示,在節(jié)點數(shù)目為65個時,隨著時間的不斷增加,PCABR算法在能量使用效率和能量均衡性方面相較于EEABR算法和EEIABR算法均有一定的提升。
圖8 節(jié)點平均剩余能量隨時間變化
圖9 節(jié)點最小剩余能量隨時間變化
本文以EEIABR算法為基礎(chǔ),提出一種基于功率控制的蟻群路由算法PCABR。該算法通過提取鄰節(jié)點Hello分組的接收信號強度,推導(dǎo)出對鄰節(jié)點的最優(yōu)功率級,達到對節(jié)點發(fā)送端功率控制的目的[10]。同時,PCABR對EEIABR算法的鄰居節(jié)點列表,概率選擇公式,信息素更新公式作進一步改進,使路徑信息素更新更為準確,提高螞蟻的搜索效率,仿真表明PCABR算法相較于EEIABR和EEABR算法在能量使用效率和網(wǎng)絡(luò)節(jié)點均衡性方面均有一定的提升,更適用于節(jié)點數(shù)目較多的無線傳感器網(wǎng)絡(luò)。