一、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个未知节点的位置,如果一个传感器节点在三个或更多锚节点的传输范围内,则认为它是定位的。这是一个总坐标数为2n二维定位问题。
本文采用RSS该方法估计节点间距。无论采用何种测距方法,都可能出现不准确的测量。N预计未知节点坐标的位置可以表示为优化问题,涉及节点定位误差的目标函数最小化[19]。该问题的目标函数包括N个未知节点和M N相邻锚节点之间的误差平方和表示[19]。
随着RSS三边测量将用于解决WSN定位问题。该方法的原理是基于三个锚节点的已知位置。三个锚节点的传输范围内可以估计未知节点的位置。
估计每个节点到第一个锚点的距离是d?=di ni,其中ni是高斯噪音,di实际距离采用以下等式计算:
最小化的目标函数是计算节点坐标与实际节点坐标之间的平均误差(MSE):
其中di是实际距离,d?i是估计距离(从噪声范围测量获得的值di),M≥3(传感器节点在传输范围R中至少需要三个锚。
由于节点定位中的距离测量存在噪声,采用群体智能元启发式等优化方法,以估计节点之间的足够距离。
二、萤火虫GSO算法
算法的基本思想描述如下:在群体中,每个萤火虫个体随机分布在目标函数定义的空间中。在初始阶段,所有萤火虫都具有相同的荧光素值和动态决策半径。其中,每个萤火虫个体根据所有邻居萤火虫信号在动态决策半径内的强度来决定其移动方向。萤火虫的动态决策半径会随其范围内萤火虫个体的数量而变化,每个萤火虫的荧光素也会随决策半径内萤火虫个体的数量而变化。萤火虫群优化算法无记忆,无目标函数的全局信息和梯度信息,具有计算速度快、调整参数少、易于实现等特点。萤火虫进化过程中,每次迭代都是由、、、、五分别介绍五个部分:
1.萤火虫的部署(初始化)
2.荧光素更新阶段
3.移动概率计算阶段
4.位置更新阶段
5.邻域范围更新阶段
三、代码
%% 初始化参数 domx = [-3, 3; -3, 3]; % 定义域 rho = 0.9; % 荧光挥发因子 gamma = 0.1; % 适应性提取比例 beta = 0.58; % 邻域变化率 nt = 6; % 邻域阀值(邻域萤火虫数) s = 0.03; % 步长 iot0 = 400; % 荧光素的初始浓度 rs = 3; % 感知半径 r0 = 3; % 决策半径 m = size(domx, 1); % 函数空间维数 n = 50; % 萤火虫数量 gaddress = zeros(n, m); % 分配萤火虫地址空间 gvalue = zeros(n, 1); % 适应性存储空间的分配 ioti = zeros(n, 1); % 荧光素光存储空间 rdi = zeros(n, 1); % 萤火虫火虫决策半径存储空间 %% 萤火虫常量初始化 % 初始化地址 for i = 1:m gaddress(:, i) = domx(i, 1) (domx(i, 2)-domx(i, 1))*rand(n, 1); end % 荧光素浓度的初始化 ioti(:, 1) = iot0; % 决策半径的初始化 rdi(:, 1) = r0; iter_max = 500; % 最大迭代次数 t = 1; % 迭代计数器 yy = zeros(iter_max, 1); % 各代最优解 %% 迭代寻优 while t <= iter_max % 更新荧光素浓度 ioti = (1-rho)*ioti gamma*fun(gaddress); % 萤火虫开始移动 for i = 1:n % 在决策半径内找到更多的优势 Nit = []; % 存放萤火虫序号 for j = 1:n if norm(gaddress(j, :)-gaddress(i, :)) < rdi(i) && ioti(i, 1) < ioti(j, 1) Nit(numel(Nit) 1) = j; end end % 找到下一个移动点的开始 if ~isempty(Nit) Nitioti = ioti(Nit, 1); % 选出Nit荧光素 SumNitioti = sum(Nitioti); % Nit荧光素和 Molecular = Nitioti-ioti(i, 1); % 分子 Denominator = SumNitioti-ioti(i, 1); % 分母 Pij = Molecular./Denominator; % 计算Nit所有元素元素的概率 Pij = cumsum(Pij); % 累计 Pij = Pij./Pij(end); % 归一化 Pos = find(rand < Pij); % 确定位置 j = Nit(Pos(1)); % 确定j的位置 % 萤火虫i向j移动一小步 gaddress(i, :) = gaddress(i, :) s*(gaddress(j, :)-gaddress(i, :))/norm(gaddress(j, :)-gaddress(i, :)); % 边界处理(限制范围) gaddress(i, :) = min(gaddress(i, :), domx(1, 2)); gaddress(i, :) = max(gaddress(i, :), domx(1, 1)); % 更新决策半径 rdi(i) = ri(i)+beta*(nt-length(Nit));
if rdi(i, 1) < 0
rdi(i, 1) = 0;
end
if rdi(i, 1) > rs
rdi(i, 1) = rs;
end
end
end
% 每代最优解存入yy数组内
yy(t) = max(fun(gaddress));
% 迭代次数+1
t = t+1;
end
%% 结果显示
gvalue = fun(gaddress); % 求各个萤火虫的值
disp('最大值为:')
num = find(gvalue == max(gvalue)); % 最大值序号
MaxValue = max(gvalue)
disp('最优解为:')
BestAddress = gaddress(num, :)
figure;
plot(yy, 'r', 'linewidth', 2)
xlabel ('迭代次数'); ylabel( '函数值');
title( 'GSO算法各代最优解变化');