欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

使用Matlab模拟自组织网络中基于节点位置偏好的度分布

最编程 2024-01-13 20:12:13
...

1.算法仿真效果

matlab2022a仿真结果如下:

1.png

2.png

3.png

4.png  

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

      移动自组织(Ad Hoc)网络是一种多跳的临时性自治系统,它的原型是美国早在1968年建立的ALOHA网络和之后于1973提出的PR(Packet Radio)网络。ALOHA网络需要固定的基站,网络中的每一个节点都必须和其它所有节点直接连接才能互相通信,是一种单跳网络。直到PR网络,才出现了真正意义上的多跳网络,网络中的各个节点不需要直接连接,而是能够通过中继的方式,在两个距离很远而无法直接通信的节点之间传送信息。PR网络被广泛应用于军事领域。IEEE在开发802.11标准时,提出将PR网络改名为Ad Hoc网络,也即今天我们常说的移动自组织网络。

 

       移动自组织网络。一方面,网络信息交换采用了计算机网络中的分组交换机制,而不是电话交换网中的电路交换机制;另一方面,用户终端是可以移动的便携式终端,如笔记本、PDA等,用户可以随时处于移动或者静止状态。无线自组网中的每个用户终端都兼有路由器和主机两种功能。作为主机,终端可以运行各种面向用户的应用程序;作为路由器,终端需要运行相应的路由协议,这种分布式控制和无中心的网络结构能够在部分通信网络遭到破坏后维持剩余的通信能力,具有很强的鲁棒性和抗毁性。

 

       作为一种分布式网络,移动自组织网络是一种自治、多跳网络,整个网络没有固定的基础设施,能够在不能利用或者不便利用现有网络基础设施(如基站、AP)的情况下,提供终端之间的相互通信。由于终端的发射功率和无线覆盖范围有限,因此距离较远的两个终端如果要进行通信就必须借助于其它节点进行分组转发,这样节点之间构成了一种无线多跳网络。

 

       网络中的移动终端具有路由和分组转发功能,可以通过无线连接构成任意的网络拓扑。移动自组织网络既可以作为单独的网络独立工作,也可以以末端子网的形式接入现有网络,如Internet网络和蜂窝网。

 

        度分布是图论和网络理论中的概念。一个图(或网络)由一些顶点(节点)和连接它们的边(连结)构成。每个顶点(节点)连出的所有边(连结)的数量就是这个顶点(节点)的度。度分布是对一个图(网络)中顶点(节点)度数的总体描述。对于随机图,度分布指的是图中顶点度数的概率分布。

       一个节点的度通常定义为该节点连接的所有连接(边) 的总和。 网络的度分布即为网络中节点的度的概率分布或频率分布(统称分布)。 一个节点的度k 通常定义为该节点连接的所有连接(边) 的总和,写成数学表达式为:

d ( i) = Σj ∈Gδij .

 

        度分布是图论和(复杂)网络理论中都存在的概念。首先介绍图的概念。一个图是一个由两个集合和构成的二元组。集合一般由有限个元素构成,其中的元素被称为图的顶点,集合是由各元素构成的集合。集合中的每个元素都是一个非负整数。在无向图中,图中的每个元素,由图中的两个顶点和连接有条边构成。在有向图中,图中的每个元素,由图中的顶点以及有条连向顶点的边构成。并且,如果一个图中所有的都不超过1,那么称图是简单图.

 

3.MATLAB核心程序 `%%

%局域网偏好的网络拓扑

L  = 50;

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  

      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);

      

      %新节点加入网络时遵循的概率表达式

      Parea = (degree2)/sum(degree1);

      [V,I] = max(Parea);

      indx2 = find(Parea>=0.5*V);

      %Nr    = randperm(length(indx2));

      Nr    = floor(length(indx2)*rand)+1;

      if rand > max([0.5,sum(Parea(1:m))])%加入网络时遵循的概率表达式

         if rand > Vp(end-m+1)

            Xnew = X2(indx2(Nr))+Lcos(2pi*rand);

            Ynew = Y2(indx2(Nr))+Lsin(2pi*rand);

         else

            Xnew  = rand(1,1)*SCALE;

            Ynew  = rand(1,1)*SCALE;

         end

      else

         Xnew  = rand(1,1)*SCALE;  

         Ynew  = rand(1,1)*SCALE;  

      end

      

      X2    = [X2,Xnew];

      Y2    = [Y2,Ynew];

      NN    = length(X2);

end

 

subplot(133);

plot(X2,Y2,'b.');

title('局域网偏好的网络拓扑,L=50');

axis([0,500,0,500]);`