600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 【优化覆盖】基于matlab移动网格求解无线传感器网络节点覆盖优化问题【含Matlab源码

【优化覆盖】基于matlab移动网格求解无线传感器网络节点覆盖优化问题【含Matlab源码

时间:2023-03-09 18:58:03

相关推荐

【优化覆盖】基于matlab移动网格求解无线传感器网络节点覆盖优化问题【含Matlab源码

一、二维移动网格法简介

二、部分源代码

%% Program Start%清零clc ;clear all;close all;%设定通信半径为5global Rc;Rc = 5;%设定覆盖区域为L=40的正方形global L;L = 5*Rc*sqrt(2);S = L^2;%初始化一个5*5的0矩阵,用来保存随机部署后每个网格中的节点个数initnode_num = zeros(5,5);node_num = 0; %用于保存节点个数%设定网格权重grid_weight = [2,1,3,1,1;3,2,2,1,2;4,1,2,2,1;1,2,2,3,1;2,5,1,2,1];%计算总权重total_weight = 0;for i = 1:5for j = 1:5total_weight_temp = grid_weight(i,j);total_weight = total_weight + total_weight_temp;endend%输出总权重total_weight grid_weight%% Random Deployment%随机产生坐标,作为节点的初始位置random_x = randi([0,ceil(L)],1,(total_weight+10));random_y = randi([0,ceil(L)],1,(total_weight+10));figure(1);draw_grid(L); %画网格for i = 1:(total_weight+10)x1 = random_x(i);y1 = random_y(i);draw_round(x1,y1); %节点随机部署图end%% Count Initial Nodes%计算初始化后每个单元格中的节点个数for i = 1:(total_weight+10)temp_x = random_x(i);temp_y = random_y(i);%首先判断坐标轴上的点if temp_x == 0 %y轴上的点if temp_y == 0initnode_num(1,1) = initnode_num(1,1) + 1;elsefor n = 1:L/(Rc*sqrt(2))if (temp_y>(n-1)*Rc*sqrt(2))&&((temp_y<n*Rc*sqrt(2))||(temp_y==n*Rc*sqrt(2)))initnode_num(1,n) = initnode_num(1,n)+1;endendendendif temp_y == 0 %x轴上的点for n = 1:L/(Rc*sqrt(2))if (temp_x>(n-1)*Rc*sqrt(2))&&((temp_x<n*Rc*sqrt(2))||(temp_x==n*Rc*sqrt(2)))initnode_num(n,1) = initnode_num(n,1)+1;endendend%非坐标轴上的点if (temp_x~=0)||(temp_y~=0)for m = 1:L/(Rc*sqrt(2))for n = 1:L/(Rc*sqrt(2))if ((temp_x>(m-1)*Rc*sqrt(2))&&((temp_x<m*Rc*sqrt(2))||(temp_x==m*Rc*sqrt(2))))&&((temp_y>(n-1)*Rc*sqrt(2))&&((temp_y<n*Rc*sqrt(2))||(temp_y==n*Rc*sqrt(2))))initnode_num(m,n) = initnode_num(m,n)+1; endendendendendinitnode_num%% Calculate Reject Force%计算斥力rejectforce = zeros(5,5); %初始化5*5的矩阵用于存放网格斥力for i = 1:5for j = 1:5%如果网格中的节点数多于网格权重,则斥力等于两者之差,否则斥力为0if initnode_num(i,j)>grid_weight(i,j)rejectforce(i,j) = initnode_num(i,j)-grid_weight(i,j); else rejectforce(i,j) = 0;end%rejectforce(i,j) = initnode_num(i,j)-grid_weight(i,j);endendgrid_weightinitnode_numrejectforce%% Calculate Attractive Force%计算引力attractiveforce = zeros(25,4); %初始化25*4的矩阵,存放每个网格受到的引力,由于每个网格周围有四个网格%列坐标从小到大表示左、上、右、下,处在边缘的网格若周围没有其他网格,用0表示,即不受%此方向的引力。另外,第一行代表(1,1)网格,第二行代表(1,2),……,第六行代表%(2,1)网格,第七行代表(2,2)网格,……,最后一行代表(5,5)网格 for m = 1:5 %m为x轴坐标for n = 1:5 %n为y轴坐标j = 1;i = add1; %i自动加1,从1到25if (m-1)>0%算左边网格if grid_weight(m-1,n)>initnode_num(m-1,n)attractiveforce(i,j) = grid_weight(m-1,n)-initnode_num(m-1,n);elseattractiveforce(i,j) = 0;endelseattractiveforce(i,j) = 0; end%算上边网格j = j+1;if (n+1)<6if grid_weight(m,n+1)>initnode_num(m,n+1)attractiveforce(i,j) = grid_weight(m,n+1)-initnode_num(m,n+1);elseattractiveforce(i,j) = 0;endelseattractiveforce(i,j) = 0; end%算右边网格j = j+1;if (m+1)<6if grid_weight(m+1,n)>initnode_num(m+1,n)attractiveforce(i,j) = grid_weight(m+1,n)-initnode_num(m+1,n);elseattractiveforce(i,j) = 0;endelseattractiveforce(i,j) = 0; end%算下边网格j = j+1;if (n-1)>0if grid_weight(m,n-1)>initnode_num(m,n-1)attractiveforce(i,j) = grid_weight(m,n-1)-initnode_num(m,n-1);elseattractiveforce(i,j) = 0;endelseattractiveforce(i,j) = 0; endendendattractiveforce%% Calculate Moving Probability and Move Nodes%计算移动概率并移动节点同时将网格中的节点移动到网格中心for m = 1:5for n = 1:5k = add1;j = 1;while ((rejectforce(m,n)>0)&&((attractiveforce(k,1)~=0)||(attractiveforce(k,2)~=0)||(attractiveforce(k,3)~=0)||(attractiveforce(k,4)~=0)))%当中心网格斥力大于0&&周围引力至少有一个非0时成立j = 1;attractiveforce_max = attractiveforce(k,j);row = k;col = j;for j = 2:4 %求最大引力,即求得最大移动概率if attractiveforce(k,j)>attractiveforce_maxattractiveforce_max = attractiveforce(k,j);row = k;col = j;endendinitnode_num(m,n) = initnode_num(m,n)-1; %相应网格节点减1rejectforce(m,n) = rejectforce(m,n)-1; %相应的斥力也减1attractiveforce(row,col) = attractiveforce(row,col)-1; %相应网格引力减1%下面进行坐标转换,使通过引力获得节点的网格节点数加1m1 = m;n1 = n;if col == 1m1 = m1-1;elseif col == 2n1 = n1+1;elseif col == 3m1 = m1+1;elseif col == 4n1 = n1-1;endinitnode_num(m1,n1) = initnode_num(m1,n1)+1;endendendgrid_weightinitnode_numrejectforcefigure(2);%动态调整后的节点部署draw_grid(L); %画网格for i = 1:5for j = 1:5if initnode_num(i,j)~=0draw_round(((i-0.5)*Rc*sqrt(2)),((j-0.5)*Rc*sqrt(2)));endendend%--------------------------------------------%程序名 : i = add1()%参数说明: 无参数%功能 : 实现加1功能%调用方式: i = add1%--------------------------------------------function i = add1()persistent aif isempty(a) %判断a是否已经赋值(初始化)a=0;enda=a+1;if a >25;a = 1;endi=a;

三、运行结果

四、matlab版本及参考文献

1 matlab版本

a

2 参考文献

[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,.

[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,.

【优化覆盖】基于matlab移动网格求解无线传感器网络节点覆盖优化问题【含Matlab源码 1300期】

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