首页 > 编程语言 >m基于负价环N算法的无线传感器网络性能matlab仿真

m基于负价环N算法的无线传感器网络性能matlab仿真

时间:2023-05-26 23:31:34浏览次数:49  
标签:仿真 负环 end 算法 Note 负价环 matlab fij Es3

1.算法仿真效果 matlab2022a仿真结果如下:

1.png2.png3.png4.png

2.算法涉及理论知识概要 负环的定义:负环是指权值和为负数的环。负环会使图的最短路径计算陷入死循环,因此,存在负环的图不存在最短路。

负环的计算方法: 负环有两种计算方法,都是基于Bellman-Ford算法或者SPFA算法。 第一种算法是:统计每个点的入队次数,如果某个点入队大于等于n次,则说明有负环 第二种算法是:统计到某个点的最短路所经过点的个数,如果经过n个点,则说明存在负环。 (一般情况下,我们使用第二种算法) 由于当负环存在时,SPFA会陷入死循环,且n是非死循环的最坏情况。所以以上两种算法是正确的。

求负环算法的编程实现 首先将所有点的距离都赋值为0 然后将所有的点入队。

     在100m*100m随机构建12个节点,节点距离在30m内通过有向线相连,仿真独立进行1000循环。其中N_j可设置为500~1000随机数。

5.png

    通过使用N算法进行求解,具体N算法流程已在文中介绍,主要针对111.pdf中2,3部分进行仿真,即单用户,具有优先级的多用户,没有区别的多用户,其中针对多用户,源节点目的节点可按: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核心程序

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

标签:仿真,负环,end,算法,Note,负价环,matlab,fij,Es3
From: https://blog.51cto.com/matworld/6359837

相关文章

  • m基于FPGA的LDPC最小和译码算法verilog实现,包括testbench和matlab辅助验证程序
    1.算法仿真效果matlab2022a/vivado2019.2仿真结果如下: matlab仿真: 0.5码率,H是4608×9216的矩阵。   FPGA仿真:    对比如下:   2.算法涉及理论知识概要         LDPC译码分为硬判决译码和软判决译码。         硬判决译码又称......
  • 【无人机任务分配】基于合同网协议(CNP算法)实现多无人机具有时间窗口和优先级约束任务
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • matlab 构造逐渐震荡衰减的函数
    t=0:0.01:10;%时间范围freq=5;%振荡频率amp=1;%初始振幅duration=5;%振荡持续时间decay_rate=0.1;%衰减速率y=amp*sin(2*pi*freq*t).*exp(-decay_rate*t);%构造函数plot(t,y);%绘制图形xlabel('时间');ylabel('振幅');title('逐渐震荡衰减函数');......
  • Matlab优化拟合曲线
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • 基于TPC算法的WSN网络资源分配matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要一个移动通信系统面临的主要问题有三个:由哪些资源组成,资源如何分配?这些资源如何组织形成一个网络,网络架构是什么样子的?各网络组成部分之间如何进行信息交互?资源及资源分配、网络架构、信息交互是移动通信系统运行......
  • 基于TPC算法的WSN网络资源分配matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:  2.算法涉及理论知识概要       一个移动通信系统面临的主要问题有三个:由哪些资源组成,资源如何分配?这些资源如何组织形成一个网络,网络架构是什么样子的?各网络组成部分之间如何进行信息交互?       资源及资源分配、......
  • 基于Lucas-Kanade算法的双目图像光流提取matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:      2.算法涉及理论知识概要        1950年,Gibson首先提出了光流的概念,所谓光流就是指图像表现运动的速度。物体在运动的时候之所以能被人眼发现,就是因为当物体运动时,会在人的视网膜上形成一系列的连续变化的......
  • m图像多重分形谱计算matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要多重分形(multifractal)一种分为多个区域的复杂分形结构。为了对分形的复杂性和不均匀性进行更细致地刻画,需引进它的概率分布函数及其各阶矩的计算,由此构成了分形维数的一个连续谱,称之为多重分形或多标度分形。由......
  • 基于FPGA的医学图像中值滤波verilog实现,包括testbench和MATLAB验证程序
    1.算法仿真效果matlab2022a/Vivado2019.2仿真结果如下:通过matlab产生带噪声医学图片:FPGA仿真:通过MATLAB读取FPGA的仿真数据,并显示滤波后图像:2.算法涉及理论知识概要中值滤波是一种非线性数字滤波器技术,经常用于去除图像或者其它信号中的噪声。这个设计思想就是检查输入信......
  • 基于Lucas-Kanade算法的双目图像光流提取matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要1950年,Gibson首先提出了光流的概念,所谓光流就是指图像表现运动的速度。物体在运动的时候之所以能被人眼发现,就是因为当物体运动时,会在人的视网膜上形成一系列的连续变化的图像,这些变化信息在不同时间,不断的流过眼......