您的位置:首页 > 其它

遗传算法求解TSP问题

2013-04-21 00:02 274 查看
遗传算法求解TSP问题
一、 问题描述
旅行商问题,即TSP问题(TravellingSalesman Problem)又译为类型推销问题、货郎担问题,是数学领域中著名问题之一。
假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。



求解
假设从合肥出发,最后回到合肥
问题域:X={北京,成都,广州,上海}
目标函数:min f(x)=dist(合肥,city1) + ∑dist(cityi,cityj)+ dist(cityj,合肥)
如下图:



二、 遗传算法
遗传算法的基本原理是通过作用于染色体上的基因寻找好的染色体来求解问题,它需要对算法所产生的每个染色体进行评价,并基于适应度值来选择染色体,使适应性好的染色体有更多的繁殖机会,在遗传算法中,通过随机方式产生若干个所求解问题的数字编码,即染色体,形成初始种群;通过适应度函数给每个个体一个数值评价,淘汰低适应度的个体,选择高适应度的个体参加遗传操作,经过遗产操作后的个体集合形成下一代新的种群,对这个新的种群进行下一轮的进化。
用遗传算法求解TSP问题,最困难的是要解决三个方面的问题,即编码,交叉操作以及变异操作。遗传算法求解TSP的基本步骤
(1)种群初始化。个体编码方法有二进制编码和实数编码,在解决TSP问题过程中个体编码方法为实数编码。对于TSP问题,实数编码为1-n的实数的随机排列,初始化的参数有种群个数M、染色体基因个数N(即城市的个数)、迭代次数C、交叉概率Pc、变异概率Pmutation。
(2)适应度函数。在TSP问题中,对于任意两个城市之间的距离D(i,j)已知,每个染色体(即n个城市的随机排列)可计算出总距离,因此可将一个随机全排列的总距离的倒数作为适应度函数,即距离越短,适应度函数越好,满足TSP要求。
(3)选择操作。遗传算法选择操作有轮盘赌法、锦标赛法等多种方法,本程序采用基于适应度比例的选择策略,即适应度越好的个体被选择的概率越大,同时在选择中保存适应度最高的个体。
(4)交叉操作。遗传算法中交叉操作有多种方法。本程序中对于个体,随机选择两个个体,在对应位置交换若干个基因片段,同时保证每个个体依然是1-n的随机排列,防止进入局部收敛。
(5)变异操作。本程序中对于变异操作,随机选取个体,同时随机选取个体的两个基因进行交换以实现变异操作。

三、 遗传算法MATLAB代码实现
遗传算法中控制参数如下: N城市的个数,M种群的个数,C迭代次数,m适应值归一化淘汰加速指数,Pc交叉概率,Pmutation变异概率,pos=randn(N,2) 生成城市的坐标,D=zeros(N,N) 生成城市之间距离矩阵。

(1)适应度函数fit.m




(2)个体距离计算函数 mylength.m



(3)交叉操作函数 cross.m




(4)对调函数exchange.m



(5)变异函数Mutation.m



(6)连点画图函数plot_route.m



四、 结果和分析
城市的个数N为10时





图2-1 10个点在图中的位子





图2-2 遗传算法得到最短路径的连线

城市的个数N为20时




图3-1 30个点在图中的位子





图3-2 遗传算法得到最短路径的连线

城市的个数N为50时



图4-1 50个点在图中的位子





图4-2 遗传算法得到最短路径的连线

由于TSP问题可以借助多种算法求解,例如遗传算法(GA),蚁群算法(ACO),微粒群算法(PSO)等等。我通过上网找资料试了一下蚁群算法。结果如下图所示:
30个城市TSP问题结果



图5 蚁群算法





图6 蚁群算法搜索过程
五、 总结
TSP问题是一类NP hard问题,用传统的方法非常难以获得最优解,特别是当问题规模很大时,最优解基本上不可能能得到。遗传算法和蚁群算法等虽然并不能保证可以获得最优解,但是可以以较快的速度得对近最优解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: