【W(wǎng)SN優(yōu)化】基于粒子群算法求解傳感器覆蓋優(yōu)化問題含Matlab源碼
1 簡(jiǎn)介
無(wú)線傳感器網(wǎng)絡(luò)(Wireless Sensor Network-WSN)作為物聯(lián)網(wǎng)的"末梢神經(jīng)",是一種綜合數(shù)據(jù)感知與采集,融合處理和信息傳輸功能于一體的無(wú)線自組織智能群體型網(wǎng)絡(luò)信息系統(tǒng),其典型的應(yīng)用就是監(jiān)測(cè)某個(gè)目標(biāo)區(qū)域,采集人們所需的各種客觀世界的物理信息,實(shí)際情況中,大部分監(jiān)測(cè)區(qū)域都是人類無(wú)法直接到達(dá)進(jìn)行確定性部署的,但可以通過隨機(jī)散播傳感節(jié)點(diǎn)以自組織的方式形成WSN.傳感器節(jié)點(diǎn)其物理結(jié)構(gòu)固有的特性導(dǎo)致節(jié)點(diǎn)感知范圍是有限的,故不能有效地保證監(jiān)測(cè)區(qū)域的覆蓋率達(dá)到應(yīng)用的需求,因此WSN要想得到廣泛的實(shí)際應(yīng)用,覆蓋率必須得到保證,這關(guān)系著網(wǎng)絡(luò)的性能及服務(wù)質(zhì)量.
2 部分代碼
close all
clear
clc
addpath(genpath(cd))
warning('off')
%%
N=10; ? ? ? ? ? ? ? ? ? ? ? % 節(jié)點(diǎn)數(shù)
area=[10,10]; ? ? ? ? ? ? ?% 以米為單位的節(jié)點(diǎn)部署區(qū)域
Trange=2; ? ? ? ? ? ? ? ? ? % 傳感器節(jié)點(diǎn)的傳輸范圍(以米為單位)
nodes.pos=area(1).*rand(N,2);% 節(jié)點(diǎn)地理位置
lambda=0.125; ? ? ? ? ? ? ? ?% 以米為單位的信號(hào)波長(zhǎng)
nodes.major = Trange; ? ? ? ?% 橢圓范圍的長(zhǎng)軸,以米為單位
nodes.minor = lambda*Trange; ?% 橢圓范圍的短軸,以米為單位
% redundantNo=9; ? ? ? ? ? ? ? % 愈合節(jié)點(diǎn)數(shù)
redundantNo=round(10*N/100);
%% 繪制節(jié)點(diǎn)部署
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é)點(diǎn)的初始放置')
%% 繪制德勞內(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é)點(diǎn)初始位置的覆蓋孔')
hold on
triplot(TRI,nodes.pos(:,1),nodes.pos(:,2))
%%孔洞檢測(cè)
[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é)點(diǎn)的位置以覆蓋孔
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é)點(diǎn)的位置
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é)點(diǎn)的優(yōu)化位置')
3 仿真結(jié)果



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