m 負の原子価環 N アルゴリズムに基づく無線センサー ネットワーク性能の Matlab シミュレーション

目次

1.アルゴリズムシミュレーション効果

2. アルゴリズムには理論的知識の概要が含まれます

3. MATLAB コア プログラム

4. 完全なアルゴリズム コード ファイル


1.アルゴリズムシミュレーション効果

matlab2022a のシミュレーション結果は次のとおりです。

 

 

2. アルゴリズムには理論的知識の概要が含まれます

負の環の定義: 負の環とは、重みの合計が負の環を指します。負のサイクルはグラフの最短経路の計算を無限ループに陥らせるため、負のサイクルを持つグラフには最短経路はありません。

負のリングの計算方法:
負のリングには 2 つの計算方法があり、どちらも Bellman-Ford アルゴリズムまたは SPFA アルゴリズムに基づいています。
最初のアルゴリズムは次のとおりです: 各ポイントのエンキューの数をカウントします. ポイントが n 回以上エンキューする場合, 負のリングがあることを意味します. 2 番目のアルゴリズムは: 最短パスが到達するポイントの数をカウントします
.ある点が通過する数、n点を通過する場合、負のサイクルがあることを意味します。
(一般的には 2 番目のアルゴリズムを使用します)
負のループが存在する場合、SPFA は無限ループに陥り、n は非無限ループの最悪のケースであるためです。したがって、上記の 2 つのアルゴリズムは正しいです。

ネガティブ リング アルゴリズムのプログラミング実装では、
最初にすべてのポイントの距離を 0 に割り当て
、次にすべてのポイントをキューに入れます。


100m×100m         に12 個のノードをランダムに構築し、ノード間を30m以内で有向線で接続し、独立して1000サイクルのシミュレーションを実行します。このうち、N_j は500 ~ 1000 個の乱数を設定できます。

        N アルゴリズムを使用して解決する特定のNアルゴリズム プロセスは、主に111.pdf2部分3部分のシミュレーション、つまり、シングル ユーザー、優先度の高いマルチユーザー、および優先度のないマルチユーザーのシミュレーションのために、この記事で紹介されています。multi-user の場合、ソース ノードと宛先ノードは次のように設定できます: s_1=1,d_1=12;s_2=2,d_2=10;s_3=3,d_3=9;s_4=5,d_5 =11。

3. MATLAB コア プログラム

........................................................
USER            = [2,3,5];
for jks = 1:length(USER);

Traffic_VolumeS = [20];
SR              = [10:10:60];
Es3 = [];
for jjj = 1:length(SR)
    Traffic_Volume = Traffic_VolumeS;
    Loop           = 9;
    Es             = zeros(MTKL,Loop);
    rng(5*jjj);
    for i = 1:MTKL
        i

        %随机12个节点
        X      = SCALE*rand(1,Note);
        Y      = SCALE*rand(1,Note);
        %30以内有相线相连接
        xk_ij = zeros(Note,Note);
        w_ij  = zeros(Note,Note);
        b_ij  = zeros(Note,Note);
        for j1 = 1:Note
            for j2 = 1:Note
                dist = sqrt((X(j1)-X(j2))^2 + (Y(j1)-Y(j2))^2); 
                if dist <= Dis_R & j1~=j2 
                   %Select a feasible route with f = fij,这里构造一个连接矩阵,将相互连接的用1表示 
                   xk_ij(j1,j2) = 1; 
                   %随机分配cost
                   b_ij(j1,j2)  = 50*randn-30; 
                end
            end
        end
        EZ = 0;
        for js2 = 1:USER(jks)
            %初始值
            fij        = (1+rand/5)*Traffic_Volume + 2*randn(Note,Note);
            fijmax0    = max(max(fij));
            %选择一个路径
            [f,flag]   = func_sel_route(xk_ij,X,Y,fij,b_ij,Dis_R);
 
            %开始迭代
            E_1 = zeros(1,Loop);
            for j = 1:Loop
                if flag == 1
                   %补图
                   Nj    = 500 + 500*rand;
                   Ys    = func_complementary_graph(xk_ij,f);
                   [R,C] = size(Ys); 
                   a     = randperm(10);
                   SR_(jjj) = SR(jjj);%模拟in的Rate
                   Ri_in    = 1e6*SR_(jjj);%转换为M,
                   Ri_out   = 1e6*SR(jjj);%转换为M,
                   if j == 1
                      E_1(1,j) = Traffic_Volume;%初始值 
                   else
                      Ej_proc  = Nj/2*ECMP_max + ECMP_min; 
                      Ei_out   = frp(Ri_out) * (MOEC_min+(MOEC_max-MOEC_min)*rand);
                      Ej_in    = frp(Ri_in) * (MIEC_min+(MIEC_max-MIEC_min)*rand);
                      E_1(1,j) = Ei_out + Ej_in + Ej_proc;
                   end
                  
                   for k1 = 1:R
                       for k2 = 1:C
                           E(k1,k2) =E_1(1,j)*(1+randn/5); 
                       end
                   end
                   %再将M除掉
                   E=E/1e6;
                   fijmax_ = zeros(R,C);
                   for k1 = 1:R
                       for k2 = 1:C
                           if Ys(k1,k2) == 1
                              fijmax_(k1,k2) =  fijmax0 - fij(k1,k2); 
                              fij(k2,k1)     =  fijmax_(k1,k2);
                              E_(k1,k2)      =  E(k1,k2);
                              E(k2,k1)       = -E_(k1,k2); 
                           end
                       end
                   end
                   E_=-E;
                   E = 7*E/sqrt(SR(jjj));
                   %negative cost cycle
                   [flags2]  = func_negative_cost_cycle(Ys,xk_ij,X,Y,fij,Dis_R,E,E_,f);
               
                   if flags2 == 1%算法结束
                      break; 
                   end
                   f_=f.*E;
                   for k1 = 1:R
                       for k2 = 1:C
                           tmps = fijmax0 - fij;
                           [xc,yc] = find(tmps==0);
                           tmps(xc,yc)=fijmax0;
                           delta = min([min(min(tmps)),min(min(fij))]);
                           if E_(k1,k2) > 0
                              fij(k2,k1) = fij(k2,k1)+delta;
                           else
                              fij(k2,k1) = fij(k2,k1)-delta; 
                           end
                       end
                   end

                   E_1(1,j) = sum(sum(f_.*fij)); 
                else
                   E_1(1,j) = 0;
                end
            end
        EZ = EZ + E_1(end);  
        end
        Es(i,:) = EZ;
    end
    %对1000迭代进行平均
    Es2 = [];
    for i = 1:Loop
        tmps = Es(:,i);
        index= find(tmps==0);
        tmps(index)=[];

        Es2  = [Es2,mean(tmps)];
    end
Es3 = [Es3,Es2(end)];    
end
   if jks == 1
      Eas = Es3; 
      save R1.mat Eas SR
   end
   if jks == 2
      Ebs = Es3;  
      save R2.mat Ebs SR
   end   
   if jks == 3
      Ecs = Es3; 
      save R3.mat Ecs SR
   end
end
12_028_m

4. 完全なアルゴリズム コード ファイル

おすすめ

転載: blog.csdn.net/hlayumi1234567/article/details/129622940