遗传算法求解TSP问题

孤街浪徒 提交于 2019-12-05 00:50:36

1、遗传算法

前一篇遗传算法的基本内容在之前的博客已经应用过了

之前遗传算法解决的是函数优化问题,即求解最大值或最小值问题;

此次要解决的是组合优化问题中的TSP问题,即旅行商问题。

这边先介绍一下TSP问题

TSP问题(Traveling Salesman Problem),即旅行商问题,又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。

简单地说,TSP问题就是要找到图中的最短哈密尔顿回路,即全局最短路径。

然后遗传算法可以模仿生物进化,然后可以找到一个近似最优解,但其不一定是全局最优解。

2、实验原理

1)产生初始种群;随机生成N个个体作为初始群体popm,随机选择一个种群;
2)适应度函数;个体评价 计算P(t)中各个个体的适应度,遗传算法在进化搜索中基本不利用外部信息,仅以适应度函数为依据,利用种群中每个个体的适应度值来进行搜索。TSP的目标是路径总长度为最短
3)选择运算;将使适应度较大(优良)个体有较大的存在机会,而适应度较小(低劣)的个体继续存在的机会也较小。简单遗传算法采用赌轮选择机制
4)交叉运算 将交叉算子作用于群体;
5)变异运算 将变异算子作用于群体,并通过以上运算得到下一代群体P(t + 1);
6)终止条件 输出解。

3、代码实现

1.city.m:随机生成N个城市的坐标并保存

 

2.plot_route.m:实现连点画图

 

 

 3.染色体的路程代价函数 mylength.m

 

 

 

 4.适应度函数fit.m

 

 

 5.交叉操作函数 cross.m

 

 

 

 6.变异函数 Mutation.m

 

 

 7.main函数

3、结果分析

调整参数并分析运行结果

(1)对于city_25.mat文件中的城市序列,参数ITER=2000,m=2,Pc=0.8,Pm=0.05保持不变,调整种群个数M的值,观察其结果变化:

M=50

 

 

 M=100

 

 

 

 M=500

 

 

 由运行结果可知当M=100时得到TSP的最短路径长度均小于M=50和M=500运行得出的最短路径长度。

因此可以得出结论:群体个数M参数不宜过大或过小
若M设置较大,一次进化所覆盖的模式较多,可以保证群体的多样性,从而提高算法的搜索能力,但是由于群体中染色体的个数较多,势必增加算法的计算量,降低了算法的运行效率。
若M设置较小,虽然降低了计算量,但是同时降低了每次进化中群体包含更多较好染色体的能力。

 (2)同上,调整交叉概率Pc的值,观察其运行结果

 

Pc=0.4

 

 

 Pc=0.8

 

 

 Pc=1.2

 

由运行结果可见较差概率影响着算法的运行效率,但对得出的最优值不能保证其最优性。

参考资料得Pc的取值一般为0.4~0.99。
(3)
Pm=0.001

 

 

 Pm=0.05

 

 Pm=0.20

 

 

 由运行结果可得

Pm的值不宜过大。因为变异对已找到的较优解具有一定的破坏作用,如果Pm的值太大,可能会导致算法目前所处的较好的搜索状态倒退回原来较差的情况。

 

 

 

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!