遗传算法在TSP问题中的应用
什么是TSP问题?
TSP问题是典型的组合优化问题,其也是遗传算法界中最为经典的优化问题之一。在遗算法成熟之前也一直困扰着科研人员,TSP问题又称为名旅行商问题,其定义为设有N个城市,推销员要从某一个城市前往另外N-1个城市,每个城市能去的次数有且仅有一次,最终回到出发的城市,要寻找的便是该推销人员走过的最短路径,也可以理解为给N个数目的城市附上一个加权完全图,每个城市都用一个顶点代替,每两个顶点之间一条无向加权边[2]。最终求解此无向加权完全图的最小哈米尔顿回路。
研究意义?
TSP问题不仅仅是解决了TSP问题,其可以延伸到了许多其他问题当中,如下城市市区下水管道的铺设路径,物流公司物流配送货物等实际与生活息息相关的问题,这些问题的求解方法都可以应用于很多现实生活中的组合优化问题,是都是相当经典的组合问题,遗传算法是一种全局随机搜索的算法,对于解决各种组合优化问题都有着十分有效的作用,因此用遗传算法来解决这两个经典组合优化问题(本人在毕业论文的另外一个组合优化问题是有关营销利润的,有兴趣的可以私聊或者评论)是一种不错的选择。
算法在TSP中的实际应用步骤
(1)设定N个城市,每个城市用一个自然数代替,每个城市之间的距离制定成加权数据,对所有定义的城市进行随机编码,TSP问题中的编码,科研人员往往采用的时二进制字符编码和实数编码;
(2)确定好各类参数,初始化种群,采用随机的方法随机产生有限个初始群体;
(3)第三步根据实际问题所处的环境制定合适的数学适应度函数,在TSP问题往往中采用f =1/T,T即代表解路径的总长度,T越大则表示适应度越小;
(4)对每个个体对体进行适应度评估,通过比较适应度得出优秀的个体并且保留;
(5)对每个个体进行适应度的评估后便根据适应度的大小进行选择算子的操作,以此来决定哪些个体基因需要进行交叉变异操作,使它们的基因得到优化,并对优化后的解的基因再进行适应度评估,保留优秀个体,对于非优秀的个体对其再进行选择,交叉,变异操作直到其适应度通过评估或迭代次数超过参数规定的最大迭代次数停止优化操作。
ps:编码方式我这里采用的是实数制编码(编码方式的多性,欢迎讨论)
交叉概率Pc:交叉算子进行基因优化的操作,取值范围在0.4-0.99。
变异概率Pm:变异算子进行基因优化的操作,其取值范围为0.00001-0.1。
该适应度函数表达式如下式所示:Fm = 1/T
运行结果
在种群数为55,交叉率为0.6,变异率为0.05,设定15个城市坐标为{84,9},{94,86},{87,43},{71,48},{76,65},{69,53},{82,61},{83,72},{69,62},{73,12},{71,72},{68,46},{73,66},{71,42},{78,66}依次编号为0到14,也可以根据自己的想法来设定目标城市坐标,将各个城市放入一个二维数组中,迭代次数设定为150次,当遗传操作的迭代次数超过这个数则强行停止算法。使用C语言进行编译后得到的运行结果如下:
得到各个个体城市得遍历次序后得到第54号个体为近似最优解,最优路径为先后走完编号为0、5、11、3、13、14、8、10、12、6、7、1、4、2、9、0 这15个城市,在求解过程中,可以发现遗传算法可以使最优解收敛到某一个稳定的值,如在解决此实际问题中时它的最优解一直在250上下波动。根据收敛值可以得出近似最优解,这也是遗传算法得的特点之一。
结语
博主第一次写博客,如有不足指出请各位前辈多多指教,也希望对初学者有一定的帮助,如有毕业论文想写优化算法的欢迎借鉴。