余 揚(yáng),李艷彩,陳君華
(云南民族大學(xué) 云南省高校物聯(lián)網(wǎng)應(yīng)用技術(shù)重點(diǎn)實(shí)驗(yàn)室,云南 昆明 650500)
無(wú)線傳感網(wǎng)絡(luò)[1]是由隨機(jī)部署在監(jiān)測(cè)區(qū)域的大量廉價(jià)低功耗微型傳感器節(jié)點(diǎn)以無(wú)線通信方式形成一個(gè)多跳自組織網(wǎng)絡(luò),其用來(lái)感知、采集、傳輸和處理網(wǎng)絡(luò)所覆蓋區(qū)域中對(duì)象的相關(guān)信息.由于節(jié)點(diǎn)所攜帶電池的能量十分有限,因此如何降低能耗最大化傳感網(wǎng)絡(luò)生命周期是目前國(guó)內(nèi)外眾多學(xué)者研究的熱點(diǎn)問(wèn)題之一[2-3].文獻(xiàn)[4]提出了LEACH層次路由自適應(yīng)分簇算法,節(jié)點(diǎn)周期性輪流擔(dān)任簇首,該算法缺點(diǎn)是隨機(jī)選擇簇首,導(dǎo)致簇首分布不均且數(shù)量不固定,導(dǎo)致部分節(jié)點(diǎn)能量消耗過(guò)快,進(jìn)而影響網(wǎng)絡(luò)生命周期.文獻(xiàn)[5]的Improved-LEACH協(xié)議雖然對(duì)簇首選擇過(guò)程進(jìn)行了優(yōu)化,但是只適合處理規(guī)模較小的無(wú)線傳感網(wǎng),文獻(xiàn)[6]的LEACH-C算法根據(jù)節(jié)點(diǎn)全局位置和剩余能量用模擬退火算法集中選擇簇首.隨著節(jié)點(diǎn)數(shù)量增加,計(jì)算量較大,不適合大規(guī)模無(wú)線傳感器網(wǎng)絡(luò).文獻(xiàn)[7]的 HEED算法基于節(jié)點(diǎn)的能量及節(jié)點(diǎn)到簇首間距離采用分布式方式選擇簇首,但是在選擇簇首時(shí),需要不斷競(jìng)爭(zhēng)迭代,同時(shí)與鄰居節(jié)點(diǎn)進(jìn)行信息交互,增加通信的能耗.文獻(xiàn)[8]的PEGASI算法通過(guò)貪心算法將網(wǎng)絡(luò)中節(jié)點(diǎn)串成基于地理位置的一條鏈,在鏈狀結(jié)構(gòu)上進(jìn)行數(shù)據(jù)融合和傳輸?shù)竭_(dá)匯聚節(jié)點(diǎn)(Sink),該算法缺點(diǎn)是傳輸延遲較大,也沒(méi)有考慮到簇首與Sink的距離,以及節(jié)點(diǎn)剩余能量,導(dǎo)致靠近Sink的分簇節(jié)點(diǎn)能量消耗較快,使得網(wǎng)絡(luò)負(fù)載不均衡[9].
常見(jiàn)無(wú)線傳感網(wǎng)絡(luò)的聚類(lèi)算法有K-means[10],該算法能夠高效處理大型數(shù)據(jù)集,時(shí)間復(fù)雜度接近于線性,但是聚類(lèi)結(jié)果受初始節(jié)點(diǎn)的選取影響較大,對(duì)于偏離較大的數(shù)據(jù)很敏感.K-mediods算法[11]是對(duì)K-means的一種改進(jìn),相對(duì)于噪聲不敏感,個(gè)別數(shù)據(jù)不會(huì)對(duì)總體劃分造成太大影響,其方法是根據(jù)樣本與簇心節(jié)點(diǎn)距離分配給最近一個(gè)簇,然后反復(fù)利用非簇心節(jié)點(diǎn)來(lái)代替簇心節(jié)點(diǎn),該算法優(yōu)點(diǎn)對(duì)于較小的數(shù)據(jù)集有效,但不能擴(kuò)展到大型的數(shù)據(jù)集,聚類(lèi)結(jié)果仍然受初始節(jié)點(diǎn)的選取影響較大.K-means++算法[12]的基本思想對(duì)初始節(jié)點(diǎn)中距離中心越遠(yuǎn)的點(diǎn)會(huì)有更高的概率被選為聚類(lèi)中心,克服了起始種子節(jié)點(diǎn)帶來(lái)的聚類(lèi)偏差,因此簇首與簇首分布相對(duì)更加均勻,同時(shí)簇首的數(shù)量也是確定的,可以較好的擴(kuò)展到大規(guī)模無(wú)線傳感網(wǎng)絡(luò)中.
考慮上述算法的不足,結(jié)合層次路由和K-means++算法的基本思想、從簇的形成、簇首的選擇、簇間通信3個(gè)關(guān)鍵因素考量對(duì)傳統(tǒng)路由協(xié)議進(jìn)行改進(jìn),提出了基于K-means++無(wú)線傳感網(wǎng)能量高效分簇協(xié)議.
假定無(wú)線傳感網(wǎng)絡(luò)中的傳感器節(jié)點(diǎn)在監(jiān)測(cè)區(qū)域內(nèi)隨機(jī)部署,具有以下特點(diǎn):
1) 傳感器節(jié)點(diǎn)可以感知自己的地理位置.
2) 傳感網(wǎng)中所有節(jié)點(diǎn)都是同構(gòu)的,即有相同的接收、發(fā)送和數(shù)據(jù)處理能力,每個(gè)節(jié)點(diǎn)具有唯一的ID.
3) 傳感網(wǎng)節(jié)點(diǎn)部署后位置固定,初始能量相同而且能量有限.
4) 傳感器能根據(jù)接受者距離遠(yuǎn)近,自適應(yīng)調(diào)整其發(fā)射功率以節(jié)省能量.
5) 匯聚節(jié)點(diǎn)在遠(yuǎn)離傳感器節(jié)點(diǎn)且位置固定,能量充足可以保證正常的能量消耗.
6) 所有節(jié)點(diǎn)都能夠和匯聚節(jié)點(diǎn)直接通信.
無(wú)線傳感器的能耗主要集中在無(wú)線網(wǎng)絡(luò)數(shù)據(jù)傳輸上,能量模型采用一階無(wú)線電模型[10],該模型的結(jié)構(gòu)如圖1所示.
ETx(l,d)=l·Eelec+l·ε·dr
.
(1)
ERx(l)=l·Eelec
.
(2)
傳感網(wǎng)的節(jié)點(diǎn)在目標(biāo)監(jiān)測(cè)區(qū)域進(jìn)行部署通常是隨機(jī)的,往往很難達(dá)到理想的均勻分布.某些節(jié)點(diǎn)所在區(qū)域可能過(guò)于集中,也可能過(guò)于分散,從整體分布上看可能是矩形也可能形成其他各種形狀,以往設(shè)想為所有節(jié)點(diǎn)都理想分布的情況下,難以符合實(shí)際最佳簇首數(shù)量的選取,只有對(duì)傳感器節(jié)點(diǎn)進(jìn)行更好的分簇,才能更好的均衡網(wǎng)絡(luò)負(fù)載,延長(zhǎng)網(wǎng)絡(luò)生命周期.
分簇設(shè)計(jì)時(shí)需綜合考慮網(wǎng)絡(luò)的分布大小、節(jié)點(diǎn)分布密度、網(wǎng)絡(luò)能耗以及運(yùn)行過(guò)程的可靠性,才能增強(qiáng)網(wǎng)絡(luò)運(yùn)行的穩(wěn)定性.
傳統(tǒng)最佳簇首數(shù)量的確定根據(jù)文獻(xiàn)[4],首先假定有N個(gè)節(jié)點(diǎn)均勻分布在M×M的區(qū)域,將其分為k個(gè)簇,那么每個(gè)簇中有N/k個(gè)節(jié)點(diǎn),其中包含一個(gè)簇首和N/k-1個(gè)非簇首節(jié)點(diǎn),簇首完成數(shù)據(jù)的接收、融合,然后直接轉(zhuǎn)發(fā)至匯聚節(jié)點(diǎn).假定匯聚節(jié)點(diǎn)距離監(jiān)測(cè)區(qū)域位置較遠(yuǎn),所有簇首到匯聚節(jié)點(diǎn)的平均距離dtoBS來(lái)近似為每個(gè)簇首到匯聚節(jié)點(diǎn)距離,節(jié)點(diǎn)通信方式可采用多徑衰減模型,簇首能耗近似表示為式(3),其中EDA為融合1 bit數(shù)據(jù)的能耗.
(3)
簇內(nèi)普通節(jié)點(diǎn)的能耗為式(4):
(4)
每個(gè)簇的全部能量消耗可以表示為式(5):
Ecluster=ECH+EnonCH
.
(5)
整個(gè)無(wú)線傳感網(wǎng)總的能耗表示為式(6):
Etotal=k·Ecluster
.
(6)
(7)
上式(7)確定的簇首數(shù)量kopt適合作為一個(gè)理想條件下的參考值,但實(shí)際使用時(shí)需要根據(jù)所有節(jié)點(diǎn)分布情況和匯聚節(jié)點(diǎn)位置對(duì)kopt進(jìn)行優(yōu)化,本文中采用聚類(lèi)評(píng)估指標(biāo)S_Dbw優(yōu)化簇首數(shù)量.
在簇的建立初期,匯聚節(jié)點(diǎn)對(duì)成簇進(jìn)行集中計(jì)算處理,若指定p個(gè)簇首,目標(biāo)監(jiān)測(cè)區(qū)域隨之被劃分為p個(gè)簇,初始節(jié)點(diǎn)的選擇以(7)式中的kopt為參考數(shù)量,算法具體步驟為:
Step 1 隨機(jī)選擇一個(gè)傳感器節(jié)點(diǎn)作為第一個(gè)聚類(lèi)中心c1=(x1,y1),計(jì)算每個(gè)節(jié)點(diǎn)與當(dāng)前最近聚類(lèi)中心的歐氏距離D(x),x∈X,x表示一個(gè)傳感器節(jié)點(diǎn),X表示所有傳感器節(jié)點(diǎn)構(gòu)成的樣本集合.
Step 3 重復(fù)2過(guò)程直到選擇最后一個(gè)聚類(lèi)中心cp=(xp,yp),于是形成p個(gè)聚類(lèi)中心.
Step 4 對(duì)每個(gè)節(jié)點(diǎn)x,分別計(jì)算它到p個(gè)聚類(lèi)中心的距離,并將其劃分到距離最小的聚類(lèi)中心所對(duì)應(yīng)的簇中.
Step 6 執(zhí)行步驟4,直到簇內(nèi)的質(zhì)心位置不再發(fā)生變化為止.
K-means++算法需要人為給定簇的總數(shù)量c,考慮到實(shí)際節(jié)點(diǎn)部署的監(jiān)測(cè)區(qū)域分布位置多變的情況.為了確定最優(yōu)簇首數(shù)量,使用文獻(xiàn)[13]中S_Dbw算法作為聚類(lèi)評(píng)估指標(biāo),因其不需要引入外部數(shù)據(jù),同時(shí)對(duì)噪聲、密度、單調(diào)性、組和偏態(tài)分布這5個(gè)方面評(píng)價(jià)具有非常好的可靠性[14].當(dāng)S_Dbw評(píng)估指標(biāo)取得最小值時(shí),其所對(duì)應(yīng)簇的數(shù)量c可以保證所有簇的結(jié)構(gòu)相對(duì)平衡,分布更加均勻,同時(shí)簇中成員密度和簇與簇的分離度更加合理,有效的避免了簇首過(guò)于分散或者過(guò)于集中.
聚類(lèi)評(píng)價(jià)S_Dbw的計(jì)算公式如下:
S_Dbw(c)=Scat(c)+Dens_bw(c)
.
(8)
無(wú)線傳感網(wǎng)由N個(gè)節(jié)點(diǎn)構(gòu)成區(qū)域S,對(duì)其整體劃分成c個(gè)小區(qū)域,每個(gè)小區(qū)域代表一個(gè)簇,所有簇的中心點(diǎn)集合表示為D={vi|i=1,…,c},簇內(nèi)的密度評(píng)價(jià)為式(9):
(9)
式(9)中表示第i個(gè)簇ci的中心點(diǎn),vj表示第j個(gè)簇cj的中心點(diǎn),uij表示vi和vj的中點(diǎn).簇間的分離度評(píng)價(jià)為式(10):
(10)
式(10)中σ(vi)表示簇ci中的所有節(jié)點(diǎn)到其中心點(diǎn)的方差,σ(S)表示整個(gè)區(qū)域S中N個(gè)傳感器節(jié)點(diǎn)到其中心點(diǎn)的方差.
網(wǎng)絡(luò)中簇首的選擇需要充分考慮節(jié)點(diǎn)能量,能量較高的節(jié)點(diǎn)更容易成為簇首.若將整個(gè)無(wú)線傳感網(wǎng)劃分成c個(gè)區(qū)域之后,簇首的數(shù)量也隨之固定,簇首選取僅在每一個(gè)簇中分別進(jìn)行,可有效避免傳統(tǒng)隨機(jī)選取方式下中簇首數(shù)量變化太大,簇首之間距離過(guò)遠(yuǎn)或者過(guò)近,造成能量負(fù)載不均衡,節(jié)點(diǎn)能量過(guò)早耗盡的情況.簇首選取完畢之后,匯聚節(jié)點(diǎn)以廣播形式向全網(wǎng)廣播消息,每個(gè)普通節(jié)點(diǎn)加入距離自己最近的簇首,簇內(nèi)的簇首選舉方式如式(11)所示
(11)
式(11)中,CHi表示第i簇內(nèi)的簇首,Eresidual為節(jié)點(diǎn)當(dāng)前的剩余能量,Einit為節(jié)點(diǎn)的初始能量,Tmin是最小的閾值,避免剩余能量過(guò)低的節(jié)點(diǎn)仍能被選為簇首.
當(dāng)簇首與匯聚節(jié)點(diǎn)距離較遠(yuǎn)時(shí),適合采用多跳接力通信,原因是直接與匯聚節(jié)點(diǎn)通信能量消耗過(guò)大.為尋找每個(gè)簇首到匯聚節(jié)點(diǎn)(Sink)的最優(yōu)多跳路徑,可采用改進(jìn)的Dijkstra算法.
為了滿足簇首之間的能量消耗更加平衡,文中綜合考慮簇首間的距離和下一跳簇首的能耗,首先定義簇與簇及簇與匯聚節(jié)點(diǎn)間的通信代價(jià)為:
(12)
min(Sink,v)=minCi(v)
.
(13)
無(wú)線傳感網(wǎng)中簇間通信主要實(shí)現(xiàn)步驟如下:
(14)
再計(jì)算min{D(v)},找到其對(duì)應(yīng)的D(vj)的值,也就獲得了其中最小值點(diǎn)對(duì)應(yīng)的簇首節(jié)點(diǎn)ID.
Step 3 當(dāng)i=k-1時(shí),意味所有節(jié)點(diǎn)都訪問(wèn)過(guò),結(jié)束此步驟.否則,用新的節(jié)點(diǎn)替換舊的節(jié)點(diǎn)作為新的中間節(jié)點(diǎn),令i=i+1,并回到步驟2中.
表1 仿真參數(shù)
Step 4 最優(yōu)路徑生成完畢之后,Sink節(jié)點(diǎn)攜帶各簇首節(jié)點(diǎn)的ID及其雙親節(jié)點(diǎn)的編號(hào)以廣播消息的形式發(fā)送,簇首在穩(wěn)定階段將把數(shù)據(jù)沿著指定的雙親節(jié)點(diǎn)向匯聚節(jié)點(diǎn)的方向傳輸,那么處于根節(jié)點(diǎn)的簇首,其雙親節(jié)點(diǎn)就是Sink節(jié)點(diǎn),按照以上的方法,簇首與簇首及匯聚節(jié)點(diǎn)之間生成一顆以匯聚點(diǎn)為根的樹(shù)形結(jié)構(gòu),則每個(gè)簇首節(jié)點(diǎn)到匯聚節(jié)點(diǎn)通信代價(jià)都是最優(yōu)路徑.
實(shí)驗(yàn)使用Matlab 2014b對(duì)無(wú)線傳感網(wǎng)網(wǎng)絡(luò)進(jìn)行仿真,網(wǎng)絡(luò)中有200個(gè)無(wú)線節(jié)點(diǎn),隨機(jī)部署在200×200 m2的區(qū)域,匯聚節(jié)點(diǎn)位于(100,275),參數(shù)如表1所示.
基于K-means++算法(KEECS)對(duì)區(qū)域內(nèi)所有節(jié)點(diǎn)進(jìn)行聚類(lèi),聚類(lèi)完成之后使用S_Dbw指標(biāo)進(jìn)行評(píng)估,S_Dbw的值越小對(duì)應(yīng)成簇的質(zhì)量就越高,每次改變簇的數(shù)量k,實(shí)驗(yàn)中簇的數(shù)量k和S_Dbw的對(duì)應(yīng)關(guān)系如圖 2所示.
從圖2中可以看出,隨著成簇?cái)?shù)量的增加,聚類(lèi)評(píng)價(jià)指標(biāo)值將獲得最小值.當(dāng)成簇?cái)?shù)量k=10,聚類(lèi)評(píng)價(jià)指標(biāo)值取得最小值,即無(wú)線傳感網(wǎng)獲得最佳的成簇?cái)?shù)量.此時(shí),無(wú)線傳感網(wǎng)總共被劃分成10個(gè)簇,如圖 3表示,其中,實(shí)心點(diǎn)代表每個(gè)簇的質(zhì)心位置.
依據(jù)表1的參數(shù),分別對(duì)LEACH、LEACH-C與KEECS的算法進(jìn)行仿真,LEACH,LEACH-C的簇首概率為0.05[15],得到的的實(shí)驗(yàn)結(jié)果分別如圖4、圖5、圖6所示.
圖4、圖5表明LEACH協(xié)議由于簇首選舉函數(shù)隨機(jī)性的特點(diǎn),導(dǎo)致成簇的數(shù)量和位置有很大的不確定性,某些位置過(guò)于分散或者過(guò)于集中,同時(shí)通信方式都采用單跳的形式傳輸,比較單一.而圖6中可以看出通過(guò)優(yōu)化KEECS算法聚類(lèi)得到的簇,簇與匯聚節(jié)點(diǎn)之間可以進(jìn)行多跳方式進(jìn)行通信,與LEACH的2種協(xié)議所形成簇對(duì)比,在地理位置上和簇內(nèi)節(jié)點(diǎn)數(shù)量上,K-means++算法整體分布更加均勻,可有效平衡網(wǎng)絡(luò)負(fù)載和降低簇首能量消耗.
如圖7所示,傳感節(jié)點(diǎn)初始200個(gè),隨著輪數(shù)的增加,部分傳感器節(jié)點(diǎn)能量耗盡,存活節(jié)點(diǎn)總數(shù)量越來(lái)越少.
從圖7中可以看出KEECS協(xié)議在第1 406輪時(shí)第1個(gè)節(jié)點(diǎn)死亡,第1 903輪時(shí)最后1個(gè)節(jié)點(diǎn)能量耗盡,LEACH協(xié)議中第170輪時(shí)第1個(gè)節(jié)點(diǎn)死亡,在第1 527輪時(shí)最后1個(gè)節(jié)點(diǎn)的能量耗盡,LEACH-C協(xié)議在191輪時(shí)第1個(gè)節(jié)點(diǎn)能量耗盡,在第1 661輪時(shí)最后1個(gè)節(jié)點(diǎn)能量耗盡.因此改進(jìn)后的協(xié)議的生命周期比傳統(tǒng)的LEACH和LEACH-C協(xié)議都要長(zhǎng),且第1個(gè)節(jié)點(diǎn)的死亡時(shí)間比傳統(tǒng)的LEACH算法大幅增加,最后1個(gè)節(jié)點(diǎn)的死亡時(shí)間提升了25%,因此本算法可以有效的延長(zhǎng)了網(wǎng)絡(luò)的生存時(shí)間.從圖7中還可以發(fā)現(xiàn)第1個(gè)節(jié)點(diǎn)能量耗盡輪數(shù)和最后1個(gè)節(jié)點(diǎn)能量耗盡的時(shí)間隔時(shí)間很短,說(shuō)明第1次出現(xiàn)節(jié)點(diǎn)能量耗盡之后,其他節(jié)點(diǎn)在短時(shí)間之內(nèi)也迅速死亡,于是可以保證監(jiān)測(cè)區(qū)域較長(zhǎng)時(shí)間的完整覆蓋,網(wǎng)絡(luò)結(jié)構(gòu)更加穩(wěn)定,避免部分區(qū)域因?yàn)楣?jié)點(diǎn)過(guò)早死亡而影響獲取監(jiān)測(cè)區(qū)域完整的信息.
節(jié)點(diǎn)總的剩余能量是衡量整體網(wǎng)絡(luò)能量利用效率的一個(gè)重要標(biāo)準(zhǔn),相同的運(yùn)行輪數(shù)下,剩余的能量越多,則每一輪節(jié)點(diǎn)消耗的能量就越少.圖8表示網(wǎng)絡(luò)的總能量隨著運(yùn)行輪數(shù)變化的曲線圖,全網(wǎng)共200個(gè)節(jié)點(diǎn),初始總能量都是100J,隨著運(yùn)行的輪數(shù)增加時(shí),網(wǎng)絡(luò)的總能量逐漸減少.
當(dāng)能量減少到0J時(shí),KEECS算法運(yùn)行的輪數(shù)最多,這是由于KEECS算法在數(shù)據(jù)傳輸過(guò)程中簇首的合理分布,并采用了數(shù)據(jù)融合和基于Dijkstra多跳通信的方式,此方法可以保證每個(gè)簇首到Sink節(jié)點(diǎn)的通信代價(jià)是最優(yōu)的.
如圖9所示,對(duì)LEACH、LEACH-C與KEECS的算法進(jìn)行仿真,分別得到匯聚節(jié)點(diǎn)接受的數(shù)據(jù)包數(shù)量和運(yùn)行輪數(shù)之間的關(guān)系.
采用模擬退火算法的LEACH-C向Sink節(jié)點(diǎn)發(fā)送數(shù)據(jù)包的傳輸量最大,傳統(tǒng)的LEACH算法次之,KEECS算法的Sink節(jié)點(diǎn)收到的數(shù)據(jù)包數(shù)量最少,說(shuō)明整個(gè)數(shù)據(jù)傳輸過(guò)程能夠很好的減少了節(jié)點(diǎn)與Sink節(jié)點(diǎn)的數(shù)據(jù)傳輸量,合理的減輕了網(wǎng)絡(luò)的負(fù)載[16],從而有效的節(jié)省了傳感網(wǎng)中節(jié)點(diǎn)的能量,延長(zhǎng)了網(wǎng)絡(luò)的生存周期.
對(duì)于傳統(tǒng)的無(wú)線傳感網(wǎng)中分簇路由協(xié)議在簇的形成、簇首選取、數(shù)據(jù)傳輸這些方面的不足,通過(guò)結(jié)合K-means++算法進(jìn)行改進(jìn),使其計(jì)算速度快,適合處理大規(guī)模數(shù)據(jù).分簇階段,引入S_Dbw聚類(lèi)評(píng)價(jià)指標(biāo)來(lái)確定最佳簇首數(shù)量,能夠較好的適應(yīng)各種方式部署的無(wú)線傳感器節(jié)點(diǎn),傳感器節(jié)點(diǎn)的部署也不必局限于特定規(guī)則的形狀,在簇首的選舉過(guò)程中不僅考慮簇首的地理位置,也綜合考慮了節(jié)點(diǎn)的剩余能量.在節(jié)點(diǎn)向匯聚節(jié)點(diǎn)傳輸數(shù)據(jù)的過(guò)程中,采用多跳通信的方式進(jìn)行傳輸,有效節(jié)省了通信資源的消耗.通過(guò)仿真對(duì)比發(fā)現(xiàn):新的算法延長(zhǎng)了網(wǎng)絡(luò)節(jié)點(diǎn)的生存時(shí)間,也減少了網(wǎng)絡(luò)節(jié)點(diǎn)的能量消耗,利于整個(gè)網(wǎng)絡(luò)負(fù)載的均衡,非常有利于獲取監(jiān)測(cè)區(qū)域的完整信息.