TSP问题
TSP问题全名叫Travelling salesman problem,大意是一个销售员需要依次拜访n个客户,并且每个客户只拜访一次,最终回到起点。目标是找出最佳的一个路线使得路程最短。
什么是遗传算法
遗传算法是参考生物学的一些概念的一个算法,主要参考了种群繁衍、优胜劣汰的生物进化特点。
我们知道一个种群中每个个体都拥有不同的基因,这也先天上形成了个体差异,根据达尔文的进化论,对环境适应度较差的个体往往在自然选择的过程中淘汰掉了,根据生物学理论,生物在繁衍的过程中发生了基因交换、变异,产生了新的个体,随着时间的推进,种群一代又一代的繁衍,对环境的适应程度越来越强。
那么什么是遗传算法呢?面临一个问题,我们可以很容易的获取一系列可行解,同时我们又可以很容易的获取这个解的优秀程度。
那么我们可以很容易的生成m个解,也就是可以看作m个个体,这m个个体可以构成一个群落,首先我们假设这个神奇的种族可以长生不老,只会因为环境因素被淘汰,我们继续假设这个环境只能供养m个个体,随后假设每一次繁衍会产生m个后代。上述假设成立的情况下,每一次繁衍后会一共有2m个个体,经过自然选择又剩下m个个体。也就是说,从m个解里面变m个新的解出来,然后从2m个解里面选比较优秀的m个。新一代的m个解通常来讲是比旧的更优秀的,经过足够多次的繁衍,最终得到的一个群落中最优秀的解可以认为是最优解。
接下来就要讨论每一次繁衍过程中,新的m个解怎么来的——交换和变异,这个就具体问题具体讨论了。
经典TSP
经典TSP中假设所有的顾客的位置不会发生变化,并且不考虑其它因素
很显然我们可以轻松的道一条可行的路线x1(拜访顺序),并且计算优秀程度也就是距离大小
首先生成n个可行路线,得到初始群落X
交换——两个路线之间某几个相同位置的客户编号互换一下,但是对于TSP问题,因为无重复无遗漏,需要交换后把与获得的基因相同的位置上的基因替换成失去的。
变异——对于TSP也可以认为是随机交换两个位置
所以对于TSP问题其实交换和变异干的事情差不多。
然后迭代很多次就可以得到比较优秀的解了。