精华内容
下载资源
问答
  • matlab网络节点覆盖
    2022-04-12 20:42:17

    1 简介

    无线传感器网络在实际场景中的应用,实现数据的远程收集,降低人工成本,拓宽人类认识世界的途径。无线传感器网络目前已广泛运用到各个领域,例如:军事领域、环境监测、自然灾害预报、智能家居等。在无线传感器网络相关技术研究中,传感器节点部署算法的设计是其基本研究内容之一。无线传感器网络的部署问题与其应用需要高度相关,因而针对实际需要设计节点部署算法,是目前关于无线传感器网络覆盖算法研究的重点。引入人工势场中引力斥力概念进行无线传感器​优化部署。​

    2 部分代码

    %% 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:5    for j = 1:5        total_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);%% 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到25        if (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);            else               attractiveforce(i,j) = 0;            end        else           attractiveforce(i,j) = 0;         end        %算上边网格        j = j+1;        if (n+1)<6            if grid_weight(m,n+1)>initnode_num(m,n+1)               attractiveforce(i,j) = grid_weight(m,n+1)-initnode_num(m,n+1);            else               attractiveforce(i,j) = 0;            end        else           attractiveforce(i,j) = 0;         end        %算右边网格        j = j+1;        if (m+1)<6            if grid_weight(m+1,n)>initnode_num(m+1,n)               attractiveforce(i,j) = grid_weight(m+1,n)-initnode_num(m+1,n);            else               attractiveforce(i,j) = 0;            end        else           attractiveforce(i,j) = 0;         end        %算下边网格        j = j+1;        if (n-1)>0            if grid_weight(m,n-1)>initnode_num(m,n-1)               attractiveforce(i,j) = grid_weight(m,n-1)-initnode_num(m,n-1);            else               attractiveforce(i,j) = 0;            end        else           attractiveforce(i,j) = 0;         end    endendattractiveforce%% Calculate Moving Probability and Move Nodes%计算移动概率并移动节点同时将网格中的节点移动到网格中心for m = 1:5    for n = 1:5        k = 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_max                    attractiveforce_max = attractiveforce(k,j);                    row = k;                    col = j;                end            end            initnode_num(m,n) = initnode_num(m,n)-1;  %相应网格节点减1            rejectforce(m,n) = rejectforce(m,n)-1;    %相应的斥力也减1            attractiveforce(row,col) = attractiveforce(row,col)-1; %相应网格引力减1            %下面进行坐标转换,使通过引力获得节点的网格节点数加1            m1 = m;            n1 = n;            if col == 1                m1 = m1-1;            elseif col == 2                n1 = n1+1;            elseif col == 3                m1 = m1+1;            elseif col == 4                n1 = n1-1;            end            initnode_num(m1,n1) = initnode_num(m1,n1)+1;        end    endendgrid_weightinitnode_numrejectforcefigure(2);     %动态调整后的节点部署draw_grid(L);  %画网格for i = 1:5    for j = 1:5        if initnode_num(i,j)~=0        draw_round(((i-0.5)*Rc*sqrt(2)),((j-0.5)*Rc*sqrt(2)));        end    endend%% Detect Uncovered Grid%监测未被覆盖的网格,0表示已经达到权重要求,负数表示未达到权重要求。%定义覆盖成功率=动态调整后获得的权重/设定的总权重uncovered_grid = zeros(5,5);for i = 1:5    for j = 1:5        if initnode_num(i,j)<grid_weight(i,j)            uncovered_grid(i,j) = initnode_num(i,j)-grid_weight(i,j);        else            uncovered_grid(i,j) = 0;        end    endenduncovered_gridadjusted_weight = 0;for i = 1:5    for j =1:5        temp = uncovered_grid(i,j);        adjusted_weight = adjusted_weight+temp;    endendcoveragesuccess_rate = (total_weight+adjusted_weight)/total_weight;coveragesuccess_rate%% Individually Adjust Node%对未达到权重要求的网格进行调整,从仍然存在斥力的网格中吸引节点,由于节点运动%需要消耗大量能量,故节点移动的相对距离不能太远,否则就失去了移动的意义,现规定%只能从相对两个网格中心距离的网格中吸引节点。for i = 1:5    for j = 1:5        k = 0;        while (uncovered_grid(i,j)<0)&&(k ~= 25)            k = 0;            for m = 1:5                for n = 1:5                    k = k+1;                    if (rejectforce(m,n)>0)&&(sqrt((m-i)^2+(n-j)^2)<=(2*sqrt(2)))                        uncovered_grid(i,j) = uncovered_grid(i,j)+1;                        initnode_num(i,j) = initnode_num(i,j)+1;                        rejectforce(m,n) = rejectforce(m,n)-1;                        initnode_num(m,n) = initnode_num(m,n)-1;                         flag = 1;                        break                     end                 end                if flag == 1                    flag = 0;                    break                end            end        end    endenduncovered_grid    initnode_numfigure(3);     %画最终的节点部署draw_grid(L);  %画网格for i = 1:5    for j = 1:5        if initnode_num(i,j)~=0        draw_round(((i-0.5)*Rc*sqrt(2)),((j-0.5)*Rc*sqrt(2)));        end    endend                                                                                                        

    3 仿真结果

    4 参考文献

    [1]陈卓. 基于移动节点的无线传感器网络覆盖漏洞修复算法研究[D]. 北京交通大学.

    博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

    部分理论引用网络文献,若有侵权联系博主删除。

    更多相关内容
  • WSN无线传感器网络节点覆盖优化问题的仿真
  • C'为对应的这些节点覆盖范围。A为每个节点对应的覆盖范围。 基于这个目标函数,我们进行仿真,获得如下的仿真结果: clc; clear; close all; warning off; addpath 'func\GA_toolbox\' addpath 'func\' ...

    建立如下的目标函数:

    表示的是每一代中被选择在工作状态的节点数目。

    C'为对应的这些节点的覆盖范围。A为每个节点对应的覆盖范围。

    基于这个目标函数,我们进行仿真,获得如下的仿真结果:

    clc;
    clear;
    close all;
    warning off;
    addpath 'func\GA_toolbox\'
    addpath 'func\'
    RandStream.setDefaultStream(RandStream('mt19937ar','seed',1));
     
    %目标区域大小
    W       = 10;
    H       = 10;
    %网格划分
    G       = 20;
    %节点数目
    NN      = 200;
    [X,Y,R] = func_initial(W,H,NN);
    axis([0,W,0,H]);
    
    
    %根据遗传算法进行参数的拟合
    MAXGEN = 60;
    NIND   = 200;
    Chrom  = crtbp(NIND,NN*10);
    %14个变量的区间
    Areas  = [zeros(1,NN);
              ones(1,NN)];
    
    FieldD = [rep([10],[1,NN]);Areas;rep([0;0;0;0],[1,NN])];
    
    
    ON_OFF  = zeros(NIND,NN);
    ON_OFFs = zeros(MAXGEN,NN);  
    NUMS    = zeros(MAXGEN,1);
    fgl     = zeros(MAXGEN,1);
    gen = 0;
    for a=1:1:NIND 
        %所有节点均打开,作为其初始状态
        ON_OFF(a,:) = 1;      
        %计算对应的目标值
        [f,C1]      = func_obj(ON_OFF(a,:),X,Y,R,W,H,G);
        J(a,1)      = 1/f;
    end
    
    Objv  = (J+eps);
    gen   = 0; 
    
    while gen < MAXGEN;   
          gen
          FitnV=ranking(Objv);    
          Selch=select('sus',Chrom,FitnV);    
          Selch=recombin('xovsp', Selch,0.99);   
          Selch=mut(Selch,0.01);   
          phen1=bs2rv(Selch,FieldD);   
          for a=1:1:NIND  
              if  gen == 1
                  ON_OFF(a,:) = 1;  
              else
                  ON_OFF(a,:) = (phen1(a,:)>=0.5);  
              end
              %计算对应的目标值
              [f,C1] = func_obj(ON_OFF(a,:),X,Y,R,W,H,G);
              JJ(a,1) = 1/f;
              
          end 
          Objvsel      =(JJ+eps);    
          [Chrom,Objv] = reins(Chrom,Selch,1,1,Objv,Objvsel);   
          gen          = gen+1; 
    
          %保存参数收敛过程和误差收敛过程以及函数值拟合结论
          for ii = 1:NIND
              [f,C1]     = func_obj(ON_OFF(:,ii),X,Y,R,W,H,G);
              flgs(ii)   = C1;
          end
          flgs2 = sort(flgs);
          for ii = 1:NN
              ON_OFFs(gen,ii) = mean(ON_OFF(:,ii))>=0.2;
          end  
          
          Error(gen) = mean(JJ);
          NUMS(gen)  = sum(ON_OFFs(gen,:));
          fgl(gen)   = mean(flgs2(3:end-2));
    end 
    
    figure(1);
    plot([2:5:60],NUMS(2:5:gen),'--rs','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',10);
    xlabel('进化次数');
    ylabel('采用的传感器节点数目');
    grid on;
    
    figure(2);
    plot([2:5:60],fgl(2:5:gen),'--rs','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',10);
    xlabel('进化次数');
    ylabel('节点的有效覆盖率%');
    grid on;
    
    

    A12-16

     

    展开全文
  • %设定覆盖区域为L=40的正方形 global L; L = 5*Rc*sqrt(2); S = L^2; %初始化一个5*5的0矩阵,用来保存随机部署后每个网格中的节点个数 initnode_num = zeros(5,5); node_num = 0; %用于保存节点个数 %设定网格...

    一、二维移动网格法简介

    在这里插入图片描述
    在这里插入图片描述



    二、部分源代码

    %% Program Start
    %清零
    clc ;clear all;close all;
    %设定通信半径为5
    global 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:5
        for j = 1:5
            total_weight_temp =  grid_weight(i,j);
            total_weight = total_weight + total_weight_temp;
        end
    end
    
    %输出总权重
    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 == 0
                initnode_num(1,1) = initnode_num(1,1) + 1;
            else
                for 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;
                    end
                end
            end
        end
        
        if 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;
                end
            end
        end
        
        %非坐标轴上的点
        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;  
                    end
                end
            end
        end
    end
    initnode_num
    
    %% Calculate Reject Force
    %计算斥力
    rejectforce = zeros(5,5);   %初始化5*5的矩阵用于存放网格斥力
    for i = 1:5
        for j = 1:5
            %如果网格中的节点数多于网格权重,则斥力等于两者之差,否则斥力为0
            if 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);
        end
    end
    grid_weight
    initnode_num
    rejectforce
    
    %% 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到25
            if (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);
                else
                   attractiveforce(i,j) = 0;
                end
            else
               attractiveforce(i,j) = 0; 
            end
            %算上边网格
            j = j+1;
            if (n+1)<6
                if grid_weight(m,n+1)>initnode_num(m,n+1)
                   attractiveforce(i,j) = grid_weight(m,n+1)-initnode_num(m,n+1);
                else
                   attractiveforce(i,j) = 0;
                end
            else
               attractiveforce(i,j) = 0; 
            end
            %算右边网格
            j = j+1;
            if (m+1)<6
                if grid_weight(m+1,n)>initnode_num(m+1,n)
                   attractiveforce(i,j) = grid_weight(m+1,n)-initnode_num(m+1,n);
                else
                   attractiveforce(i,j) = 0;
                end
            else
               attractiveforce(i,j) = 0; 
            end
            %算下边网格
            j = j+1;
            if (n-1)>0
                if grid_weight(m,n-1)>initnode_num(m,n-1)
                   attractiveforce(i,j) = grid_weight(m,n-1)-initnode_num(m,n-1);
                else
                   attractiveforce(i,j) = 0;
                end
            else
               attractiveforce(i,j) = 0; 
            end
        end
    end
    attractiveforce
    
    %% Calculate Moving Probability and Move Nodes
    %计算移动概率并移动节点同时将网格中的节点移动到网格中心
    for m = 1:5
        for n = 1:5
            k = 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_max
                        attractiveforce_max = attractiveforce(k,j);
                        row = k;
                        col = j;
                    end
                end
                initnode_num(m,n) = initnode_num(m,n)-1;  %相应网格节点减1
                rejectforce(m,n) = rejectforce(m,n)-1;    %相应的斥力也减1
                attractiveforce(row,col) = attractiveforce(row,col)-1; %相应网格引力减1
                %下面进行坐标转换,使通过引力获得节点的网格节点数加1
                m1 = m;
                n1 = n;
                if col == 1
                    m1 = m1-1;
                elseif col == 2
                    n1 = n1+1;
                elseif col == 3
                    m1 = m1+1;
                elseif col == 4
                    n1 = n1-1;
                end
                initnode_num(m1,n1) = initnode_num(m1,n1)+1;
            end
        end
    end
    grid_weight
    initnode_num
    rejectforce
    
    figure(2);     %动态调整后的节点部署
    draw_grid(L);  %画网格
    for i = 1:5
        for j = 1:5
            if initnode_num(i,j)~=0
            draw_round(((i-0.5)*Rc*sqrt(2)),((j-0.5)*Rc*sqrt(2)));
            end
        end
    end
    %--------------------------------------------
    %程序名  :  i = add1()
    %参数说明:  无参数
    %功能    :  实现加1功能
    %调用方式:  i = add1
    %--------------------------------------------
    function i = add1()
    persistent a
    if isempty(a)  %判断a是否已经赋值(初始化)
        a=0;
    end
        a=a+1;
        if a >25;
            a = 1;
        end
      i=a;
    
    



    三、运行结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述



    四、matlab版本及参考文献

    1 matlab版本
    2014a

    2 参考文献
    [1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
    [2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017

    展开全文
  • 【优化覆盖】移动网格求解无线传感器网络节点覆盖优化问题matlab源码.md
  • %设定覆盖区域为L=40的正方形 global L; L = 5*Rc*sqrt(2); S = L^2; %初始化一个5*5的0矩阵,用来保存随机部署后每个网格中的节点个数 initnode_num = zeros(5,5); node_num = 0; %用于保存节点个数 %设定网格...

    一、二维移动网格法简介

    在这里插入图片描述
    在这里插入图片描述

    二、部分源代码

    %% Program Start
    %清零
    clc ;clear all;close all;
    %设定通信半径为5
    global Rc;
    Rc = 5;
    
    %设定覆盖区域为L=40的正方形
    global L;
    L = 5*Rc*sqrt(2);
    S = L^2;
    
    %初始化一个5*50矩阵,用来保存随机部署后每个网格中的节点个数
    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:5
        for j = 1:5
            total_weight_temp =  grid_weight(i,j);
            total_weight = total_weight + total_weight_temp;
        end
    end
    
    %输出总权重
    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 == 0
                initnode_num(1,1) = initnode_num(1,1) + 1;
            else
                for 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;
                    end
                end
            end
        end
        
        if 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;
                end
            end
        end
        
        %非坐标轴上的点
        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;  
                    end
                end
            end
        end
    end
    initnode_num
    
    %% Calculate Reject Force
    %计算斥力
    rejectforce = zeros(5,5);   %初始化5*5的矩阵用于存放网格斥力
    for i = 1:5
        for j = 1:5
            %如果网格中的节点数多于网格权重,则斥力等于两者之差,否则斥力为0
            if 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);
        end
    end
    grid_weight
    initnode_num
    rejectforce
    
    %% 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,从125
            if (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);
                else
                   attractiveforce(i,j) = 0;
                end
            else
               attractiveforce(i,j) = 0; 
            end
            %算上边网格
            j = j+1;
            if (n+1)<6
                if grid_weight(m,n+1)>initnode_num(m,n+1)
                   attractiveforce(i,j) = grid_weight(m,n+1)-initnode_num(m,n+1);
                else
                   attractiveforce(i,j) = 0;
                end
            else
               attractiveforce(i,j) = 0; 
            end
            %算右边网格
            j = j+1;
            if (m+1)<6
                if grid_weight(m+1,n)>initnode_num(m+1,n)
                   attractiveforce(i,j) = grid_weight(m+1,n)-initnode_num(m+1,n);
                else
                   attractiveforce(i,j) = 0;
                end
            else
               attractiveforce(i,j) = 0; 
            end
            %算下边网格
            j = j+1;
            if (n-1)>0
                if grid_weight(m,n-1)>initnode_num(m,n-1)
                   attractiveforce(i,j) = grid_weight(m,n-1)-initnode_num(m,n-1);
                else
                   attractiveforce(i,j) = 0;
                end
            else
               attractiveforce(i,j) = 0; 
            end
        end
    end
    attractiveforce
    
    %% Calculate Moving Probability and Move Nodes
    %计算移动概率并移动节点同时将网格中的节点移动到网格中心
    for m = 1:5
        for n = 1:5
            k = 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_max
                        attractiveforce_max = attractiveforce(k,j);
                        row = k;
                        col = j;
                    end
                end
                initnode_num(m,n) = initnode_num(m,n)-1;  %相应网格节点减1
                rejectforce(m,n) = rejectforce(m,n)-1;    %相应的斥力也减1
                attractiveforce(row,col) = attractiveforce(row,col)-1; %相应网格引力减1
                %下面进行坐标转换,使通过引力获得节点的网格节点数加1
                m1 = m;
                n1 = n;
                if col == 1
                    m1 = m1-1;
                elseif col == 2
                    n1 = n1+1;
                elseif col == 3
                    m1 = m1+1;
                elseif col == 4
                    n1 = n1-1;
                end
                initnode_num(m1,n1) = initnode_num(m1,n1)+1;
            end
        end
    end
    grid_weight
    initnode_num
    rejectforce
    
    figure(2);     %动态调整后的节点部署
    draw_grid(L);  %画网格
    for i = 1:5
        for j = 1:5
            if initnode_num(i,j)~=0
            draw_round(((i-0.5)*Rc*sqrt(2)),((j-0.5)*Rc*sqrt(2)));
            end
        end
    end
    %--------------------------------------------
    %程序名  :  i = add1()
    %参数说明:  无参数
    %功能    :  实现加1功能
    %调用方式:  i = add1
    %--------------------------------------------
    function i = add1()
    persistent a
    if isempty(a)  %判断a是否已经赋值(初始化)
        a=0;
    end
        a=a+1;
        if a >25;
            a = 1;
        end
      i=a;
    
    

    三、运行结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    四、matlab版本及参考文献

    1 matlab版本
    2014a

    2 参考文献
    [1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
    [2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

    展开全文
  • WSN仿真-MATLAB基于COMPOW协议下的网络连通率和覆盖率,附源代码(注释详尽)。WSN仿真-MATLAB基于COMPOW协议下的网络连通率和覆盖率,附源代码(注释详尽)。
  • 基于网格点覆盖模型的高效传感器网络节点配置算法
  • matlab开发-网络覆盖问题的贪婪算法。解决集合覆盖问题的著名贪心算法,稍作改动
  • 智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真代码介绍
  • 它具有用于在 100 * 100 m^2 区域内部署无线传感器网络matlab 代码(deployment.m 和 draw_circle1.m)。 SN 的范围为 30 m。 共有 29 个节点,其中 5 个节点是恶意节点。 绿色圆圈是真正的节点,红色圆圈是恶意...
  • 各类代码,适合新手学习,电子书免费领取加我
  • 利用matlab仿真最小发射功率下wsn的连通性和覆盖率.docx 江南大学物联网ZK1/5一题目利用MATLAB仿真最小发射功率下WSN的连通性和覆盖率。二目的(1)在固定节点个数的前提下,仿真求得使网络保持连通的最小通信半径...
  • 无线传感器网络节点覆盖的研究,覆盖度可达到100
  • 栅栏覆盖是无线传感器网络中的研究热点,鉴于移动节点的高昂造价以及在移动过程中的巨大能耗,针对高效节能的修复栅栏漏洞问题进行研究.建立静止节点的权重图,并利用迪杰斯特拉算法(Dijkstra)寻找所需最少数目的移动...
  • 该代码可用于执行传感器网络部署,其中网格中有特定数量的节点。 这里,节点数为 100,网格为 400*400,可以相应地更改参数,也可以在您的网络中作为函数使用。
  • 在WSN中, 要实现较高的无线网络传感器节点覆盖率从而减少监测盲点的出现, 就必须加大无线网络传感器节点的分布密度。但是一旦无线网络传感器节点的分布密度太大, 势必产生冗余节点, 甚至导致数据传输发送冲突, 使...
  • WSN无线传感器网络的PSO节点部署仿真+含代码操作演示视频 运行注意事项:使用matlab2021a或者更高版本测试,运行里面的Runme.m文件,不要直接运行子函数文件。运行时注意matlab左侧的当前文件夹窗口必须是当前工程...
  • 基于PSO粒子群优化的WSN无线传感器网络覆盖问题仿真_使用matlab2021a或者以上版本测试
  • 包含了多种粒子群算法的代码,标准的粒子群算法以及改进的粒子群算法的代码,并且将改进的粒子群算法(社会粒子群算法)应用在无线传感器网络的覆盖的优化问题中,这里有针对不同的感知模型,不同的节点覆盖度进行了...
  • -将虚拟力算法用于WSN覆盖,方便改进扩展 -有中文注释,方便理解 -三个图中,左上角的图为优化前的覆盖图,右上角的图为优化后的覆盖图,下面的图为每个节点的移动轨迹 -价格实惠
  • 由于无线传感器网络工作环境复杂,传感器节点更换电源不便,网络覆盖控制问题成为研究核心,它决定了无线传感器网络对监测区域的覆盖率和网络的整体寿命,直接反映出了无线传感器网络的监测质量。采用合理的覆盖策略,...
  • 网络覆盖率是衡量网络覆盖性能最重要的指标,一般定义为所有工作节点覆盖的总范围与目标区域面积大小的比值,其中传感器节点覆盖的范围取所有节点覆盖面积的并集。因此,网络覆盖率总是小于或者等于 1。 G'为...
  • 通过MATLAB仿真实验,还原在 COMPOW 协议下的网络连接和覆盖的关系。 实验内容: (1)假设无线传感器网络随机部署在一个单元广场上。它的通讯和覆盖 半径是已知。确定 COMPOW 协议下网络的公共传输功率。 (2)假设...
  • 指定区域无线传感器网络节点简单覆盖程序。
  • 覆盖问题是无线传感器网络中的重要问题。覆盖问题的解决对于传感器网络中的数据收集、数据聚集、数据查询、数据挖掘等应用具有重要的意义。近年来,研究者们针对不同拓扑结构的无线传感器网络中的不同类型的覆盖问题...
  • 基于雪堆博弈进化的复杂网络节点覆盖方法【技术领域】[0001] 本发明属于网络技术领域,特别涉及一种复杂网络的节点覆盖方法,可用于分布 规划和网络优化,例如城市道路网络中监控设备最优安装位置的选择,投放广告时...
  • 首先该概率模型通过调度覆盖区域内的节点状态来实现对覆盖区域监测,保证了所关注目标节点被传感器节点均匀覆盖的同时又优化了网络资源;其次对不同的覆盖区域利用概率期望值及相应定理求出满足覆盖条件下最少传感器...
  • 提出了一种改进的虚拟力节点部署方法,在传统的基于虚拟力的网络节点部署算法的基础上,利用计算几何中的Delaunay三角剖分定义了节点之间的邻接关系,当前节点所受的虚拟力仅被限制在具有邻接关系的节点之间。...
  • 本文通过视角受限节点传感方向的调整,设计一种分布式算法以判定网络能否提供强栅栏覆盖.算法主要思想是利用节点及邻居节点的物理位置关系构建强/弱栅栏对.另外,本文设计贪心策略优先选择邻居节点数多的候选节点构建...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,595
精华内容 638
关键字:

matlab网络节点覆盖

matlab 订阅