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