600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 【布局优化】基于萤火虫算法的无线传感器网(WSN)覆盖优化Matlab源码

【布局优化】基于萤火虫算法的无线传感器网(WSN)覆盖优化Matlab源码

时间:2021-08-09 01:18:45

相关推荐

【布局优化】基于萤火虫算法的无线传感器网(WSN)覆盖优化Matlab源码

一、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中的定位问题。该方法的原理是基于三个锚节点的已知位置。未知节点的位置可以在三个锚节点的传输范围内估计。

每个节点估计到第i个锚点的距离为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:mgaddress(:, 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:nif norm(gaddress(j, :)-gaddress(i, :)) < rdi(i) && ioti(i, 1) < ioti(j, 1)Nit(numel(Nit)+1) = j;endend% 找下一步移动的点开始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) = rdi(i)+beta*(nt-length(Nit));if rdi(i, 1) < 0rdi(i, 1) = 0;endif rdi(i, 1) > rsrdi(i, 1) = rs;endendend% 每代最优解存入yy数组内yy(t) = max(fun(gaddress));% 迭代次数+1t = 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算法各代最优解变化');

四、参考文献

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。