基于MATLAB的OSPF协议网络仿真
step1. 當有連接請求時,算法開始,考察源節點S是否為域的邊界節點,不是的話在域內使用最短跳算法路由至此域的邊界節點
域的邊界節點用U表示(圖中A, B),下一跳接口為[D, N, r(U, N)],D為宿節點,N為下一跳結點,r(U, N) = {wU, wN, hU-N},wU, wN為U,N結點間波長,hU-N 是U,N間的代價,再到下一跳r(N, E),E為下一個域的邊界節點。
step2. 根據OSPF 協議規范,在請求連接的兩點之間,用Dijkstra 算法計算出所有路徑,盡量消除冗余存儲和冗余計算,挑選出代價最少的路徑,hU-D = hU-N+ hN-E + …+h*-D, 總代價為各跳路徑相加,
step3. 考察波長連續性,: r(U, N) = {wU, wN1, hU-N}, r(N, E) = {wN2, wE1, hN-E}…r(*, D) = {w*2, wD, h*-D}.
If wN1 = wN2, && wE1= wE2 &&…. w*1= w*2, return null,
否則,加入波長變換器, 此路徑代價變為C。
step4. 考察次短路徑,是否存在符合波長連續性的波長,若有,則轉到步驟7,否則執行步驟6;
step5. 設最短路徑增加波長變換器代價為C,采用次短路徑的代價為H2,比較C、H2,若C<H2,則采用增加波長變換器方法,選擇最短路徑,否則采用次短路徑;跳至步驟4;
step6. 循環執行步驟4,5,直至計算出合適的路徑;
Step7. 顯示所選路徑,算法結束,S結點開始發包至宿節點D
clc;
clear;
close all;
?
webpoint=30; ? ? ? ?%節點數目
?
[D,M]=tsp(webpoint);
popsize=20;
N=199; ? ? ? ? ? ? ? ? ?%N為迭代次數
pcro=0.85;
pmut=0.5;
gen=1;
minval=inf;
pop=initialize(popsize,webpoint);
while gen<=N ? ??
? val=adapt(pop,popsize,webpoint,D); ?
? fitval=(1000./val).^15;
? [valmin,minind]=min(val);
??
%保存最優
? if valmin<minval
? ? ? minval=valmin;
? ? ? minpath=pop(minind,:);
? ?end ??
? ?minf(gen)=minval; ? ? ? ? ? ? ? ? %最短路徑長度 ? ? ?
pop=select(pop,fitval,popsize,webpoint,minpath); ?%比例選擇
pop=crossover(pop,pcro,popsize,webpoint); ?%OX交叉
pop=mutation(pop,pmut,popsize,webpoint); ? %變異 ? ? ?
drawTSP(M,minpath,minval,gen,0);
gen=gen+1;
end
drawTSP(M,minpath,minval,gen,1);
hold on
r=0.022;
t=0:pi/180:2*pi;
x=r*cos(t)+0.03;
y=r*sin(t)+0.03;
plot(x,y,'b--');hold on;
plot([0.03,0.01],[0.03,0.03],'b--');hold on;
plot([0.03,0.04],[0.03,0.01],'b--');hold on;
plot([0.03,0.02],[0.03,0.01],'b--');hold on;
plot([0.03,0.05],[0.03,0.03],'b--');hold on;
plot([0.03,0.03],[0.03,0.05],'b--');hold on;
plot([0.02,0.04],[0.01,0.01],'b--');hold on;
plot([0.04,0.05],[0.01,0.03],'b--');hold on;
plot([0.05,0.03],[0.03,0.05],'b--');hold on;
plot([0.03,0.01],[0.05,0.03],'b--');hold on;
plot([0.01,0.02],[0.03,0.01],'b--');hold on;
%================================================
%================================================
hold on
t=0:pi/180:2*pi;
x=r*cos(t)+0.13;
y=r*sin(t)+0.03;
plot(x,y,'b--');hold on
plot([0.13,0.11],[0.03,0.03],'b--');hold on;
plot([0.13,0.14],[0.03,0.01],'b--');hold on;
plot([0.13,0.12],[0.03,0.01],'b--');hold on;
plot([0.13,0.15],[0.03,0.03],'b--');hold on;
plot([0.13,0.13],[0.03,0.05],'b--');hold on;
plot([0.12,0.14],[0.01,0.01],'b--');hold on;
plot([0.14,0.15],[0.01,0.03],'b--');hold on;
plot([0.15,0.13],[0.03,0.05],'b--');hold on;
plot([0.13,0.11],[0.05,0.03],'b--');hold on;
plot([0.11,0.12],[0.03,0.01],'b--');hold on;
%================================================
%================================================
t=0:pi/180:2*pi;
x=r*cos(t)+0.23;
y=r*sin(t)+0.03;
plot(x,y,'b--');hold on
% ? ? ? ? ? ? 0.22 0.01;
% ? ? ? ? ? ? 0.24 0.01;
% ? ? ? ? ? ? 0.21 0.03;
% ? ? ? ? ? ? ? 0.23 0.03;
% ? ? ? ? ? ? 0.25 0.03;
% ? ? ? ? ? ? 0.23 0.05;
plot([0.23,0.21],[0.03,0.03],'b--');hold on;
plot([0.23,0.24],[0.03,0.01],'b--');hold on;
plot([0.23,0.22],[0.03,0.01],'b--');hold on;
plot([0.23,0.25],[0.03,0.03],'b--');hold on;
plot([0.23,0.23],[0.03,0.05],'b--');hold on;
plot([0.22,0.24],[0.01,0.01],'b--');hold on;
plot([0.24,0.25],[0.01,0.03],'b--');hold on;
plot([0.25,0.23],[0.03,0.05],'b--');hold on;
plot([0.23,0.21],[0.05,0.03],'b--');hold on;
plot([0.21,0.22],[0.03,0.01],'b--');hold on;
%================================================
%================================================
t=0:pi/180:2*pi;
x=r*cos(t)+0.08;
y=r*sin(t)+0.08;
plot(x,y,'b--');hold on
?
plot([0.08,0.07],[0.08,0.06],'b--');hold on;
plot([0.08,0.09],[0.08,0.06],'b--');hold on;
plot([0.08,0.06],[0.08,0.08],'b--');hold on;
plot([0.08,0.10],[0.08,0.08],'b--');hold on;
plot([0.08,0.08],[0.08,0.10],'b--');hold on;
plot([0.07,0.09],[0.06,0.06],'b--');hold on;
plot([0.09,0.10],[0.06,0.08],'b--');hold on;
plot([0.10,0.08],[0.08,0.1],'b--');hold on;
plot([0.08,0.06],[0.1,0.08],'b--');hold on;
plot([0.06,0.07],[0.08,0.06],'b--');hold on;
%================================================
%================================================
t=0:pi/180:2*pi;
x=r*cos(t)+0.18;
y=r*sin(t)+0.08;
plot(x,y,'b--');hold on;
% ? ? ? ? ? ? 0.17 0.06;
% ? ? ? ? ? ? 0.18 0.06;
% ? ? ? ? ? ? 0.16 0.08;
% ? ? ? ? ? ? ? 0.18 0.08;
% ? ? ? ? ? ? 0.20 0.08;
% ? ? ? ? ? ? 0.18 0.10; ?
plot([0.18,0.17],[0.08,0.06],'b--');hold on;
plot([0.18,0.19],[0.08,0.06],'b--');hold on;
plot([0.18,0.16],[0.08,0.08],'b--');hold on;
plot([0.18,0.20],[0.08,0.08],'b--');hold on;
plot([0.18,0.18],[0.08,0.10],'b--');hold on;
plot([0.17,0.19],[0.06,0.06],'b--');hold on;
plot([0.19,0.20],[0.06,0.08],'b--');hold on;
plot([0.20,0.18],[0.08,0.1],'b--');hold on;
plot([0.18,0.16],[0.1,0.08],'b--');hold on;
plot([0.16,0.17],[0.08,0.06],'b--');hold on;
%================================================
%================================================
figure;plot(minf,'-r');xlabel('迭代次數');ylabel('最短路徑長度');
disp('最短路徑為:');disp(minpath);
disp('最短路徑長度為:');disp(minval);
?A12-1
總結
以上是生活随笔為你收集整理的基于MATLAB的OSPF协议网络仿真的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于FPGA的HDB3编译码器设计
- 下一篇: 建模案例:最优截断切割问题