up目录
一、理论基础
首先,传统的遗传优化算法,其标准的优化过程如下所示:
步骤一:根据所需要处理的问题特点,选择问题解对应的编码,并给出一个初始群体,该初始群体包括N各染色体。
步骤二:计算遗传算法中群体的每一个染色体的适应函数值。
步骤三:当遗传算法的某一次迭代结果符合停止迭代条件,则算法停止迭代,如果不满足停止迭代条件,则以一个随机的概率分布值,从旧的种群中随机的选择N个染色体组成一个新的种群进行下一次的迭代。
步骤四:通过交叉得到N个染色体的交叉集合。
步骤五:设置一个较小的变异概率,使染色体中的某些基因进行变异,获得新的种群,并重复步骤二的计算过程。
其详细步骤如下:
开放式最短路径优先(Open Shortest Path First,OSPF)是广泛使用的一种动态路由协议,它属于链路状态路由协议,具有路由变化收敛速度快、无路由环路、支持变长子网掩码(VLSM)和汇总、层次区域划分等优点。在网络中使用OSPF协议后,大部分路由将由OSPF协议自行计算和生成,无须网络管理员人工配置,当网络拓扑发生变化时,协议可以自动计算、更正路由,极大地方便了网络管理。但如果使用时不结合具体网络应用环境,不做好细致的规划,OSPF协议的使用效果会大打折扣,甚至引发故障。
OSPF协议是一种链路状态协议。每个路由器负责发现、维护与邻居的关系,并将已知的邻居列表和链路费用LSU(Link State Update)报文描述,通过可靠的泛洪与自治系统AS(Autonomous System)内的其他路由器周期性交互,学习到整个自治系统的网络拓扑结构;并通过自治系统边界的路由器注入其他AS的路由信息,从而得到整个Internet的路由信息。每隔一个特定时间或当链路状态发生变化时,重新生成LSA,路由器通过泛洪机制将新LSA通告出去,以便实现路由的实时更新。
1、初始化形成端口初始信息:在路由器初始化或网络结构发生变化(如链路发生变化,路由器新增或损坏)时,相关路由器会产生链路状态广播数据包LSA,该数据包里包含路由器上所有相连链路,也即为所有端口的状态信息。
2、路由器间通过泛洪(Flooding)机制交换链路状态信息:各路由器一方面将其LSA数据包传送给所有与其相邻的OSPF路由器,另一方面接收其相邻的OSPF路由器传来的LSA数据包,根据其更新自己的数据库。
3、形成稳定的区域拓扑结构数据库:OSPF路由协议通过泛洪法逐渐收敛,形成该区域拓扑结构的数据库,这时所有的路由器均保留了该数据库的一个副本。
4、形成路由表:所有的路由器根据其区域拓扑结构数据库副本采用最短路径法计算形成各自的路由表。
综上所述,本算法的步骤如下:
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, 总代价为各跳路径相加。
二、核心程序
function [DLn,cityn]=tsp(n)
M=0.05;
if n==30
city30=[ 0.02 0.01;
0.04 0.01;
0.01 0.03;
0.03 0.03;
0.05 0.03;
0.03 0.05;
0.12 0.01;
0.14 0.01;
0.11 0.03;
0.13 0.03;
0.15 0.03;
0.13 0.05;
0.22 0.01;
0.24 0.01;
0.21 0.03;
0.23 0.03;
0.25 0.03;
0.23 0.05;
0.12-M 0.01+M;
0.14-M 0.01+M;
0.11-M 0.03+M;
0.13-M 0.03+M;
0.15-M 0.03+M;
0.13-M 0.05+M;
0.12+M 0.01+M;
0.14+M 0.01+M;
0.11+M 0.03+M;
0.13+M 0.03+M;
0.15+M 0.03+M;
0.13+M 0.05+M;
];
for i=1:n
for j=1:n
DL30(i,j)=((city30(i,1)-city30(j,1))^2+(city30(i,2)-city30(j,2))^2)^0.5;
end
end
DLn=DL30;
cityn=city30;
end
[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);
up33
三、测试结果