宋 玲,黃達(dá)勝
(廣西大學(xué)計(jì)算機(jī)與電子信息學(xué)院,廣西 南寧 530004)
無(wú)線傳感器網(wǎng)絡(luò)WSN(Wireless Sensor Network)研究涉及廣泛,是一種獲取、處理信息的全新技術(shù),廣泛應(yīng)用在國(guó)防、醫(yī)療、環(huán)境、目標(biāo)跟蹤和入侵檢測(cè)等領(lǐng)域。在無(wú)線傳感器網(wǎng)絡(luò)中,傳感器節(jié)點(diǎn)所監(jiān)測(cè)到的信息,如壓力、溫度、濕度等,如果沒(méi)有相對(duì)應(yīng)的位置信息是毫無(wú)研究?jī)r(jià)值的,因此,位置信息對(duì)監(jiān)測(cè)活動(dòng)至關(guān)重要[1],節(jié)點(diǎn)定位也成為WSN的研究熱點(diǎn)之一。
通常情況下,無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)定位技術(shù)可以分為2類:基于測(cè)距的定位技術(shù)和無(wú)需測(cè)距的定位技術(shù)[2]。在WSN節(jié)點(diǎn)定位中,最常用的是基于無(wú)需測(cè)距的定位方法,而DV_Hop(Distance Vector Hop)算法又是無(wú)需測(cè)距的方法中最常用的算法之一,其在WSN節(jié)點(diǎn)定位中的地位不言而喻。因?yàn)橐讓?shí)現(xiàn)、花費(fèi)低,而且可以滿足大多數(shù)應(yīng)用對(duì)于節(jié)點(diǎn)定位的要求,所以DV_Hop算法在無(wú)需測(cè)距的方法中得到了廣泛使用[3],但其也有一些不足:在實(shí)際應(yīng)用中,傳感器節(jié)點(diǎn)是隨機(jī)分布的,所以網(wǎng)絡(luò)節(jié)點(diǎn)平均每跳距離與實(shí)際的距離是有偏差的;傳感器節(jié)點(diǎn)的密度也會(huì)影響定位的精度;在最后的定位計(jì)算階段,最小二乘法雖然計(jì)算簡(jiǎn)單,但是對(duì)誤差比較敏感[4]。
由于參數(shù)簡(jiǎn)單,計(jì)算方便,在高密度的節(jié)點(diǎn)分布情況下有很好的定位準(zhǔn)確度,所以從提出至今,DV_Hop算法都是無(wú)線傳感器網(wǎng)絡(luò)定位中最常采用的方法之一。但是,又因?yàn)榈?階段平均跳數(shù)產(chǎn)生的距離誤差和第3階段的計(jì)算誤差,使得國(guó)內(nèi)外學(xué)者一直在對(duì)其進(jìn)行研究與改進(jìn)。
DV_Hop算法是Dragos等人[5]于2003年提出的,是一種利用距離矢量路由和GPS定位思想提出的定位算法。文獻(xiàn)[6]將RSSI(Received Signal Strength Indicator)與DV_Hop算法相結(jié)合,改進(jìn)了DV_Hop算法,提高了定位的精度,但其只優(yōu)化了第1跳的距離,精度上并未提高許多。文獻(xiàn)[7]在DV_Hop算法中引入了閾值M,利用M跳數(shù)內(nèi)錨節(jié)點(diǎn)的加權(quán)平均跳距計(jì)算未知節(jié)點(diǎn)的平均跳距,從而提高了定位精度。但是,有時(shí)遠(yuǎn)的錨節(jié)點(diǎn)距離更接近實(shí)際距離,閾值將這些節(jié)點(diǎn)篩選掉了,所以精度并未得到很大提高。文獻(xiàn)[8]利用錨節(jié)點(diǎn)的移動(dòng)形成多個(gè)虛擬錨節(jié)點(diǎn),有效減少了錨節(jié)點(diǎn)的使用數(shù)量;并在原算法基礎(chǔ)上修正平均跳距,使其更接近真實(shí)值。但是,這種方法需要提前按照規(guī)定布置錨節(jié)點(diǎn),且節(jié)點(diǎn)間的路徑是事先規(guī)劃好的,對(duì)能耗與覆蓋問(wèn)題還欠考慮。文獻(xiàn)[9]將人工魚群算法引入DV_Hop算法,提高了定位精度,然而將魚群算法引入節(jié)點(diǎn)計(jì)算增加了復(fù)雜度,對(duì)能耗有一定的要求。文獻(xiàn)[10]運(yùn)用加權(quán)質(zhì)心方法改進(jìn)DV_Hop算法并將其與GSO(Glowworm Swarm Optimization)算法相結(jié)合,提高了定位精度,但是僅采用經(jīng)典粒子群優(yōu)化PSO(Particle Swarm Optimization)算法,易陷入局部最優(yōu)。文獻(xiàn)[11]在傳統(tǒng)DV-Hop算法中,融合人工蜂群算法和差分進(jìn)化算法,提出了一種HDV-Hop算法。該算法優(yōu)化了搜索過(guò)程,提高了定位精度,實(shí)現(xiàn)了對(duì)未知節(jié)點(diǎn)的定位,收斂速度有所提高,但仍有待進(jìn)一步改進(jìn)。文獻(xiàn)[12]通過(guò)將蟻群算法和粒子群優(yōu)化算法相結(jié)合來(lái)改進(jìn)DV-Hop算法,相比于基于遺傳算法優(yōu)化的節(jié)點(diǎn)定位,定位精度又有所提高,但在未知節(jié)點(diǎn)數(shù)量超過(guò)200時(shí),改進(jìn)的定位精度和原始的定位精度相差不大,有時(shí)甚至更差,這一點(diǎn)有待改進(jìn)。
狼群算法WCA(Wolf Colony Algorithm)是近些年來(lái)新出現(xiàn)的算法,與粒子群優(yōu)化算法和遺傳算法相比,它具有更高的尋優(yōu)精度且參數(shù)較少,將其用于節(jié)點(diǎn)位置的計(jì)算階段會(huì)得到更好的定位效果。但是,因?yàn)樵祭侨核惴ㄒ紫萑刖植孔顑?yōu),所以將模擬退火與混沌映射相結(jié)合對(duì)其進(jìn)行改進(jìn)。
為滿足對(duì)定位精度越來(lái)越高的要求,本文提出一種基于改進(jìn)狼群算法的DV_Hop算法IWCADV_Hop(Improved Wolf Colony Algorithm DV_Hop),以提升定位精度。與錨節(jié)點(diǎn)間跳數(shù)為1的節(jié)點(diǎn)距離直接利用RSSI計(jì)算,這樣能降低部分節(jié)點(diǎn)的距離誤差,在計(jì)算節(jié)點(diǎn)位置階段用改進(jìn)的狼群算法代替原來(lái)的最小二乘法,進(jìn)一步減小了計(jì)算誤差。
DV_Hop 算法的主要思想是用未知節(jié)點(diǎn)到錨節(jié)點(diǎn)的最小跳數(shù)乘以距離未知節(jié)點(diǎn)最近的錨節(jié)點(diǎn)的平均每跳距離,之后再計(jì)算未知節(jié)點(diǎn)與錨節(jié)點(diǎn)的距離,進(jìn)而計(jì)算未知節(jié)點(diǎn)的位置,主要分為以下3個(gè)階段[4]:
第1階段:節(jié)點(diǎn)獲得與錨節(jié)點(diǎn)的最小跳數(shù)。錨節(jié)點(diǎn)向所有鄰居節(jié)點(diǎn)發(fā)送跳數(shù)信息,所有節(jié)點(diǎn)接受到信息之后再繼續(xù)轉(zhuǎn)發(fā)給自身的鄰居節(jié)點(diǎn),并使跳數(shù)加1,直到所有節(jié)點(diǎn)都接收到所有錨節(jié)點(diǎn)發(fā)送的跳數(shù)信息,并取最小的跳數(shù)。
第2階段:計(jì)算錨節(jié)點(diǎn)與未知節(jié)點(diǎn)的距離。所有錨節(jié)點(diǎn)在第1階段中獲取到與其他錨節(jié)點(diǎn)的最小跳數(shù),然后通過(guò)自身的定位功能可得知相互之間的距離,通過(guò)跳數(shù)和距離計(jì)算出平均每跳距離。計(jì)算公式如式(1)所示:
(1)
其中,Hope為平均跳距,(xai,yai)為第i個(gè)錨節(jié)點(diǎn)的坐標(biāo),(xaj,yaj)為第j個(gè)錨節(jié)點(diǎn)的坐標(biāo),hij為第i個(gè)錨節(jié)點(diǎn)到第j個(gè)錨節(jié)點(diǎn)的最小跳數(shù)。
第3階段:計(jì)算未知節(jié)點(diǎn)的位置。所有未知節(jié)點(diǎn)在第1階段中接收到了所有錨節(jié)點(diǎn)到自身的最小跳數(shù),通過(guò)第2階段的平均每跳距離可計(jì)算出自身與所有錨節(jié)點(diǎn)的距離,通過(guò)距離可計(jì)算出未知節(jié)點(diǎn)的位置。距離計(jì)算公式如式(2)所示:
(2)
根據(jù)每個(gè)錨節(jié)點(diǎn)的坐標(biāo)和與錨節(jié)點(diǎn)的距離,未知節(jié)點(diǎn)的坐標(biāo)可由解方程(3)得出。
(3)
其中,(xa1,ya1)為第1個(gè)錨節(jié)點(diǎn)的位置;(xui,yui)為第i個(gè)未知節(jié)點(diǎn)的位置;(xaj,yaj)為第j個(gè)錨節(jié)點(diǎn)的位置,1≤j≤M,M是錨節(jié)點(diǎn)個(gè)數(shù);dij為第i個(gè)未知節(jié)點(diǎn)到第j個(gè)錨節(jié)點(diǎn)的距離。
狼群算法(WCA)通過(guò)模擬自然界中狼群的行為來(lái)對(duì)目標(biāo)函數(shù)進(jìn)行尋優(yōu),求出最優(yōu)解。WCA具有并行性,能同時(shí)對(duì)多個(gè)點(diǎn)進(jìn)行尋優(yōu),與其他智能群算法相比,具有更高的尋優(yōu)精度和更好的魯棒性。狼群算法分為探狼游走、頭狼召喚和猛狼圍攻3種行為,以及勝者為王、優(yōu)勝劣汰2種規(guī)則。狼群中一共包含3種狼:頭狼、探狼和猛狼[13]。頭狼:適應(yīng)度函數(shù)最優(yōu)的狼,每次迭代對(duì)其他猛狼進(jìn)行召喚,使猛狼向其移動(dòng)。探狼:除頭狼外適應(yīng)度函數(shù)最優(yōu)的B匹狼,每次迭代過(guò)程中向自身h個(gè)方向進(jìn)行游走,并向函數(shù)值優(yōu)于當(dāng)前位置的方向移動(dòng)。猛狼,除頭狼與探狼外的所有狼,每次迭代受頭狼召喚,朝著頭狼奔走,當(dāng)與頭狼距離小于圍攻距離時(shí)進(jìn)行猛狼圍攻[14]。
狼群算法的主要步驟如下所示:
步驟1隨機(jī)生成N匹人工狼。
步驟2計(jì)算每匹狼的目標(biāo)函數(shù)值,最優(yōu)的作為頭狼,除頭狼外最優(yōu)的B匹狼作為探狼,剩下的作為猛狼,跳到步驟3。當(dāng)頭狼函數(shù)值達(dá)到要求或者滿足最大迭代次數(shù),跳到步驟7。
步驟3探狼游走。每次迭代,每匹探狼朝自身h個(gè)方向游走,選出函數(shù)值最大的方向所對(duì)應(yīng)的函數(shù)值,如果函數(shù)值優(yōu)于當(dāng)前函數(shù)值,則探狼朝該方向前進(jìn),所以第i匹探狼的位置如式(4)所示:
(4)
步驟4頭狼召喚。每次迭代,頭狼對(duì)所有猛狼進(jìn)行召喚,每匹猛狼朝頭狼靠近,第i匹猛狼第t次迭代的位置計(jì)算如式(5)所示:
(5)
奔襲過(guò)程中,如果猛狼的函數(shù)值優(yōu)于頭狼的函數(shù)值,則該猛狼晉升為頭狼,并在此后的迭代過(guò)程中進(jìn)行召喚。
步驟5猛狼圍攻。若猛狼與頭狼的距離小于圍攻距離,猛狼進(jìn)入圍攻階段,設(shè)頭狼位置為獵物所在位置,對(duì)獵物進(jìn)行圍攻,第i匹猛狼第t次迭代圍攻的位置由式(6)計(jì)算得出。
(6)
步驟6依據(jù)“勝者為王”規(guī)則,按照每匹狼的適應(yīng)度,即所求函數(shù)在每匹狼所在位置的函數(shù)值重新選出頭狼、探狼和猛狼;依據(jù)“優(yōu)勝劣汰”規(guī)則淘汰掉函數(shù)值最差的c匹狼。跳到步驟2。
步驟7輸出頭狼的位置。
DV_Hop產(chǎn)生誤差的原因主要有2點(diǎn):(1)跳數(shù)帶來(lái)的誤差,這是因?yàn)楣?jié)點(diǎn)分布不均勻造成的;(2)計(jì)算帶來(lái)的誤差,因?yàn)楫?dāng)方程數(shù)量過(guò)多時(shí),最小二乘法的計(jì)算易使誤差加大。針對(duì)這2點(diǎn)對(duì)DV_Hop算法進(jìn)行改進(jìn)。首先對(duì)于與錨節(jié)點(diǎn)只有1跳的未知節(jié)點(diǎn),直接使用RSSI來(lái)計(jì)算它與錨節(jié)點(diǎn)的距離,這樣能使一部分未知節(jié)點(diǎn)與錨節(jié)點(diǎn)的距離誤差減小,從而減小定位誤差。另一方面,在計(jì)算節(jié)點(diǎn)位置時(shí),將模擬退火和混沌映射與WCA結(jié)合,以提高WCA跳出局部最優(yōu)的能力,再利用狼群尋優(yōu)精度高的優(yōu)勢(shì),用優(yōu)化后的狼群算法替代最小二乘法,從而減小因最小二乘法計(jì)算帶來(lái)的誤差。
對(duì)于與錨節(jié)點(diǎn)跳距為1的未知節(jié)點(diǎn),計(jì)算它和錨節(jié)點(diǎn)之間的距離時(shí),可以采用RSSI的測(cè)距方法,這樣會(huì)使得一部分節(jié)點(diǎn)與錨節(jié)點(diǎn)的距離更加準(zhǔn)確[6]。RSSI測(cè)距如式(7)所示:
(7)
其中,dist為2節(jié)點(diǎn)間的距離;Pt(dist)是在經(jīng)過(guò)距離dist后接收到的信號(hào)強(qiáng)度,即接收到的RSSI值;Pt(dist0)是在經(jīng)過(guò)距離1 m后接收到的信號(hào)強(qiáng)度;dist0為單位距離,X0為噪聲變量,服從均值為零的高斯分布,取值在4 ~ 10;δ是路徑損耗衰減因子,取值在2~5。
3.3.1 狼群算法的不足
狼群算法與粒子群優(yōu)化算法、遺傳算法等相比,求解精度更高,收斂速度更快,控制參數(shù)更少。但是,探狼的游走行為采取的是貪婪式游走策略,始終朝著適應(yīng)度函數(shù)更優(yōu)的位置游走。 當(dāng)探狼在游走范圍內(nèi)沒(méi)有更優(yōu)的位置時(shí),容易陷入局部最優(yōu)位置,從而無(wú)法繼續(xù)游走,降低了算法全局搜索能力[15]。本文將模擬退火算法和混沌映射算法與狼群算法結(jié)合,使狼群算法具有跳出局部最優(yōu)的機(jī)會(huì),提高算法的魯棒性。
3.3.2 基于模擬退火與混沌映射優(yōu)化狼群算法
(1)IWCA算法步驟。
步驟1引用模擬退火算法的思想,給定一個(gè)初始概率P0,概率P隨著迭代次數(shù)的增加而減小[16]。當(dāng)探狼嘗試k次游走但位置均未發(fā)生變化時(shí),認(rèn)為探狼陷入了局部最優(yōu),則根據(jù)概率P朝目標(biāo)函數(shù)值較差的方向游走,P的變化公式如式(8)所示。
(8)
其中,t是當(dāng)前迭代次數(shù),T是最大迭代次數(shù),P0為初始概率,Pl為最小概率。
步驟2探狼進(jìn)行目標(biāo)函數(shù)值較差的游走時(shí),游走的方式為混沌映射。將探狼X=(x1,x2,…,xn)(xi是探狼第i維的位置)的每一維度的位置映射到混沌區(qū)間Y=(y1,y2,…,yn)[17]上(yi是探狼第i維映射到混沌區(qū)間上的位置),映射公式如式(9)所示,混沌映射的模型如式(10)所示:
(9)
yt+1=0.9-1.9×|yt|
(10)
式(9)中,UB、LB為探狼在第i維參數(shù)上的取值上下界,xij為第i匹探狼在第j維度的位置,yij為第i匹探狼映射到混沌區(qū)間上第j維度的位置。式(10)中,yt+1表示第t+1次迭代時(shí)的混沌變量值,t=0,1,…,m。
將混沌變量Y=(y1,y2,…,yn)根據(jù)混沌模型迭代m次,迭代公式如式(10)所示,并將每次迭代后的混沌變量反映射回探狼游走區(qū)域中,反映射公式如式(11)所示,探狼在這m次反映射中,找到最優(yōu)的位置并進(jìn)行游走。
xij=LB+yij(UB-LB)
(11)
其中,xij為第i匹探狼經(jīng)過(guò)反映射回到第j維度的位置,yij為第i匹探狼在混沌區(qū)間上第j維度的位置。
步驟3在猛狼圍攻階段,采用灰狼算法GWO(Grey Wolf Optimizer)[18]的奔走方式,這樣具有更高的游走精確度,圍攻公式如式(12)所示:
(12)
D1=2×D3×(δ-0.5)
(13)
(14)
(2)IWCA算法復(fù)雜度分析。
對(duì)于WCA,最大迭代次數(shù)為T,每次迭代中先計(jì)算N匹狼(一共N匹狼)的目標(biāo)函數(shù)值,再對(duì)每一匹狼進(jìn)行游走遍歷,而每匹探狼朝h個(gè)方向嘗試游走,所以WCA的時(shí)間復(fù)雜度為O(T*N*h),因?yàn)?個(gè)變量是同一個(gè)數(shù)量級(jí),所以可化簡(jiǎn)為O(N3)。對(duì)于本文的IWCA,探狼進(jìn)行m次混沌映射與朝h個(gè)方向游走是相互獨(dú)立的,所以IWCA算法的時(shí)間復(fù)雜度為O(T*N*(h+m)),因?yàn)檫@4個(gè)變量是一個(gè)數(shù)量級(jí),故化簡(jiǎn)后的時(shí)間復(fù)雜度為O(N3),即IWCA與WCA算法的時(shí)間復(fù)雜度一致。
3.4.1 實(shí)驗(yàn)場(chǎng)景與參數(shù)
為了測(cè)試基于模擬退火與混沌映射的狼群算法(IWCA)的性能,本文選取了4個(gè)常見(jiàn)的適應(yīng)度函數(shù)進(jìn)行測(cè)試,函數(shù)如表1所示,每個(gè)函數(shù)的最優(yōu)值均為0,對(duì)5種算法進(jìn)行最優(yōu)值和平均值的比較。實(shí)驗(yàn)環(huán)境為:Intel Core i5,內(nèi)存8 GB,Windows 10專業(yè)版64位操作系統(tǒng),Matlab 2016a。
Table 1 Test functions
實(shí)驗(yàn)進(jìn)行50次,并記錄平均值和最優(yōu)值。IWCA的各項(xiàng)參數(shù)如表2所示,WCA算法的參數(shù)依據(jù)文獻(xiàn)[19]選取,DWPA算法的參數(shù)依據(jù)文獻(xiàn)[20]選取,PSO算法的參數(shù)依據(jù)文獻(xiàn)[21]選取,MCGSO算法的參數(shù)依據(jù)文獻(xiàn)[22]選取。4個(gè)測(cè)試函數(shù)中,Sphere為單峰函數(shù),即在定義域內(nèi)只有一個(gè)極值,同時(shí)也是全局最優(yōu)值。其余3個(gè)為多峰函數(shù),即在定義域內(nèi)有多個(gè)極值,其中的某個(gè)極值為全局最優(yōu)值,多峰函數(shù)可以用來(lái)測(cè)試算法應(yīng)對(duì)陷入局部最優(yōu)的能力。
Table 2 Parameters of IWCA
若算法尋優(yōu)結(jié)果滿足式(15),則說(shuō)明算法收斂:
|F-fbest|<10-6
(15)
其中,F(xiàn)表示測(cè)試函數(shù)的理論最優(yōu)值,fbest表示算法對(duì)測(cè)試函數(shù)所求的最優(yōu)值。
3.4.2 IWCA實(shí)驗(yàn)結(jié)果與分析
各算法對(duì)于適應(yīng)度函數(shù)的尋優(yōu)結(jié)果如表3所示,其中Min表示最小值,Mean表示平均值。
由表3可看出,PSO對(duì)4個(gè)測(cè)試函數(shù)都不收斂,WCA對(duì)f4不收斂,而其他算法對(duì)于4個(gè)測(cè)試函數(shù)均收斂。在4個(gè)算法中,IWCA收斂效果最好,其次是DWPA,MCGSO雖然最小值的收斂程度也很高,但是平均值與最小值的差距過(guò)大,尋優(yōu)效果不太穩(wěn)定,不能以最小值來(lái)看待。原始的WCA因?yàn)槿菀紫萑刖植孔顑?yōu),所以在f2~f4上表現(xiàn)不太好,特別是對(duì)于f4并未達(dá)到收斂條件。不管是對(duì)于單峰函數(shù)f1還是對(duì)于另外3個(gè)多峰函數(shù),相對(duì)于WCA,IWCA的精度都有很大的提升,且在處理多峰函數(shù)時(shí),IWCA更加不容易陷入局部最優(yōu),所以能得到更好的求解值。這是因?yàn)橐肽M退火和混沌映射的探狼具備了跳出局部最優(yōu)的能力,而圍攻階段引用灰狼算法的奔走方式,使得后期的尋優(yōu)能夠更接近最優(yōu)值。在以上5種智能群算法的比較中,顯然IWCA和DWPA的求解結(jié)果更好,而IWCA相比DWPA算法在處理多峰函數(shù)時(shí),效果要好些,而處理單峰函數(shù)f1時(shí),效果次于DWPA。因?yàn)閷?duì)于單峰函數(shù)而言,局部最小值就是全局最小值,IWCA在跳出局部最小值時(shí)就錯(cuò)過(guò)了全局最小值,所以對(duì)于單峰函數(shù)而言,IWCA尋優(yōu)效果相比DWPA要差一些。
Table 3 Optimization results of each algorithm
3.5.1 適應(yīng)度函數(shù)
在DV_Hop算法第2階段結(jié)束后,得到未知節(jié)點(diǎn)與所有錨節(jié)點(diǎn)的距離和所有錨節(jié)點(diǎn)的位置,未知節(jié)點(diǎn)與錨節(jié)點(diǎn)的距離誤差如式(16)所示:
(16)
其中(xui,yui)為第i個(gè)未知節(jié)點(diǎn)的位置,(xaj,yaj)為第j個(gè)錨節(jié)點(diǎn)的位置,dij為第i個(gè)未知節(jié)點(diǎn)到第j個(gè)錨節(jié)點(diǎn)的距離,M是錨節(jié)點(diǎn)總數(shù)。當(dāng)距離誤差最小時(shí),則未知節(jié)點(diǎn)的位置與實(shí)際位置誤差最小,將距離誤差設(shè)為適應(yīng)度函數(shù)。則適應(yīng)度函數(shù)如式(17)所示:
(17)
用IWCA來(lái)計(jì)算適應(yīng)度函數(shù),當(dāng)適應(yīng)度函數(shù)取最小值時(shí),未知節(jié)點(diǎn)的定位誤差最小。
3.5.2 IWCADV_Hop算法步驟
IWCADV_Hop算法具體步驟如下所示:
步驟1錨節(jié)點(diǎn)向周圍節(jié)點(diǎn)廣播跳數(shù)信息,所有節(jié)點(diǎn)接收、記錄跳數(shù)信息后轉(zhuǎn)發(fā)給周圍節(jié)點(diǎn),使每個(gè)節(jié)點(diǎn)獲得與每個(gè)錨節(jié)點(diǎn)之間最小跳數(shù)信息。
步驟2錨節(jié)點(diǎn)之間直接通過(guò)相互間的距離與跳數(shù)計(jì)算出平均跳距,并將平均跳距廣播給所有未知節(jié)點(diǎn)。
步驟3未知節(jié)點(diǎn)計(jì)算出自身到每個(gè)錨節(jié)點(diǎn)的距離。
步驟4根據(jù)未知節(jié)點(diǎn)和錨節(jié)點(diǎn)位置,以及未知節(jié)點(diǎn)到所有錨節(jié)點(diǎn)的距離列出適應(yīng)度函數(shù),用IWCA來(lái)對(duì)適應(yīng)度函數(shù)進(jìn)行尋優(yōu)。
步驟5執(zhí)行狼群算法,當(dāng)滿足尋優(yōu)條件或者達(dá)到最大迭代次數(shù)時(shí)停止尋優(yōu),輸出頭狼的位置,即所求未知節(jié)點(diǎn)的位置。
步驟6當(dāng)求解完所有未知節(jié)點(diǎn)的位置時(shí),算法結(jié)束。
IWCADV_Hop算法的流程圖如圖1所示。
Figure 1 Flow chart of IWCADV_Hop algorithm圖1 IWCADV_Hop算法的流程圖
3.5.3 IWCADV_Hop算法復(fù)雜度分析
對(duì)于DV_Hop算法而言,為使每個(gè)節(jié)點(diǎn)得到與錨節(jié)點(diǎn)的距離,先遍歷每個(gè)節(jié)點(diǎn),再遍歷每個(gè)未知節(jié)點(diǎn)建立方程組,使用最小二乘法解方程組,得出未知節(jié)點(diǎn)位置。對(duì)于DV_Hop算法中建立的方程組,最小二乘法的時(shí)間復(fù)雜度為O(4n),n是待求解的方程數(shù)量,n與節(jié)點(diǎn)總數(shù)Ns和錨節(jié)點(diǎn)數(shù)M是同一個(gè)數(shù)量級(jí),所以DV_Hop算法的時(shí)間復(fù)雜度為O(Ns+(Ns-M)*4n),化簡(jiǎn),得出DV-Hop算法的時(shí)間復(fù)雜度為O(n2)。對(duì)于IWCADV_Hop而言,只是用優(yōu)化狼群算法代替了最小二乘法,所以IWCADV_Hop的時(shí)間復(fù)雜度為O(Ns+(Ns-M)*N3),3個(gè)變量是同一個(gè)數(shù)量級(jí),故化簡(jiǎn)可得O(N4)。故相對(duì)于DV_Hop而言,IWCADV_Hop增加了時(shí)間復(fù)雜度,在一定程度上增加了運(yùn)行時(shí)間。
4.1.1 實(shí)驗(yàn)場(chǎng)景
為了驗(yàn)證IWCADV_Hop算法的定位性能,現(xiàn)將經(jīng)典DV_Hop算法、RABC算法[23]、GWOAASDV_Hop算法[24]與本文算法進(jìn)行定位誤差的比較。對(duì)比實(shí)驗(yàn)在Matlab 2016a上進(jìn)行,并以錨節(jié)點(diǎn)比例、節(jié)點(diǎn)通信半徑和節(jié)點(diǎn)總數(shù)作為變量來(lái)比較4種DV_Hop算法的定位誤差。實(shí)驗(yàn)在100 m*100 m的區(qū)域內(nèi)對(duì)無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)進(jìn)行仿真。每個(gè)節(jié)點(diǎn)的位置隨機(jī)生成,且實(shí)驗(yàn)結(jié)果取50次實(shí)驗(yàn)結(jié)果的平均值。IWCA各參數(shù)如表4所示,因?yàn)榇颂幍倪m應(yīng)度函數(shù)比較簡(jiǎn)單,且所需精度不需要精確到小數(shù)點(diǎn)后很多位,所以調(diào)整了狼群算法的參數(shù),以得到更好的運(yùn)行效果。
Table 4 Parameters of IWCA in IWCADV_Hop algorithm
4.1.2 評(píng)價(jià)指標(biāo)
節(jié)點(diǎn)平均定位誤差的定義如式(18)所示:
(18)
其中,Ns為總節(jié)點(diǎn)數(shù),M為錨節(jié)點(diǎn)數(shù),(xie,yie)表示第i個(gè)未知節(jié)點(diǎn)的計(jì)算位置,(xit,yit)表示第i個(gè)未知節(jié)點(diǎn)的實(shí)際位置,R表示節(jié)點(diǎn)的通信半徑(本文假設(shè)所有節(jié)點(diǎn)通信半徑相同),平均誤差單位為%。錨節(jié)點(diǎn)數(shù)量M越大,計(jì)算未知節(jié)點(diǎn)到錨節(jié)點(diǎn)間的距離就越準(zhǔn)確,則式(18)中分子部分的差就越小,從而平均誤差也會(huì)越小。
4.2.1 以錨節(jié)點(diǎn)數(shù)量作為變量比較4種算法
仿真實(shí)驗(yàn)中,錨節(jié)點(diǎn)的個(gè)數(shù)從20增加到50,遞增間隔為5,節(jié)點(diǎn)通信半徑為30 m,節(jié)點(diǎn)總數(shù)為100,其他參數(shù)不變,對(duì)4種算法進(jìn)行定位誤差的對(duì)比,定位誤差如圖2所示,橫坐標(biāo)表示錨節(jié)點(diǎn)數(shù)量,縱坐標(biāo)表示平均定位誤差。隨著錨節(jié)點(diǎn)數(shù)量的增加,定位誤差逐漸減小,但變化的幅度并不大。這是因?yàn)楫?dāng)錨節(jié)點(diǎn)的數(shù)量增加時(shí),更多未知節(jié)點(diǎn)能夠進(jìn)入到錨節(jié)點(diǎn)的覆蓋范圍內(nèi),這時(shí)的計(jì)算錨節(jié)點(diǎn)與未知節(jié)點(diǎn)的距離更接近于真實(shí)值。但是,當(dāng)錨節(jié)點(diǎn)過(guò)多時(shí),容易造成錨節(jié)點(diǎn)與未知節(jié)點(diǎn)距離過(guò)近,實(shí)際距離遠(yuǎn)小于計(jì)算距離,這又帶來(lái)了定位誤差,所以平均定位誤差隨著錨節(jié)點(diǎn)的增加浮動(dòng)并不大。而對(duì)于其他3種算法而言,IWCADV_Hop算法的定位誤差最小,相對(duì)于其他3種算法的定位誤差平均降低了21.13%,11.03%,7.5%。
Figure 2 Comparison of location errors of four algorithms with different numbers of anchor nodes圖2 錨節(jié)點(diǎn)數(shù)量不同時(shí)4種算法定位誤差對(duì)比
4.2.2 以節(jié)點(diǎn)通信半徑作為變量比較4種算法
仿真實(shí)驗(yàn)中,節(jié)點(diǎn)通信半徑從20 m增加到50 m,遞增間隔為5 m,錨節(jié)點(diǎn)的個(gè)數(shù)為30個(gè),節(jié)點(diǎn)總數(shù)為100個(gè),其他參數(shù)不變,對(duì)4種算法進(jìn)行定位誤差的對(duì)比,定位誤差如圖3所示,橫坐標(biāo)表示節(jié)點(diǎn)的通信半徑,縱坐標(biāo)表示平均定位誤差??梢钥闯?,通信半徑在20~35 m時(shí),隨著半徑的增加,定位誤差逐漸較小,當(dāng)半徑大于35 m時(shí),誤差趨于平滑。這是因?yàn)楫?dāng)通信半徑較小時(shí),2個(gè)節(jié)點(diǎn)之間往往需要進(jìn)行多個(gè)節(jié)點(diǎn)轉(zhuǎn)發(fā)才能抵達(dá),因?yàn)槠骄啻嬖谝欢ㄕ`差,而2個(gè)節(jié)點(diǎn)跳數(shù)越大,則2個(gè)節(jié)點(diǎn)間的計(jì)算距離誤差就越大,所以定位效果越差。當(dāng)通信半徑增大時(shí),節(jié)點(diǎn)間的跳距變小,則定位誤差減小。當(dāng)通信半徑達(dá)到35 m時(shí),區(qū)域內(nèi)的2個(gè)節(jié)點(diǎn)的跳距都在3跳之內(nèi),所以隨著半徑的增大,定位誤差的浮動(dòng)也趨于平滑。而對(duì)于其他3種算法而言,IWCADV_Hop算法的定位誤差也在大多數(shù)情況下是最小的,相對(duì)于其他3種算法的定位誤差平均降低了23.29%,13.13%,7.5%。
Figure 3 Comparison of location errors of four algorithms with different communication radius圖3 通信半徑不同時(shí)4種算法定位誤差對(duì)比
4.2.3 以節(jié)點(diǎn)總數(shù)作為變量比較4種算法
仿真實(shí)驗(yàn)中,節(jié)點(diǎn)的通信半徑為30 m,錨節(jié)點(diǎn)的個(gè)數(shù)為30,節(jié)點(diǎn)總數(shù)從100增加到200,遞增間隔為20,對(duì)4種算法進(jìn)行定位誤差的比較,對(duì)比結(jié)果如圖4所示,其中橫坐標(biāo)表示區(qū)域內(nèi)傳感器節(jié)點(diǎn)的總數(shù),縱坐標(biāo)表示平均定位誤差。由圖4可以看出,節(jié)點(diǎn)總數(shù)從100遞增到200對(duì)于定位的精度并沒(méi)有太大的影響,因?yàn)殡S著節(jié)點(diǎn)總數(shù)的增加,平均跳距和計(jì)算距離的計(jì)算并不會(huì)受到明顯的影響,所以對(duì)定位誤差也沒(méi)有太大的影響。但是,對(duì)比4種算法,IWCADV_Hop算法仍然是定位誤差最小的算法,相對(duì)于其他3種算法的定位誤差平均降低了22.7%,13.3%,8.2%。
Figure 4 Comparison of location errors of four algorithms with different total numbers of nodes 圖4 節(jié)點(diǎn)總數(shù)不同時(shí)4種算法定位誤差對(duì)比
綜上,在3個(gè)仿真實(shí)驗(yàn)中,不論是哪個(gè)變量對(duì)于定位誤差的影響,本文算法求出的定位誤差總是最小的,特別是隨著通信半徑的增加,本文算法的定位誤差能達(dá)到5%以下,這是因?yàn)橐环矫娓倪M(jìn)的狼群算法很大程度上減小了計(jì)算時(shí)產(chǎn)生的定位誤差,另一方面是因?yàn)椴捎昧薘SSI算法來(lái)計(jì)算1跳之內(nèi)的未知節(jié)點(diǎn)與錨節(jié)點(diǎn)的距離,隨著通信半徑的增大,越來(lái)越多的未知節(jié)點(diǎn)都在錨節(jié)點(diǎn)的1跳范圍之內(nèi),所以距離產(chǎn)生的誤差也相對(duì)地減小了。
本文引用RSSI的思想優(yōu)化1跳內(nèi)的節(jié)點(diǎn)距離,并將優(yōu)化的狼群算法與DV_Hop算法相結(jié)合,不僅改進(jìn)了狼群算法,提高了狼群算法的魯棒性,還降低了DV_Hop算法的定位誤差。本文通過(guò)將模擬退火思想和混沌映射與狼群算法結(jié)合,再應(yīng)用到DV_Hop算法中,提出了基于優(yōu)化狼群算法的DV_Hop算法(IWCADV_Hop)。模擬實(shí)驗(yàn)表明,在不增加硬件要求的情況下,該算法具有更好的定位表現(xiàn)。本文算法雖然具有更好的定位效果,但是因?yàn)槔侨簲?shù)量和狼群迭代次數(shù)的增加,導(dǎo)致定位時(shí)間也有所增加(時(shí)間復(fù)雜度為O(N4)),后期將考慮如何降低算法的時(shí)間復(fù)雜度,提高定位速度。