?? routing.m
字號:
% %%%%%%%%%%%%%%%求最短路徑%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% A=Nodes;
% for i=1:N
% for j=1:N
% Spath(i,j)=0;
% end
% end
% for l=1:N
% for i=1:N
% for j=1:N
% if A(i,j)>=1&Spath(i,j)==0
% Spath(i,j)=l;
% end
% end
% end
% A=A*Nodes;
% end
% for j=1:N
% Spath(j,j)=0;
% end
%
% %%%%%%%%%%%%結束求最短路徑%%%%%%%%%%%%%%%%%%%%%%%%%
% lamda=0.01;
% d=N*lamda;
tic;
alapha=0.7;
N=600;
R=350;%200;
%R=11001000,300,400,600;
F=1000;
D=0;
for i=1:N
Cii(i)=sum(Nodes(:,i));
end
list=zeros(F*R,2);
Packet=zeros(N);
aa=zeros(F);
% for i=1:N
% Packet(i)=0;
% % list2(i,1)=i;
% end
for T=1:F
list2=zeros(N);
% 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)>10 %第ts個節點對應的數據包超過了此節點的最大處理能力時,此時不進行傳輸
% if list2(ts,2)>5
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;
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;
end
Packet(ts)=Packet(ts)-1 ;
% list2(ts,2)=list2(ts,2)-1;
end
aa(T)=D;
end
semilogy(1:F,aa,'b-');
hold
% end
toc;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -