遗传算法求解TSP问题
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的值太大,可能会导致算法目前所处的较好的搜索状态倒退回原来较差的情况。