【可更换其他算法,获取资源
请见文章第6节:资源获取】
1. 麻雀搜索算法
此处略。
2. 三维WSN节点感知模型
本文所使用的模型是传感器部署研究中最常见的一种感知模型-布尔感知模型。布尔感知模型比较简单,定义如下:N节点的感知范围是以节点N为圆心,以Rs为半径的一个球形区域,其中Rs是由节点的物理特性决定的,名为感知半径。只有落在该球形空间内的目标点p才能视为被节点N覆盖。这个模型也被称为0-1感知模型。
首先,假设目标监测网络为正方体区域,监测区域内分布有若干节点,每个节点的覆盖范围为以节点位置为球心,监测半径为Rs的球体;其次,将目标监测区域进行离散化处理,形成若干监测点,根据0-1感知模型计算各检测点的感知概率;最后,通过计算覆盖监测点数占整个检测区域总点数来计算网络覆盖率大小。
3. 异构WSN覆盖问题
传统WSN覆盖问题中,传感器节点的通信半径和覆盖区域都是一致的,而在异构WSN覆盖问题中,传感器的通信半径和覆盖区域有所差别。本博客仿真中,设置了两种不同的传感器节点,虽然这两种传感器节点的覆盖区域形状都是球形,但是他们的通信半径有区别。
这种研究不同类型传感器节点覆盖率优化的问题就叫做异构WSN覆盖优化问题。
4. 部分代码展示
clear;
close all;
clc;
FoodNumber=30; %种群数量
maxCycle=300; %最大迭代次数
dim=40; %待优化参数数量
P_percent = 0.2; %发现者比例
pNum = round( FoodNumber * P_percent ); %发现者数量
objfun='WSNcover';
c=0; %下限
d=50; %上限
R=10; %大通信半径
r=8; %小通信半径
lb= c.*ones( 1,dim ); % Lower limit/bounds/ a vector %c.*ones(1,dim)为生成数全为c的行向量
ub= d.*ones( 1,dim ); % Upper limit/bounds/ a vector %lb为1行dim列的元素全为c的行向量
for i = 1 : FoodNumber
FoodsX( i, : ) = lb + (ub - lb) .* rand( 1, dim );
FoodsY( i, : ) = lb + (ub - lb) .* rand( 1, dim );
FoodsZ( i, : ) = lb + (ub - lb) .* rand( 1, dim );
ObjVal(i)=feval(objfun,FoodsX( i, : ),FoodsY( i, : ),FoodsZ( i, : ),dim,R,r,d);% 得到1行20列的向量,20个蜜源的覆盖率
Fitness(i)=calculateFitness(-ObjVal(i));% 得到适应度值,覆盖率越高,适应度值越高
end
pFit = Fitness;
pObj = ObjVal;
pX = FoodsX;
pY = FoodsY;
pZ = FoodsZ;
[ ObjMax, ObjbestI ] = max( ObjVal );
[ fMax, fbestI ] = max( Fitness );
bestX = FoodsX( fbestI, : );
bestY = FoodsY( fbestI, : );
bestZ = FoodsZ( fbestI, : );
HistoryObjMax = [1,maxCycle];
5. 仿真结果展示
红色:通信半径为10
蓝色:通信半径为8
6. 资源获取
可以获取完整代码资源。👇👇👇👀名片