m基于ENM-LAP模型的自组织网络平均最短路径长度matlab仿真分析

目录

1.算法仿真效果

2.算法涉及理论知识概要

3.MATLAB核心程序

4.完整算法代码文件


1.算法仿真效果

matlab2022a仿真结果如下:

 

2.算法涉及理论知识概要

        移动自组织网络不但具有终端能量受限、无线信道状况受链路距离影响等特点,还具有节点位置的选择存在偏好的规律。本节建立基于节点位置偏好的网络拓扑演进模型,并利用复杂网络理论对其进行分析。网络拓扑结构产生过程如下:

   1)增长:网络初始状态时,网络中存在少量的节点,设此时的节点数为 ,这 个节点根据彼此之间的距离和自身的覆盖范围,与周边的节点进行连接。这里,假定每个节点都与自己所有的邻居相连,这样做的目的有两个,第一是降低初始网络的复杂度,使初始节点的连接规则较为简单,第二是尽量避免孤立节点的存在,使网络处在连通图的状态。

       当网络完成初始化后,在每一个时间步向网络中增加一个新节点。新节点的加入是存在节点对位置的偏好性的,即节点将遵照某种网络特点,在一定范围内选择相应的位置出现于网络中。通常定义的网络特点有节点度、节点介数、节点能量或其他物理特性等。在本文中考虑节点度作为节点加入网络的依据。式(1)给出新节点加入网络时遵循的概率表达式:

 式中, 代表新增节点出现在某一个局域区域的概率。本文称局域区域为“选择区域”,其半径称为节点选择半径L。k代表网络中节点的度,  表示选取区域中所有节点的度之和。从表达式中可以看出,新增节点出现的位置是依据选择区域内节点的度之和而定的,其代表了该区域节点的活跃程度,这种活跃程度可以理解为区域内的节点较多,并且连接紧密,这在具有社会属性的移动自组织网络中具有较强的现实意义。

 2)择优连接:当新节点进入网络后,该节点将选择其覆盖范围内的m个节点相连接。假定新加入的节点j连接到某个已存在于网络中的节点i的概率为,这个概率受到节点度、两节点之间的距离,以及节点i的剩余能量E的约束。

 

这里 ,即节点的剩余能量越大,两节点间的距离越近,新节点与其相连的概率越大。这里注意到为提高信道质量,新节点应尽可能的与其较近的节点相连接。 是可调参数,它可以调节能量和距离之间的关系。

       在演化过程中假定网络中任意两个节点之间都可以进行直接或者间接通信,也就是说网络在构建完成的时候是连通的,没有孤立节点的存在。这个假设是合理的,举例来说,在广场上布设一个移动自组织网络,网络中的任意一个人都至少会与一个人进行联系,假如他不与任何人联系,那么他就不属于这个网络。另外假设网络规模足够大,而节点加入网络时的连边较小,在节点的覆盖范围内能够有大于个节点存在。

3.MATLAB核心程序

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

m0    = 9;
m     = 8;
N     = 1000;
SCALE = 500;%
%通信半径
Radius= 150;%

alpha = 0.5;
Ec    = 1/1000;
E0    = 1;



%%
%局域网偏好的网络拓扑
L  = 30;
X  = rand(1,m0)*SCALE;  
Y  = rand(1,m0)*SCALE; 
fed= [];
for i = 1:m0
    for j = 1:m0
        dist(i,j)=sqrt((X(i)-X(j))^2+(Y(i)-Y(j))^2);
    end
end

indx = 0;
NN   = 0;  
while NN < N  
      NN 
      indx = indx + 1;rng(indx);
      %计算度
      if indx == 1
         X2 = X; 
         Y2 = Y;   
      end
      
      
      degree1 = [];
      for i = 1:length(X2)
          xx= 0;
          for j = 1:length(Y2)
              dist=sqrt((X2(i)-X2(j))^2+(Y2(i)-Y2(j))^2);
              if dist <= Radius & dist > 0
                 xx= xx + 1; 
              end
          end
          degree1(i) = xx;
      end    
        
      degree2 = [];
      di      = [];
      for i = 1:length(X2)
          xx= 0;
          for j = 1:length(Y2)
              dist=sqrt((X2(i)-X2(j))^2+(Y2(i)-Y2(j))^2);
              if dist <= Radius & dist > 0 & dist<= L
                 xx= xx + 1; 
              end
              di(i,j) = dist;
          end
          degree2(i) = xx;
      end    
      
      %计算节点剩余能源
      if indx == 1
         E(1:m0) = E0 - Ec;
         tmps    = E;
      else
         E       = tmps - Ec;
         E       = [E,E0 - Ec];
         tmps    = E;
      end
      
      for i = 1:length(X2)
          d      = di(i,:);
          fed(i) = E(i)^alpha*(1-d(i)/sum(d))^(1-alpha);
      end
      for i = 1:length(X2)
          Para2(i) = fed(i)*degree1(i)/(sum(fed.*degree1));%公式3.3连接8个概率
      end
      %选择概率最大的m个进行连接
      [Vp,Ip] = sort(Para2);
      Mindx   = Ip(end-m+1:end);
      
.........................................................
      
      X2    = [X2,Xnew];
      Y2    = [Y2,Ynew];
      NN    = length(X2);
      
      %平均最短路径长度
      Eavg       = mean(E);
      n          = xx;
      ms         = m;
      t          = 0.005*indx;
      k          = mean(degree1);
      Pked       = 1/(m0+t)*(2*n*Eavg./fed*ms/k);
      dt         = 0.1;
      theta      = sum(Pked);
      
      kikj       = ms^2/Eavg*exp(fed/(2*n*Eavg)*dt);

      gamma      = 0.5772;
      LLs        = exp(1/log(theta))*((-1*log(kikj)-log(ms/2)-gamma)/(log((N))+log(ms/2)) + 3/2);
      
      Lens(indx) = mean(LLs);

end

ix = find(abs(Lens)>1000);
Lens(ix)=0;
%平滑
for indx=1:length(Lens)
    if indx <= 256
       Lens2(indx) = mean(Lens(1:indx));
    else
       Lens2(indx) = mean(Lens(indx-256:indx)); 
    end
end
figure;
plot(Lens2,'b','linewidth',1);

if L==30
   save R0.mat Lens2    
end
if L==20
   save R1.mat Lens2    
end
if L==15
   save R2.mat Lens2    
end
if L==10
   save R3.mat Lens2    
end
12_042_m

4.完整算法代码文件

V

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我爱C编程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值