【W(wǎng)SN優(yōu)化】基于粒子群算法求解傳感器覆蓋優(yōu)化問題含Matlab源碼
1 簡介
無線傳感器網(wǎng)絡(luò)(Wireless Sensor Network-WSN)作為物聯(lián)網(wǎng)的"末梢神經(jīng)",是一種綜合數(shù)據(jù)感知與采集,融合處理和信息傳輸功能于一體的無線自組織智能群體型網(wǎng)絡(luò)信息系統(tǒng),其典型的應(yīng)用就是監(jiān)測某個目標(biāo)區(qū)域,采集人們所需的各種客觀世界的物理信息,實際情況中,大部分監(jiān)測區(qū)域都是人類無法直接到達進行確定性部署的,但可以通過隨機散播傳感節(jié)點以自組織的方式形成WSN.傳感器節(jié)點其物理結(jié)構(gòu)固有的特性導(dǎo)致節(jié)點感知范圍是有限的,故不能有效地保證監(jiān)測區(qū)域的覆蓋率達到應(yīng)用的需求,因此WSN要想得到廣泛的實際應(yīng)用,覆蓋率必須得到保證,這關(guān)系著網(wǎng)絡(luò)的性能及服務(wù)質(zhì)量.
2 部分代碼
close all
clear
clc
addpath(genpath(cd))
warning('off')
%%
N=10; ? ? ? ? ? ? ? ? ? ? ? % 節(jié)點數(shù)
area=[10,10]; ? ? ? ? ? ? ?% 以米為單位的節(jié)點部署區(qū)域
Trange=2; ? ? ? ? ? ? ? ? ? % 傳感器節(jié)點的傳輸范圍(以米為單位)
nodes.pos=area(1).*rand(N,2);% 節(jié)點地理位置
lambda=0.125; ? ? ? ? ? ? ? ?% 以米為單位的信號波長
nodes.major = Trange; ? ? ? ?% 橢圓范圍的長軸,以米為單位
nodes.minor = lambda*Trange; ?% 橢圓范圍的短軸,以米為單位
% redundantNo=9; ? ? ? ? ? ? ? % 愈合節(jié)點數(shù)
redundantNo=round(10*N/100);
%% 繪制節(jié)點部署
cnt=1;
for ii=1:N ? ? ?
? ?for jj=1:N
? ? ? ?if ii~=jj
? ? ? ? ? ?nodes.distance(ii,jj)=pdist([nodes.pos(ii,:);nodes.pos(jj,:)]);
? ? ? ? ? ?if nodes.distance(ii,jj)<Trange || nodes.distance(ii,jj)==Trange
? ? ? ? ? ? ? ?nodes.inrange(ii,jj)=1;
? ? ? ? ? ?else
? ? ? ? ? ? ? ?nodes.inrange(ii,jj)=0;
? ? ? ? ? ?end
? ? ? ?end
? ?end
end
figure
F5=plot(nodes.pos(:,1),nodes.pos(:,2),'.','color','r');
hold on
for ii=1:N ? ? ? ? ? ? ? ? ? % 繪制圓形傳輸范圍
? ?[nodes.circle.x(ii,:),nodes.circle.y(ii,:)]=circle(nodes.pos(ii,1),nodes.pos(ii,2),Trange);
? ?F6=fill(nodes.circle.x(ii,:),nodes.circle.y(ii,:),[0.25,0.25,0.25]);
? ?alpha 0.3
? ?hold on
end
axis on
xlabel('x(m)')
ylabel('y(m)')
title('具有圓形傳輸范圍的節(jié)點的初始放置')
%% 繪制德勞內(nèi)三角形
TRI = delaunay(nodes.pos(:,1),nodes.pos(:,2));
figure(2)
F5 = plot(nodes.pos(:,1),nodes.pos(:,2),'.','color','r');
hold on
for ii=1:N ? ? ? ? ? ? ? ? ? % 繪制圓形傳輸范圍
? ?[nodes.circle.x(ii,:),nodes.circle.y(ii,:)]=circle(nodes.pos(ii,1),nodes.pos(ii,2),Trange);
? ?F6=fill(nodes.circle.x(ii,:),nodes.circle.y(ii,:),[0.25,0.25,0.25]);
? ?alpha 0.3
? ?hold on
end
axis on
xlabel('x(m)')
ylabel('y(m)')
title('節(jié)點初始位置的覆蓋孔')
hold on
triplot(TRI,nodes.pos(:,1),nodes.pos(:,2))
%%孔洞檢測
[holeDetected.circle,Circmcenter.circle,circumradius.circle]=holeDetection(TRI,nodes,F5,F6,Trange,area,2,1);
display(['--> No of detected Holes for Circular = ',num2str(numel(find(holeDetected.circle)))])
%% PSO 優(yōu)化其余 wsn 節(jié)點的位置以覆蓋孔
nvars = 2*(N);
fun=@(x)objf(x,Trange,area);
lb=zeros(nvars,1);
ub=area(1).*ones(nvars,1);
options = optimoptions(@particleswarm,'Display','iter','MaxIterations',100,'PlotFcn','pswplotbestf');
[x,fval] = particleswarm(fun,nvars,lb,ub,options);
finalPos = reshape(x,[numel(x)/2,2]);
% 繪制最終調(diào)整的節(jié)點的位置
figure
plot(finalPos(:,1),finalPos(:,2),'o','color','r');
hold on
for ii=1:N ? ? ? ? ? ? ? ? % 繪制圓形傳輸范圍
? ?[finalcircle.x(ii,:),finalcircle.y(ii,:)]=circle(finalPos(ii,1),finalPos(ii,2),Trange);
? ?fill(finalcircle.x(ii,:),finalcircle.y(ii,:),[0.25,0.25,0.25]);
? ?alpha 0.3
? ?hold on
end
axis on
xlabel('x(m)')
ylabel('y(m)')
title('具有圓形傳輸范圍的節(jié)點的優(yōu)化位置')
3 仿真結(jié)果



4 參考文獻
[1]史朝亞. 基于PSO算法無線傳感器網(wǎng)絡(luò)覆蓋優(yōu)化的研究[D]. 南京理工大學(xué).
博主簡介:擅長智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測、信號處理、元胞自動機、圖像處理、路徑規(guī)劃、無人機等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻,若有侵權(quán)聯(lián)系博主刪除。
