您现在的位置:首页 >> 网络协议 >> 内容

基于虚拟力算法的WSN无线传感器网络覆盖优化matlab仿真

时间:2023/2/18 18:17:27 点击:

  核心提示:A376,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZJWWmZZw

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览


3.算法概述

        无线传感器网络(Wireless Sensor Networks,WSNs)是一种分布式传感网络,嵌入了传感器的智能设备感测、通信、处理、收集数据,然后通过互联网将数据传输给监测者进行进一步分析,是通过无线通信方式形成的一个多跳自组织网络,可用于大规模物联网应用。由于其传感器通过无线方式通信,所以位置可以随时更改,非常灵活。WSN的覆盖优化问题可以描述为在规定的监测区域内,保证传感器网络连通情况下的节点部署问题。

4.部分源码

...................................................................................

xlabel('X/m');ylabel('Y/m');

%legend('要监测的区域',['传感器节点(','\fontsize{12}\bf',num2str(N),'\fontsize{10}\rm个)的位置'],' 传感器节点的感知范围');

hold on

plot([XMIN XMAX],[YMIN YMIN],'k','linewidth',1.5);

hold on

plot([XMIN XMIN],[YMIN YMAX],'k','linewidth',1.5);

hold on

plot([XMAX XMAX],[YMIN YMAX],'k','linewidth',1.5);

hold on

plot([XMIN XMAX],[YMAX YMAX],'k','linewidth',1.5);%把四个顶点连接起来组成一个监测区域

%--------------------------------虚拟力算法---------------------------------

%------------先对区域进行离散化---------

deta=2;%网络大小

x1=XMIN:deta:XMAX;

y1=YMIN:deta:YMAX;

[xx,yy]=meshgrid(x1,y1);

[m,n]=size(xx);

K=m*n; %总的网格点数目

xx1=reshape(xx,K,1);%网格点的横坐标

yy1=reshape(yy,K,1);%网格点的纵坐标

%hold on

%plot(xx1,yy1,'g*')

%----------------计算起初的网络覆盖率-----------------------------------------------------

[no_cover,summ,k1]=compute_cover(xx1,yy1,x,r); 

%no_cover存储没有被覆盖的格点位置,k1为求被覆盖的格点,summ为被覆盖的格点数;

q(1,1)=summ/K;

%-------------------------------------------------------

figure,

fill(xm(:,1),xm(:,2),[0.8,0.8,0.8]); %填充监测区域

hold on

plot(x(:,1),x(:,2),'go','markerfacecolor','r','linewidth',6); %传感器节点位置

for i=1:N

    text(x(i,1)+3,x(i,2),['\fontsize{8}\rm',num2str(i)]); %标出传感器节点位置

end

axis([0 1000 0 900]);

xlabel('X/m');ylabel('Y/m');

%----------------------

R=2*r;    %传感器节点的通信半径

maxiter=100; %最大迭代次数

max_step=2.5; %传感器节点移动的最大步长(在格点作用下的最大步长)

max_sensor=3.5; %传感器节点移动的最大步长(在传感器节点作用下的最大步长)

.....................................................................

 

N=40;%传感器节点个数

XMAX=900;%区域总长度

XMIN=100;

YMAX=800;%区域总宽度

YMIN=100;%区域总宽度

figure,

for j=1:kp

    x=xp{j,1};

%figure,

subplot(2,3,j)

xm=[XMIN YMIN;XMIN YMAX;XMAX YMAX;XMAX YMIN];

fill(xm(:,1),xm(:,2),[0.8,0.8,0.8]);

hold on

plot(x(:,1),x(:,2),'r.','linewidth',5);

r=90; %传感器节点的感知半径

w=0:pi/50:2*pi;

for i=1:N

    x1=x(i,1)+r*cos(w);

    y1=x(i,2)+r*sin(w);

    hold on

    plot(x1,y1,'k');

    text(x(i,1)+3,x(i,2),['\fontsize{8}\rm',num2str(i)]);

    hold on

    fill(x1,y1,'y')

end

axis([0 1000 0 900]);

xlabel('X/m');ylabel('Y/m');

hold on

plot([XMIN XMAX],[YMIN YMIN],'g','linewidth',2);

hold on

plot([XMIN XMIN],[YMIN YMAX],'g','linewidth',2);

hold on

plot([XMAX XMAX],[YMIN YMAX],'g','linewidth',2);

hold on

plot([XMIN XMAX],[YMAX YMAX],'g','linewidth',2);

end

%-------------------------画覆盖率曲线图----------------------------

load('q.mat');

subplot(2,3,6)

plot(1:length(q),q(:,1),'g','linewidth',2);

grid on

xlabel('迭代次数');ylabel('网络覆盖率');

grid on

xlabel('迭代次数');ylabel('网络覆盖率');

set(gca,'xTick',[1:round(length(q)/10):length(q)])

axis([1 length(q) min(q)-0.05 1.005]);

A376

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168