一、WSN模型
1.1 动机
近年来,随着对等网络、云计算、网格计算等分布式环境的发展,无线传感器网络(WSN)应用广泛。无线传感器网络(WSN)它是一种新兴的计算和网络模式,可以定义为一个由称为传感器节点的小、小、昂贵、高智能设备组成的网络。通过无线通信信道交换从监控领域收集的数据,传感器节点位于观测空间的不同位置。发送收集到的数据sink节点,sink节点要么本地处理数据,要么将数据发送到其他处理能力较强的网络。
节点定位是无线传感器网络最基本的挑战之一。节点定位有很多例子,属于NP难以优化。传统的确定性技术和算法在合理的计算时间内无法解决NP-hard问题。在这种情况下,最好采用元启发式算法等不确定性(随机)算法。
群体智能元启发算法模拟了自然界中的生物群体,如鸟和鱼、蜜蜂和蚂蚁、蝙蝠和杜鹃。这些算法是基于四个自组织原则:正反馈、负反馈、多重相互作用和波动。
1.2 无线传感器网络定位问题
定位问题是无线传感器网络中研究最多的问题之一,因为如果传感器节点的位置未知,则无法确定最佳的覆盖、功率和路由。定位是无线传感器网络的关键。全球定位系统可以定位一些传感器节点的位置(GPS)这些节点被称为锚节点或信标节点,而其他传感器节点则随机分布在搜索空间中。这些节点被称为未知节点或传感器节点。由于电池寿命、成本、气候条件等因素,只有少数节点的位置是由于GPS对于坐标,需要使用定位算法来估计其他节点的位置。
针对无线传感器网络中传感器节点的定位,提出了锚节点和未知节点两种定位算法。第一阶段称为测距阶段,算法确定未知节点和相邻锚节点之间的距离。针对无线传感器网络中传感器节点的定位,提出了锚节点和未知节点两种定位算法。第一阶段称为测距阶段,算法确定未知节点与相邻锚节点之间的距离。在第二阶段,通过在第一阶段收集测距信息的位置,如到达角(AOA)、到达时间(TOA)、到达时差(TDOA)、往返时间(RTT)、无线信号强度(RSS)等。
1.3 问题陈述
定位问题的目标是利用由M个传感器节点组成的无线传感器网络M-N当传输范围为R时,估计N个未知节点的位置。如果一个传感器节点在三个或更多锚节点的传输范围内,则认为它是定位的。这是一个总坐标n的二维定位问题。
本文采用RSS该方法估计节点间距。无论采用何种测距方法,都可能出现不准确的测量。N预计未知节点坐标的位置可以表示为优化问题,涉及节点定位误差的目标函数最小化[19]。该问题的目标函数包括N个未知节点和M N相邻锚节点之间的误差平方和表示[19]。
随着RSS三边测量将用于解决WSN定位问题。该方法的原理是基于三个锚节点的已知位置。三个锚节点的传输范围内可以估计未知节点的位置。
估计每个节点到第一个锚点的距离是d?=di ni,其中ni是高斯噪音,di实际距离采用以下等式计算:
最小化的目标函数是计算节点坐标与实际节点坐标之间的平均误差(MSE):
其中di是实际距离,d?i是估计距离(从噪声范围测量获得的值di),M≥3(传感器节点在传输范围R中至少需要三个锚。
由于节点定位中的距离测量存在噪声,采用群体智能元启发式等优化方法,以估计节点之间的足够距离。
二、人工蜂群算法
受蜜蜂有组织觅食过程的启发,Karaboga提出模拟蜜蜂群觅食过程 该算法用于解决多维多峰谷的优化问题。该算法最初被用来寻找、和函数的最小值。 首先,基于蜜蜂介绍觅食的过程特征。图1中发现了两个。A和B。一开始,潜在的工蜂以搜索身份。它不知道蜂房附近的蜂蜜来源。因此,它有以下两个可能的选择: (1)成为一个,自发搜索蜂房附近的区域(见图1所示),具有自己的潜在动力或外部因素S); (2)看完摆尾舞,成为一个人,并开始搜索蜜源(见图1)R)。 定位蜜源后,蜜蜂可以利用自己的能力记住食物源的位置,并立即探索它。蜜蜂现在已经成为一个。雇蜂采集蜂蜜后,从蜜源处返回蜂房,将蜂蜜卸载到蜜室。卸载蜂蜜后,雇蜂有三种选择: (1)放弃已收集的蜜源,成为其他摇尾舞招募的蜜源(UF)。 (2)展示摇尾舞技巧,在蜂房招募同伴,回到原来收集的食物来源(EF1)。 (3)不招募其他蜜蜂,继续探索收集的食物来源(EF2)。
图1 蜜蜂觅食行为图
算法流程
人工蜂群算法由连续四个阶段组成,即、、和。 人工蜂群算法将人工蜂群分为、和第三类,在每次搜索过程中,引导蜜蜂和跟随蜜蜂先后开采食物来源,即寻找最佳解决方案,而侦察蜜蜂则观察其是否处于局部最佳状态。如果处于局部最佳状态,则随机搜索其他可能的食物来源。每个食物来源代表一个可能的问题,食物来源的花蜜量对应于相应的质量(适应性值)f i t fitfit)。 ABC算法流程图如图2所示。
图2 ABC算法流程图
一、初始化阶段
二、引领蜂阶段
3.跟随蜂的阶段
四、侦察蜂阶段
5、食物源
三、代码
CostFunction=@(x) Sphere(x); % Cost Function nVar=5; % Number of Decision Variables VarSize=[1 nVar]; % Decision Variables Matrix Size VarMin=-10; % Decision Variables Lower Bound VarMax= 10; % Decision Variables Upper Bound %% ABC Settings MaxIt=200; % Maximum Number of Iterations nPop=100; % Population Size (Colony Size) nOnlooker=nPop; % Number of Onlooker Bees L=round(0.6*nVar*nPop); % Abandonment Limit Parameter (Trial Limit) a=1; % Acceleration Coefficient Upper Bound %% Initialization % Empty Bee Structure empty_bee.Position=[]; empty_bee.Cost=[]; % Initialize Population Array pop=repmat(empty_bee,nPop,1); % Initialize Best Solution Ever Found BestSol.Cost=inf; % Create Initial Population for i=1:nPop pop(i).Position=unifrnd(VarMin,VarMax,VarSize); pop(i).Cost=CostFunction(pop(i).Position); if pop(i).Cost<=BestSol.Cost BestSol=pop(i); end end % Abandonment Counter C=zeros(nPop,1); % Array to Hold Best Cost Values BestCost=zeros(MaxIt,1); %% ABC Main Loop for it=1:MaxIt % Recruited Bees for i=1:nPop % Choose k randomly, not equal to i K=[1:i-1 i 1:nPop]; k=K(randi([1 numel(K)])); % Define Acceleration Coeff. phi=a*unifrnd(-1, 1,VarSize); % New Bee Position newbee.Position=pop(i).Position phi.*(pop(i.Position-pop(k).Position);
% Evaluation
newbee.Cost=CostFunction(newbee.Position);
% Comparision
if newbee.Cost<=pop(i).Cost
pop(i)=newbee;
else
C(i)=C(i)+1;
end
end
% Calculate Fitness Values and Selection Probabilities
F=zeros(nPop,1);
MeanCost = mean([pop.Cost]);
for i=1:nPop
F(i) = exp(-pop(i).Cost/MeanCost); % Convert Cost to Fitness
end
P=F/sum(F);
% Onlooker Bees
for m=1:nOnlooker
% Select Source Site
i=RouletteWheelSelection(P);
% Choose k randomly, not equal to i
K=[1:i-1 i+1:nPop];
k=K(randi([1 numel(K)]));
% Define Acceleration Coeff.
phi=a*unifrnd(-1,+1,VarSize);
% New Bee Position
newbee.Position=pop(i).Position+phi.*(pop(i).Position-pop(k).Position);
% Evaluation
newbee.Cost=CostFunction(newbee.Position);
% Comparision
if newbee.Cost<=pop(i).Cost
pop(i)=newbee;
else
C(i)=C(i)+1;
end
end
% Scout Bees
for i=1:nPop
if C(i)>=L
pop(i).Position=unifrnd(VarMin,VarMax,VarSize);
pop(i).Cost=CostFunction(pop(i).Position);
C(i)=0;
end
end
% Update Best Solution Ever Found
for i=1:nPop
if pop(i).Cost<=BestSol.Cost
BestSol=pop(i);
end
end
% Store Best Cost Ever Found
BestCost(it)=BestSol.Cost;
% Display Iteration Information
disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
end
%% Results
figure;
%plot(BestCost,'LineWidth',2);
semilogy(BestCost,'LineWidth',2);
xlabel('Iteration');
ylabel('Best Cost');
grid on;
四、参考文献