文章目录
【可更换其他算法,获取资源
请见文章第6节:资源获取】
1. Dvhop定位算法
根据距离矢量和 GPS定位原理,2001年,Nieuleseu等人提出了 DV-Hop传感器节点定位算法,其只包含少数锚节点,剩余节点为未知节点,需要通过定位算法来确定它们的位置,具有无需测量距离,硬件要求低等点,在硬件条件有限的WSN得到了广泛的应用。
DV-Hop算法的定位步骤如下:
(1)各锚节点向通信范围内的邻居节点广播自身的位置信息。接收节点则记录到每个锚节点的最小跳数,同时忽略来自同一个锚节点的较大的跳数信息,而后将跳数值加1转发给邻居节点。
(2)每个锚节点根据所记录的其他锚节点的坐标信息和跳数,通过式(1)估算网络平均跳距距离。
式中,j为锚节点i数据表中的其他锚节点号,hopSij为锚节点i和j之间的跳数。
锚节点将所计算的平均跳距广播至整个网络后,未知节点仅记录所收到的第一个平均跳距,并向邻居节点转发,未知节点接收到平均跳距后,跟据所记录的跳数信息,按式(2)估算未知节点 i 到某个锚节点的距离:
(3)设P1(x1,y1), … ,Pn(xn,yn)表示n个锚节点的坐标位置,待定位节点D的位置为(x,y),其与标节点估计距离分别为d1, d2, … , dn-1,可以建立如下方程。
第一个方程组减去第后一个方程后,到得:
用线性方程组表示为AL= b,其中,
采用最小二乘法得到方程组的解为:
设定节点覆盖范围为100x100,总节点数为:100,信标节点数为3到30递增变化,通信半径为15、25、50,未知节点数等于总节点数减去锚节点数。采用归一化平均定位误差作为评价指标:
2. 原始浣熊优化算法
长鼻浣熊优化算法(Cоati Optimization Algorithm,COA)是一种启发式优化算法,灵感来源于长鼻浣熊(Coati)的行为策略。长鼻浣熊优化算法基于长鼻浣熊在觅食过程中的特性和行为模式。长鼻浣熊是一种树栖动物,具有长而灵活的鼻子,用于觅食和捕食。它们通过嗅觉感知周围环境,利用敏锐的视觉和协调的运动能力来寻找食物。
2.1 开发阶段
这个阶段模拟的是浣熊对鬣蜥的攻击策略,对搜索空间中的种群更新的第一个阶段进行建模。在这个策略中,一群浣熊会爬上树,对着一只鬣蜥,并吓唬它,其他几个浣熊会在树下等待鬣蜥掉下来。当鬣蜥掉下来之后,浣熊就会攻击并猎杀它。这个策略使得COA在搜索空间中移动到不同的位置,说明COA在问题解决空间中的全局搜索能力。
在COA的设计中,种群中的最佳位置被假定为鬣蜥的位置。此外,还假设有一般的浣熊能爬上树,另一半在地上等待鬣蜥掉下来。因此,浣熊在树上的位置可以用以下公式描述:
鬣蜥落地后,将其放置在搜索空间中的任意位置。基于这种随机位置,地面上的浣熊可以在搜索空间中移动,用下列公式来描述:
对于每个浣熊计算的新位置,如果它改善了目标函数的值,那么就会被接受,否则,浣熊将保持原先的位置,此过程用以下公式来表示。这个可以被视为贪婪法则。
这里
x
i
P
1
x_{i}^{P1}
xiP1是计算第
i
i
i个浣熊的新位置,
x
i
,
j
P
1
x_{i,j}^{P1}
xi,jP1是它的第
j
j
j维,
F
i
P
1
F_{i}^{P1}
FiP1是它的目标函数值,
r
r
r是
[
0
,
1
]
[0,1]
[0,1]区间内的随机实数。
I
g
u
a
n
a
Iguana
Iguana代表鬣蜥在搜索空间中的位置,这实际上是指种群中最佳个体的位置;
I
g
u
a
n
a
j
Iguana_{j}
Iguanaj是它的第
j
j
j维,
j
j
j是一个整数,从集合{1,2}中随机选择,
I
g
u
a
n
a
G
Iguana^{G}
IguanaG是在地面上的位置,它是随机生成的。
I
g
u
a
n
a
j
G
Iguana_{j}^{G}
IguanajG蠢晰是它的第
j
j
j维,
F
I
g
u
a
n
a
G
F_{Iguana}^{G}
FIguanaG是它的目标函数值。
2.2 探索阶段
在第二阶段即探索阶段的过程中,位置更新模拟的是浣熊在遇到捕食者和逃避捕食者的行为。当食肉动物攻击浣熊时,浣熊就会从它的位置上逃走。浣熊在该策略中的移动使其处于接近其当前位置的安全位置,这代表这COA的局部开发能力。为了模拟这种行为,COA在每个长鼻浣熊个体附近生成一个随机位置,公式如下所示:
与开发阶段中类似,同样使用贪婪选择来决定是替换还是保留原先的位置。
3. 多通信半径和跳距加权策略
3.1 多通信半径策略
设网络通信半径为
R
R
R,将锚节点与邻居节点间分为
m
m
m级,网络中各信标节点与其邻居节点的实际距离为
d
d
d,跳数记为
H
H
H。
H
=
{
1
m
,
0
<
d
≤
R
m
i
m
,
(
i
−
1
)
R
m
<
d
≤
i
R
m
1
,
(
m
−
1
)
R
m
<
d
≤
R
(1)
H=\begin{cases} & \frac{1}{m} , 0<d\le \frac{R}{m} \\ & \frac{i}{m} , \frac{(i-1)R}{m} <d\le \frac{iR}{m} \\ & 1 , \frac{(m-1)R}{m}<d\le R \end{cases}\tag{1}
H=⎩
⎨
⎧m1,0<d≤mRmi,m(i−1)R<d≤miR1,m(m−1)R<d≤R(1)
经过改进后,锚节点与邻居节点的跳数值不再是整数,是更加精确的小数,与距离更接近正比关系,有效地提高了数据的精确性,减小定位误差。
3.2 跳距加权策略
在原始Dvhop定位算法中,设未知节点坐标为
D
(
x
,
y
)
D(x,y)
D(x,y),能与该未知节点通信的锚节点为
A
1
(
x
1
,
y
1
)
,
A
2
(
x
2
,
y
2
)
,
.
.
.
,
A
n
(
x
n
,
y
n
)
A_{1}(x_{1},y_{1}),A_{2}(x_{2},y_{2}),...,A_{n}(x_{n},y_{n})
A1(x1,y1),A2(x2,y2),...,An(xn,yn),这些锚节点的平均每跳距离为
h
o
p
s
i
z
e
1
,
h
o
p
s
i
z
e
2
,
.
.
.
,
h
o
p
s
i
z
e
n
hopsize_{1},hopsize_{2},...,hopsize_{n}
hopsize1,hopsize2,...,hopsizen,到
D
(
x
,
y
)
D(x,y)
D(x,y)的跳数为
h
o
p
1
,
h
o
p
2
,
.
.
.
,
h
o
p
n
hop_{1},hop_{2},...,hop_{n}
hop1,hop2,...,hopn,那么
D
(
x
,
y
)
D(x,y)
D(x,y)到
A
1
(
x
1
,
y
1
)
A_{1}(x_{1},y_{1})
A1(x1,y1)的距离
r
i
r_{i}
ri为:
r
i
=
h
o
p
i
∗
h
o
p
s
i
z
e
(2)
r_{i}=hop_{i}*hopsize\tag{2}
ri=hopi∗hopsize(2)
由于
h
o
p
s
i
z
e
hopsize
hopsize是取离未知节点最近的锚节点的平均跳距作为未知节点到所有锚节点的平均跳距,但是实际网络中节点在不同区域的分布状况是不同的,平均每跳距离也是不同的,原始Dvhop算法用单一的平均跳距不能正确反应网络状况,误差较大。
本文用下面式子来修正未知节点平均跳距:
w
i
=
1
h
o
p
i
∑
j
=
1
n
1
h
o
p
j
(3)
w_{i}=\frac{\frac{1}{hop_{i}} }{\sum_{j=1}^{n}\frac{1}{hop_{j}} }\tag{3}
wi=∑j=1nhopj1hopi1(3)
h
o
p
s
i
z
e
i
=
w
i
∗
h
o
p
s
i
z
e
i
(4)
hopsize_{i}= w_{i}*hopsize_{i}\tag{4}
hopsizei=wi∗hopsizei(4)
通过上面两个式子的处理,每个能与未知节点通信的信标节点的平均跳距都参与计算未知节点平均跳距,每个信标节点平均跳距都根据与未知节点的距离远近进行了加权处理,使得每个未知节点根据平均跳距计算自身坐标时更接近网络的真实情况。
4. 部分代码展示
%% 基于浣熊优化算法的多通信半径和跳距加权DVHop定位算法
%BorderLength ----- 正方形区域的边长,单位m
%NodeAmount ----- 网络节点的个数
%BeaconAmount ----- 信标节点数
%UnAmount ----- 未知节点数
%Sxy ----- 用于存储节点的序号,横坐标,纵坐标的矩阵
%Beacon ----- 信标节点坐标矩阵
%UN ----- 未知节点坐标矩阵
%Distance ----- 未知节点到信标节点距离矩阵
%h ----- 节点间初始跳数矩阵
%X ----- 节点估计坐标初始矩阵,X = [x,y]
%R ----- 节点间的通信距离,一般为10-100m
clear;close all;clc;
BorderLength = 100; %区域边界范围,200x200
NodeAmount = 100; %总的节点数200
BeaconAmount = 30; %信标节点数(锚节点)
UnAmount = NodeAmount - BeaconAmount; %未知节点数
R = 30; %通信距离
%在区域范围内随机生成节点,即总节点数NodeAmount个坐标
AreaC = BorderLength.*rand(2,NodeAmount);%[x1,...,xn;y1,...,yn;];
%为每个点添加序号,如第1,2,3。放在第1行
data = [(1:NodeAmount);AreaC];
%信标坐标信息
BeaconData = data(2:3,1:BeaconAmount);%提取2,3行存放的坐标
UnKnownData = data(2:3,BeaconAmount+1:end);%提取剩下的坐标为未知节点坐标
%画图
figure
plot(BeaconData(1,:),BeaconData(2,:),'r*','linewidth',1.5);%绘制信标(锚节点)
hold on
plot(UnKnownData(1,:),UnKnownData(2,:),'bo','linewidth',1.5)%绘制未知节点
grid on;
title('* 红色信标节点 蓝色未知节点')
%% 多通信半径和跳距加权优化的Dvhop
[X,d]=MRW_Dvhop(BeaconAmount,UnAmount,NodeAmount,R,data,BeaconData);
5. 仿真结果展示
6. 资源获取
可更换其他群智能优化算法,可以获取完整代码资源。