⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex_gated_iterative.asv

📁 通信网络的混合轮询系统仿真和等待时间解析求解程序。每个站有两类数据
💻 ASV
字号:
% 解析程序          两类数据 一类穷尽 然后二类门限 数据源受限因为为了获得有界的等待时延     恒定跳转 %
 clear;
r=24;%共有r个  假 站     r/2个工作站
s=1*ones(1,r);%平均服务长度
ss=2*ones(1,r);
s_load=0.5;
percent=0.5;
for i=1:r/2,
   if i==1,
       l(2*i-1)=s_load/s(1)*percent/2;        l(2*i)=l(2*i-1);
   else 
       l(2*i-1)=s_load/s(1)*(1-percent)/(r/2-1)/2;  l(2*i)=l(2*i-1);
   end
       rule(2*i-1)=1;                    rule(2*i)=0;
       u(2*i-1)=0;                          u(2*i)=0.1;
end




load=zeros(1,r);s_u=0;x=0;s_load=0;max_l=0;% 计算负载率
for i=1:r,
    load(i)=l(i)*s(i);s_u=s_u+u(i);s_load=s_load+load(i);x=x+load(i)+l(i)*u(i); %稳定性条件  要保证<1
    if max_l<l(i),max_l=l(i);end
end
c=s_u/(1-s_load);


for i=1:r,
   v(i)=load(i)*c ;%第1类数据的假站,第1类数据采用门限式服务
end
%获得平均的访问时间和积累时间
%初始条件
Rn=zeros(r);Rl=zeros(r);
for i=1:r,% R R~的初值
    for j=1:r,
        Rn(i,j)=v(i)*v(j);
    end
end

%迭 代 求 解
circle=0;ddl=zeros(1,r);ddn=5218.28337727*ones(1,r);%当全为门限时 周期为1 曾在这儿吃过苦头 % 造成一个大的误差
while(abs(ddl(1)-ddn(1))/ddl(1)>1e-6)
    circle=circle+1;
    Rl=Rn; ddl=ddn;
    ddn=zeros(1,r);
    for i=1:r,% 用上面的R R~求 d(2) 二阶矩的
        %第一项  
        if rule(i)==0,  i_iM1=list(i,minu(i,1,r),r);end%  门限式服务% 存放的是站的序号
       if rule(i)==1,  i_iM1=list(plu(i,1,r),minu(i,1,r),r);end%  穷尽式服务% 存放的是站的序号
        for m=1:length(i_iM1),%上面数组的序号  m 循环变量
            j=i_iM1(m);
            ddn(i)=ddn(i)+Rl(j,j)+u(j)*u(j); %第一项  
            %第三项  
            j_iM1=list(j,minu(i,1,r),r);
            for n=1:length(j_iM1), %上面数组的序号  n 循环变量
                k=j_iM1(n);
                ddn(i)=ddn(i)+2*v(j)*u(k); %第三项 
            end
        end  
          if rule(i)==1,ddn(i)=ddn(i)+u(i)*u(i);end%如果是穷尽式,补上u2(i)        
        %第二、四项
        if rule(i)==0,  i_iM2=list(i,minu(i,2,r),r);end%  门限式服务% 存放的是站的序号
        if rule(i)==1,  i_iM2=list(plu(i,1,r),minu(i,2,r),r);end%  穷尽式服务% 存放的是站的序号
        for m=1:length(i_iM2),%上面数组的序号  m 循环变量
            j=i_iM2(m);
            jP1_iM1=list(plu(j,1,r),minu(i,1,r),r);
            for n=1:length(jP1_iM1),  %上面数组的序号  n 循环变量
                k=jP1_iM1(n);
                ddn(i)=ddn(i)+2*(Rl(j,k)+u(j)*v(k)+u(j)*u(k)); %第二、四项
            end
        end  
        if rule(i)==1,%如果是穷尽式,补上u2(i)
            j=i;%如果是穷尽式,补上u2(i)
            jP1_iM1=list(plu(j,1,r),minu(i,1,r),r);
            for n=1:length(jP1_iM1),  %上面数组的序号  n 循环变量
                k=jP1_iM1(n);
                ddn(i)=ddn(i)+2*(u(j)*v(k)+u(j)*u(k)); %第二、四项
             end
         end        
    end %    i=1:r,
    
    Rn=zeros(r);% 求R,R~
    for j=1:r,
        if rule(j)==0,Rn(j,j)=l(j)*c*ss(j)+load(j)*load(j)*ddn(j);  end %门限式
        if rule(j)==1,Rn(j,j)=(l(j)*(c-v(j))*ss(j)/(1-load(j))+load(j)*load(j)*ddn(j))/(1-load(j))/(1-load(j));  end %穷尽式
     % Rl(j,j)=Rn(j,j);
    end
    for j=1:r,
        for k=1:r,
            if j~=k
                %j在后
               if rule(k)==0, a=list(k,minu(j,1,r),r);end%从k到 j-1                
               if rule(k)==1 && j~=plu(k,1,r), a=list(plu(k,1,r),minu(j,1,r),r);end
               if rule(k)==0 || j ~= plu(k,1,r),
                   for n=1:length(a),
                       m=a(n);
                      if  rule(k)==0,  Rn(j,k)=Rn(j,k)+load(k)*(Rl(m,j)+u(m)*v(j));end
                      if  rule(k)==1,  Rn(j,k)=Rn(j,k)+load(k)*(Rl(m,j)+u(m)*v(j))/(1-load(k));;end
                   end
               end
               if rule(k)==1,Rn(j,k)=Rn(j,k)+load(k)*u(k)*v(j)/(1-load(k));end%穷尽式 前面扔掉u(k)v(j)项,这里加上 在此改动  
                %j在前
                j_kM1=list(j,minu(k,1,r),r);%从j到k-1  
                for n=1:length(j_kM1),
                    m=j_kM1(n);
                    if  rule(k)==0,  Rn(j,k)=Rn(j,k)+load(k)*(Rl(j,m)+v(j)*u(m));end
                    if  rule(k)==1,  Rn(j,k)=Rn(j,k)+load(k)*(Rl(j,m)+v(j)*u(m))/(1-load(k));end
                end
            end % if j~=k
        end%k=1:r,
    end%j从1到r求Rn,Tn
    %ddn
end % while

%求时延
w=zeros(1,r);
for i=1:r,
  if rule(i)==0,  w(i)=(1+load(i))*ddn(i)/2/c;end
  if rule(i)==1,  w(i)=ddn(i)/2/(c-v(i))+load(i)/(1-load(i))*ss(i)/s(i)/2;end
end

x1=zeros(1,r/2);x2=zeros(1,r/2);
for i=1:r/2,
    x1(i)=w(2*i-1);
    x2(i)=w(2*i);
end
%x1
%x2
plot([1:r/2-1],w(3:2:r),'o-',[1:r/2-1],w(4:2:r),'*-') 

%w(1:2:r);
%w(2:2:r);
x1=0;x2=0;%%求所有相同假站的平均的时延
for i=1:r,
   if rule(i)==1,x1=x1+load(i)*w(i)/(s_load/2);end%因为两类假站负荷和相同
   if rule(i)==0,x2=x2+load(i)*w(i)/(s_load/2);end
end
x1
x2

y1=0;y2=0;%%求所有相同假站的平均时延的方差)
for i=1:r,
   if rule(i)==1,y1=y1+load(i)*w(i)*w(i)/(s_load/2);end
   if rule(i)==0,y2=y2+load(i)*w(i)*w(i)/(s_load/2);end
end
y1-x1*x1
y2-x2*x2





circle


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -