📄 routing_t.m
字号:
tic;
alapha=0.4;
N=600;
% R=40;
F=1000;
aa=zeros(F,1);
for i=1:N
Cii(i)=sum(Nodes(:,i));
end
Ci=sum(Cii)/N;
% aa=zeros(F);
% aaa=zeros(10);
%当alapha=1,q=0,N=100时,R的临界值是80-100,
for R=180:40:1060
list=zeros(F*R,3);
Packet=zeros(N,1);
D=0;
for i=1:N
Packet(i)=0;
end
for T=1:F
list2=zeros(N,1);
% w=lamda*N*t
% for i=1:N
% list2(i,2)=0;
% end
for i=1:R
b=rand(1,2)*N;
B(i,:)=ceil(b);
while B(i,1)==B(i,2) %选择R对源端和目的端,且源端和目的端不是同一点
b=rand(1,2)*N;
B(i,:)=ceil(b);
end
end
list((T-1)*R+1:T*R,1:2)=B; %依次把选择的R对源端和目的端付给list
for i=1:R;
Packet(B(i,1))=Packet(B(i,1))+1; %选择的R个源端的数据包个数分别加1
end
D=D+R;
for i=1:R*T
t2=1;
e=100;
ts=list(i,1);
td=list(i,2);
if ts==0
continue;
end
list2(ts)=list2(ts)+1; %list2第二列加一
if list2(ts)> Cii(ts) %第ts个节点对应的数据包超过了此节点的最大处理能力时,此时不进行传输
% if list2(ts,2)>5
list(i,3)=list(i,3)+1;
continue;
end
x=1;
for k=1:N
if Nodes(ts,k)==1
if k==td %如果ts的邻居节点有目的节点,传递成功,源端赋0
% w=w-1;
D=D-1;
list(i,1)=0;
list(i,3)=list(i,3)+1;
t2=0;
continue;
end
end % if Spath(k,td)<N
end
if t2~=0
for k=1:N
if Nodes(ts,k)==1
Short=Spath(k,td);
e=alapha*Short+(1-alapha)*Packet(k)/Cii(k);
% e=alapha*Short+(1-alapha)*Packet(k)/5;
if x==1
min=e;
x=x+1;
t2=k;
end
if e<min
min=e;
t2=k;
end
end
end
%执行路由策略,确定下一节点t2(i)
Packet(t2)=Packet(t2)+1;
list(i,1)=t2;
list(i,3)=list(i,3)+1;
end
Packet(ts)=Packet(ts)-1 ;
% list2(ts,2)=list2(ts,2)-1;
end
aa(T)=D;
end
TT(R)=sum(list(:,3))/(R*F);
% aaa(R)=(aa(F)+aa(F-1)+aa(F-2)+aa(F-3)+aa(F-4)+aa(F-5)+aa(F-6)+aa(F-7)+aa(F-8)+aa(F-9))/(10*R*F);
aaa(R)=aa(F)/(R*F);
% aaa(R)=Ci*(aa(F)-aa(F-10)+aa(F-1)-aa(F-11)+aa(F-2)-aa(F-12)+aa(F-3)-aa(F-13)+aa(F-4)-aa(F-14)+aa(F-5)-aa(F-15)+aa(F-6)-aa(F-16)+aa(F-7)-aa(F-17)+aa(F-8)-aa(F-18)+aa(F-9)-aa(F-19))/(20*R);
% aaa(R)=(aa(F)-aa(F-3))/(3*R);
% semilogy(1:F,aa,'b-');
end
%plot(180:40:1060,TT(180:40:1060),'k*');
%plot(180:40:1060,aaa(180:40:1060),'k*');
toc;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -