【网络覆盖优化】基于matlab的网络覆盖遗传优化问题仿真

建立如下的目标函数:

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

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

 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值