本發(fā)明涉及無線傳感器網(wǎng)絡(luò)技術(shù)領(lǐng)域,尤其是一種基于距離加權(quán)和遺傳優(yōu)化的dv-hop定位方法。
背景技術(shù):
隨著物聯(lián)網(wǎng)研究和應(yīng)用深入,無線傳感器網(wǎng)絡(luò)(wirelesssensornetworks,wsn)在其中起到了關(guān)鍵的推動(dòng)作用。無線傳感器網(wǎng)絡(luò)已經(jīng)在軍事、民用等領(lǐng)域有很多應(yīng)用,包括環(huán)境監(jiān)測(cè)、網(wǎng)站安全、醫(yī)療診斷、戰(zhàn)場(chǎng)監(jiān)視、災(zāi)害救助和輔助生活等。生活中很多應(yīng)用與位置有關(guān),無線傳感器網(wǎng)絡(luò)易于部署、可擴(kuò)展性高、成本低等特點(diǎn)使其在室內(nèi)定位中具有很大的優(yōu)勢(shì)。
定位技術(shù)是無線傳感器網(wǎng)絡(luò)的主要支撐技術(shù)之一,受到研究人員的廣泛關(guān)注。現(xiàn)有的無線傳感器網(wǎng)絡(luò)定位主要可分為基于測(cè)距的定位和無需測(cè)距的定位算法,其主要區(qū)別在于是否需要距離信息?;跍y(cè)距的定位算法中節(jié)點(diǎn)使用測(cè)距技術(shù)獲得距離信息,定位精度較高但是需要額外的設(shè)備,而無需測(cè)距的定位算法僅依靠相鄰節(jié)點(diǎn)間的連通關(guān)系進(jìn)行定位,無需基礎(chǔ)網(wǎng)絡(luò)設(shè)施的支持,定位精度較低。
如果兩個(gè)節(jié)點(diǎn)之間可以直接通信,那么這兩個(gè)節(jié)點(diǎn)之間的距離一定或者等于兩者之間的最大通信距離(r)。niculescu和nath等人提出dv-hop算法,利用兩個(gè)節(jié)點(diǎn)之間通信跳數(shù)來判斷節(jié)點(diǎn)之間的距離關(guān)系。在無線傳感器網(wǎng)絡(luò)中,由于通信距離的限制,兩個(gè)通信節(jié)點(diǎn)之間不存在直接的通信鏈路,其通信就可以利用其他中繼節(jié)點(diǎn)來實(shí)現(xiàn)。通常情況下,為了保證通信效率,在兩個(gè)節(jié)點(diǎn)間的多條鏈路上,大多數(shù)路由算法都會(huì)選擇中繼點(diǎn)少的鏈路。由于無線設(shè)備的硬件限制,在測(cè)距不可能或者不精確的情況下,基于跳數(shù)的估計(jì)方法是對(duì)基于距離測(cè)距的有效補(bǔ)充?;谔鴶?shù)定位無需依賴任何測(cè)距硬件,是一種輕量級(jí)的定位方法,但是定位誤差較大。為了提高定位的準(zhǔn)確性,往往需要大量的參考節(jié)點(diǎn)來實(shí)現(xiàn)節(jié)點(diǎn)與節(jié)點(diǎn)之間的距離估計(jì),這樣加大網(wǎng)絡(luò)的負(fù)擔(dān)。
dv-hop定位算法的實(shí)現(xiàn)過程主要分為三個(gè)階段:
(1)獲取網(wǎng)絡(luò)的最小跳數(shù)。可以用一種分布式的方法實(shí)現(xiàn):每一個(gè)錨節(jié)點(diǎn)洪泛地廣播自己的信息{(xi,yi),hi},其中[xi,yi]表示錨節(jié)點(diǎn)i的物理坐標(biāo),hi記錄距離錨節(jié)點(diǎn)i的跳數(shù)。hi的初始值為1,每次轉(zhuǎn)發(fā)增加1。這樣當(dāng)中轉(zhuǎn)節(jié)點(diǎn)收到信息,該消息的hi代表了此時(shí)該節(jié)點(diǎn)與錨節(jié)點(diǎn)i的最小跳數(shù)。如圖1所示的密集型網(wǎng)絡(luò)中跳數(shù)的獲取相對(duì)較為準(zhǔn)確,但是圖2稀疏型網(wǎng)絡(luò)中,節(jié)點(diǎn)分布過于稀疏,跳數(shù)與跳距的不再是簡(jiǎn)單線性對(duì)應(yīng)關(guān)系,使得跳距的誤差變大。
(2)計(jì)算每跳的平均距離。假設(shè)錨節(jié)點(diǎn)j到錨節(jié)點(diǎn)i之間的最小跳數(shù)為hij,則它們之間的平均跳距為:
當(dāng)兩個(gè)節(jié)點(diǎn)之間的跳數(shù)hopij已知時(shí),可以通過dhop=dij×hopij獲取節(jié)點(diǎn)i和節(jié)點(diǎn)j之間的距離。如圖3所示,當(dāng)網(wǎng)絡(luò)中節(jié)點(diǎn)間距離過大,使得節(jié)點(diǎn)間距離誤差增大,造成計(jì)算結(jié)果誤差累計(jì)。
(3)計(jì)算節(jié)點(diǎn)位置。通過上面獲得的跳距,采用三邊測(cè)量法或者最小二乘算法來確定它的位置。
假設(shè)(x,y)為未知節(jié)點(diǎn)的位置,(xi,yi)為錨節(jié)點(diǎn)的位置,di為未知節(jié)點(diǎn)到錨節(jié)點(diǎn)的距離;n表示錨節(jié)點(diǎn)數(shù)量;最小二乘算法的定位模型為:
改寫成矩陣形式:
簡(jiǎn)寫為:
hx=b
其中,
這個(gè)方程的最小方差解為:
x=(hth)-1htb(4)
未知節(jié)點(diǎn)的位置(x,y)即可求得。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是為了解決無線傳感器網(wǎng)絡(luò)定位精度低的問題,而提出一種基于距離加權(quán)和遺傳優(yōu)化的dv-hop定位方法,本發(fā)明采用的技術(shù)方案是:
一種基于距離加權(quán)和遺傳優(yōu)化的dv-hop定位方法,包括以下步驟:
(1)初始化網(wǎng)絡(luò),各錨節(jié)點(diǎn)以洪泛的方式向周圍廣播自身的id并接受未知節(jié)點(diǎn)的rssi;rssi為信號(hào)強(qiáng)度;
(2)根據(jù)接受的rssi值,以信號(hào)強(qiáng)度的均值逐跳校正未知節(jié)點(diǎn)到各錨節(jié)點(diǎn)的最小跳數(shù);
(3)利用校正后的最小跳數(shù)來加權(quán)平均跳距;
(4)根據(jù)未知節(jié)點(diǎn)到錨節(jié)點(diǎn)的平均跳距獲取未知節(jié)點(diǎn)到錨節(jié)點(diǎn)之間的距離;
(5)在滿足位置計(jì)算的前提下,采用最小二乘算法計(jì)算未知節(jié)點(diǎn)的目標(biāo)位置;
(6)最后利用改進(jìn)遺傳算法優(yōu)化未知節(jié)點(diǎn)的定位結(jié)果。
進(jìn)一步地,步驟(2)具體包括:
把各錨節(jié)點(diǎn)接收到的信號(hào)強(qiáng)度記為:rssi1,rssi2,…,rssin,n為錨節(jié)點(diǎn)數(shù)量;對(duì)所有的rssi求均值
根據(jù)上式(8)節(jié)點(diǎn)之間信號(hào)強(qiáng)度小于或者等于均值
式(9)中,rssiij表示兩個(gè)相鄰節(jié)點(diǎn)i與j之間的信號(hào)強(qiáng)度;
逐跳進(jìn)行最終獲得未知節(jié)點(diǎn)到各錨節(jié)點(diǎn)的最小跳數(shù)minhopij。
進(jìn)一步地,步驟(3)具體包括:
假設(shè)未知節(jié)點(diǎn)i與各個(gè)錨節(jié)點(diǎn)j之間的最小跳數(shù)為minhij,minhij通過步驟(2)的方法獲得;k表示距離未知節(jié)點(diǎn)最近的錨節(jié)點(diǎn),第一部分的平均跳距:
c表示網(wǎng)絡(luò)錨節(jié)點(diǎn)的平均跳距;
第二部分平均跳距為
其中,hkj為距離未知節(jié)點(diǎn)最近的錨節(jié)點(diǎn)到其它錨節(jié)點(diǎn)間跳數(shù),dkj為距離未知節(jié)點(diǎn)最近的錨節(jié)點(diǎn)到其它錨節(jié)點(diǎn)間距離;wkj為距離誤差權(quán)值;結(jié)合式(10)和(11)得到未知節(jié)點(diǎn)到錨節(jié)點(diǎn)的平均跳距
進(jìn)一步地,步驟(4)具體包括:未知節(jié)點(diǎn)與錨節(jié)點(diǎn)之間的距離為:
其中,dxj為未知節(jié)點(diǎn)到錨節(jié)點(diǎn)j之間的距離,
進(jìn)一步地,步驟(5)中,前提是當(dāng)有效錨節(jié)點(diǎn)數(shù)目大于等于3個(gè)才能計(jì)算未知節(jié)點(diǎn)位置。
進(jìn)一步地,步驟(6)中,具體進(jìn)行:
對(duì)經(jīng)典遺傳算法的交叉概率和變異概率進(jìn)行優(yōu)化,改變常規(guī)的適應(yīng)函數(shù)使之適用于無線傳感器網(wǎng)絡(luò)室內(nèi)定位;改進(jìn)的遺傳算法要素以及參數(shù)設(shè)置如下:
1)染色體與初始種群:為了便于遺傳算法求解,把所求未知節(jié)點(diǎn)坐標(biāo)(x,y)看作是求解問題的空間,即染色體s;未知節(jié)點(diǎn)坐標(biāo)(x,y)的坐標(biāo)轉(zhuǎn)化為
s=(v1,v2)(14)
2)適應(yīng)度函數(shù):改進(jìn)的遺傳算法把未知節(jié)點(diǎn)定位誤差倒數(shù)作為適應(yīng)度函數(shù),適應(yīng)度函數(shù)為
3)交叉算子和變異算子分別如式(17)和式(18)所示:
其中,si和sj是種群中兩個(gè)隨機(jī)配對(duì)的父代染色體,si'和s'j是si和sj經(jīng)過交叉操作后生成的新染色體,vi表示經(jīng)由上一步交叉操作而生成的新染色體s的兩個(gè)基因,γi是染色體每一個(gè)基因的取值范圍內(nèi)的隨機(jī)數(shù),vi'表示經(jīng)由上一步交叉操作而生成的新染色體s再經(jīng)變異操作后生成的最新染色體s'的兩個(gè)基因,yi為[0,1]之間的隨機(jī)數(shù),pc為遺傳算法的交叉概率,pm為遺傳算法的變異概率;
分別改進(jìn)交叉算子、變異算子中的交叉概率和變異概率:
式中,fmax為每代種群中的最大適應(yīng)值,fav為每代種群的平均適應(yīng)值,f'為要交叉的兩個(gè)個(gè)體中較大的適應(yīng)值,f為要變異的兩個(gè)個(gè)體中的較大的適應(yīng)值,pc1,pc2,pm1和pm2為小于1的常數(shù);
4)選擇算子:種群中的每一個(gè)染色體經(jīng)過交叉、變異后,都以式(16)適應(yīng)度函數(shù)作為依據(jù);在交叉和變異過程中遵循式(19)和(20)交叉和變異概率,選擇適應(yīng)度函數(shù)值大的的染色體保留在染色體號(hào)位上。
本發(fā)明的優(yōu)點(diǎn)在于:
(1)傳統(tǒng)的dv-hop定位算法跳數(shù)的獲取通常每個(gè)錨節(jié)點(diǎn)采用泛洪地廣播消息,初始值設(shè)置為0,每次轉(zhuǎn)發(fā)增加1,這樣可以獲得節(jié)點(diǎn)之間最小的跳數(shù)。由于錨節(jié)點(diǎn)之間距離不同,這就使得跳數(shù)的獲取過于簡(jiǎn)單,無法體現(xiàn)網(wǎng)絡(luò)中節(jié)點(diǎn)的遠(yuǎn)近程度。改進(jìn)后的方法是節(jié)點(diǎn)間距離大的為1跳,距離小的將小于1跳,跳數(shù)不再是機(jī)械性的疊加。
(2)傳統(tǒng)的平均跳距適用于密集型的節(jié)點(diǎn)分布,然而在稀疏的網(wǎng)絡(luò)中,節(jié)點(diǎn)間距離如果仍然采用距離未知點(diǎn)最近錨節(jié)點(diǎn)的距離容易造成節(jié)點(diǎn)計(jì)算誤差累計(jì)。通過對(duì)平均跳距加權(quán),盡量減少錨節(jié)點(diǎn)到未知節(jié)點(diǎn)之間距離誤差,對(duì)提高定位精度有很大影響。
(3)在室內(nèi)情況下,由于受到環(huán)境的干擾,造成較大測(cè)距誤差,采用最小二乘算法定位精度不太理想,往往需要大量的錨節(jié)點(diǎn)才能高的定位精度,增加了定位的硬件成本。在不增加錨節(jié)點(diǎn)數(shù)的情況下,本發(fā)明采用遺傳算法優(yōu)化計(jì)算結(jié)果。
附圖說明
圖1為節(jié)點(diǎn)密集型分布的示意圖。
圖2為節(jié)點(diǎn)稀疏型分布的示意圖。
圖3為節(jié)點(diǎn)距離過大的示意圖。
圖4為實(shí)驗(yàn)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的示意圖。
圖5為r=30m時(shí)定位性能對(duì)比的示意圖。
圖6為r=35m時(shí)定位性能對(duì)比的示意圖。
圖7為r=40m時(shí)定位性能對(duì)比的示意圖。
具體實(shí)施方式
下面結(jié)合具體附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明。
基于距離加權(quán)和遺傳優(yōu)化的dv-hop定位方法,主要包括跳數(shù)修正、跳距加權(quán)和遺傳算法優(yōu)化三個(gè)部分。本發(fā)明以100m×100m作為實(shí)驗(yàn)仿真的區(qū)域,仿真區(qū)域內(nèi)所有節(jié)點(diǎn)之間通信正常,通信半徑為30m、35m和40m;節(jié)點(diǎn)總數(shù)為100,錨節(jié)點(diǎn)數(shù)量分別為5、10、15、20、25、30、35和40;迭代次數(shù)為60,所有仿真試驗(yàn)均進(jìn)行500次,利用定位精度和平均定位誤差判斷算法定位精度:
平均相對(duì)定位精度為
其中,(xi,yi)為未知節(jié)點(diǎn)的實(shí)際位置,(x'i,y'i)為未知節(jié)點(diǎn)計(jì)算位置,r為通信半徑,m為網(wǎng)絡(luò)連通度,n為未知節(jié)點(diǎn)數(shù)量。
本實(shí)施例中,錨節(jié)點(diǎn)指預(yù)先布設(shè)的無線傳感器,也就是圖4中的信標(biāo)節(jié)點(diǎn);未知節(jié)點(diǎn)為待定位的傳感器;
本發(fā)明提出的基于距離加權(quán)和遺傳優(yōu)化的dv-hop定位方法,包括以下步驟:
(1)初始化網(wǎng)絡(luò),各錨節(jié)點(diǎn)以洪泛的方式向周圍廣播自身的id并接受未知節(jié)點(diǎn)的rssi;rssi為信號(hào)強(qiáng)度;
(2)根據(jù)接受的rssi值,以信號(hào)強(qiáng)度的均值逐跳校正未知節(jié)點(diǎn)到各錨節(jié)點(diǎn)的最小跳數(shù);具體如下所述:
根據(jù)節(jié)點(diǎn)接受的信號(hào)強(qiáng)度估算出節(jié)點(diǎn)之間距離,其計(jì)算方式如下
其中,p0(d0)為參考節(jié)點(diǎn)d0處的信號(hào)強(qiáng)度,pr(d)為在距離d處的未知節(jié)點(diǎn)的信號(hào)強(qiáng)度,η為路徑損耗系數(shù),通常取值在2~5之間;xσ是標(biāo)準(zhǔn)差為σ、均值為零的高斯分布隨機(jī)變量;
簡(jiǎn)化為
pr(d)=a-10ηlgd(7)
式中,a為1m處接受的信號(hào)強(qiáng)度;從式中可知接收到信號(hào)強(qiáng)度越強(qiáng)節(jié)點(diǎn)之間距離越短。基于此理論,把各錨節(jié)點(diǎn)接收到的信號(hào)強(qiáng)度記為:rssi1,rssi2,…,rssin,n為錨節(jié)點(diǎn)數(shù)量;對(duì)所有的rssi求均值
根據(jù)上式(8)節(jié)點(diǎn)之間信號(hào)強(qiáng)度小于或者等于均值
式(9)中,rssiij表示兩個(gè)相鄰節(jié)點(diǎn)i與j之間的信號(hào)強(qiáng)度。假設(shè)未知節(jié)點(diǎn)發(fā)射一組信號(hào),在轉(zhuǎn)發(fā)的過程中不是機(jī)械的加1,而是通過與信號(hào)強(qiáng)度均值進(jìn)行比較來判斷是否需要修正,逐跳進(jìn)行最終可以獲取一個(gè)最小的節(jié)點(diǎn)跳數(shù)minhopij。
(3)利用校正后的最小跳數(shù)來加權(quán)平均跳距;具體如下所述:
假設(shè)未知節(jié)點(diǎn)i與各個(gè)錨節(jié)點(diǎn)j之間的最小跳數(shù)為minhij(可通過步驟2的方法獲得),k表示距離未知節(jié)點(diǎn)最近的錨節(jié)點(diǎn),第一部分的平均跳距:
c表示網(wǎng)絡(luò)錨節(jié)點(diǎn)的平均跳距;
第二部分平均跳距為
其中,hkj為距離未知節(jié)點(diǎn)最近的錨節(jié)點(diǎn)到其它錨節(jié)點(diǎn)間跳數(shù),dkj為距離未知節(jié)點(diǎn)最近的錨節(jié)點(diǎn)到其它錨節(jié)點(diǎn)間距離;wkj為距離誤差權(quán)值;結(jié)合式(10)和(11)得到未知節(jié)點(diǎn)到錨節(jié)點(diǎn)的平均跳距
(4)根據(jù)未知節(jié)點(diǎn)到錨節(jié)點(diǎn)的平均跳距獲取未知節(jié)點(diǎn)到錨節(jié)點(diǎn)之間的距離;
根據(jù)式(13)可得未知節(jié)點(diǎn)與錨節(jié)點(diǎn)之間的距離:
其中,dxj為未知節(jié)點(diǎn)到錨節(jié)點(diǎn)j之間的距離,
(5)在滿足位置計(jì)算的前提下,采用最小二乘算法計(jì)算未知節(jié)點(diǎn)的目標(biāo)位置;此部分內(nèi)容再背景技術(shù)中已經(jīng)作過介紹;前提是當(dāng)有效錨節(jié)點(diǎn)數(shù)目大于等于3個(gè)才能計(jì)算未知節(jié)點(diǎn)位置;
(6)最后利用改進(jìn)遺傳算法優(yōu)化未知節(jié)點(diǎn)的定位結(jié)果。
對(duì)經(jīng)典遺傳算法的交叉概率和變異概率進(jìn)行優(yōu)化,改變常規(guī)的適應(yīng)函數(shù)使之適用于無線傳感器網(wǎng)絡(luò)室內(nèi)定位;改進(jìn)的遺傳算法要素以及參數(shù)設(shè)置如下:
1)染色體與初始種群:為了便于遺傳算法求解,把所求未知節(jié)點(diǎn)坐標(biāo)(x,y)看作是求解問題的空間,即染色體s;未知節(jié)點(diǎn)坐標(biāo)(x,y)的坐標(biāo)轉(zhuǎn)化為
s=(v1,v2)(14)
(v1,v2)為轉(zhuǎn)換后的未知節(jié)點(diǎn)坐標(biāo);
2)適應(yīng)度函數(shù):在ga-dv-hop定位算法中問題空間的目標(biāo)函數(shù)即未知節(jié)點(diǎn)坐標(biāo)定位誤差為
改進(jìn)的遺傳算法把未知節(jié)點(diǎn)定位誤差倒數(shù)作為適應(yīng)度函數(shù),其值越大,染色體的適應(yīng)能力越強(qiáng)被遺傳下去的可能性越大,適應(yīng)度函數(shù)為
(v1',v'2)坐標(biāo)轉(zhuǎn)換后的未知節(jié)點(diǎn)計(jì)算位置;
3)交叉算子和變異算子分別如式(17)和式(18)所示:
其中,si和sj是種群中兩個(gè)隨機(jī)配對(duì)的父代染色體,si'和s'j是si和sj經(jīng)過交叉操作后生成的新染色體,vi表示經(jīng)由上一步交叉操作而生成的新染色體s的兩個(gè)基因,γi是染色體每一個(gè)基因的取值范圍內(nèi)的隨機(jī)數(shù),vi'表示經(jīng)由上一步交叉操作而生成的新染色體s再經(jīng)變異操作后生成的最新染色體s'的兩個(gè)基因,yi為[0,1]之間的隨機(jī)數(shù),pc為遺傳算法的交叉概率,pm為遺傳算法的變異概率;針對(duì)遺傳算法中的缺陷,交叉概率pc過大時(shí),新個(gè)體產(chǎn)生的速度越快,但是對(duì)原有種群的破壞也越大,反之搜索速度慢;變異概率pm難以生成新的變異個(gè)體,反之難以搜索到最佳的位置。對(duì)此,分別改進(jìn)交叉算子、變異算子中的交叉概率和變異概率:
式中,fmax為每代種群中的最大適應(yīng)值,fav為每代種群的平均適應(yīng)值,f'為要交叉的兩個(gè)個(gè)體中較大的適應(yīng)值,f為要變異的兩個(gè)個(gè)體中的較大的適應(yīng)值,pc1,pc2,pm1和pm2為小于1的常數(shù);
4)選擇算子:種群中的每一個(gè)染色體經(jīng)過交叉、變異后,都以式(16)適應(yīng)度函數(shù)作為依據(jù);在交叉和變異過程中遵循式(19)和(20)交叉和變異概率,選擇適應(yīng)度函數(shù)值大的的染色體保留在染色體號(hào)位上。
算法分析:
1)錨節(jié)點(diǎn)密度
無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)定位是通過未知節(jié)點(diǎn)周圍錨節(jié)點(diǎn)的距離信息求解未知節(jié)點(diǎn)的位置,該方法對(duì)錨節(jié)點(diǎn)部署數(shù)量要求很高,當(dāng)未知節(jié)點(diǎn)周圍錨節(jié)點(diǎn)部署密度高時(shí),定位算法表現(xiàn)出較好的性能,當(dāng)錨節(jié)點(diǎn)的數(shù)量減少時(shí),定位精度大幅度下降。如圖5、6、7所示,在10m×10m定位區(qū)域,新的定位方法在錨節(jié)點(diǎn)比例較低的情況下,任然能夠保持較高的定位精度,隨著錨節(jié)點(diǎn)比例增加,定位精度提高比較明顯。
2)定位的精度
對(duì)于一種給定的定位算法,定位精度顯示了節(jié)點(diǎn)的計(jì)算位置和物理位置的匹配程度。具體而言,定位精度被定為一個(gè)未知節(jié)點(diǎn)的定位估計(jì)值與其真實(shí)位置之間的距離。在無線傳感器網(wǎng)絡(luò)中,室內(nèi)定位的精度普遍不高,無法滿足市場(chǎng)的需求。如圖5、6、7所示,在10m×10m的定位區(qū)域,可以看出本發(fā)明在不同的通信半徑下,仍然能夠保持較高的定位精度。