📄 ex_gated_iterative.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 + -