把最近看的整理了一下,比较简单粗暴。
想要详细了解的话建议网上进一步检索。
章末会贴上引用过的或有帮助一些文章及其链接。
TSP路径规划问题
1.TSP路径规划概述
旅行商问题(Traveling Salesman Problem)就是一个经销商从n个城市中的某一城市出发,不重复的走完其余的n-1个城市并回原出发点,求所有可能的路径中路径长度最短的一条。
旅行商问题的应用领域之一就包括如何规划最合理高效的道路交通,以减少拥堵。也就是我们说的路径规划,根据环境的信息特点不同,还可以其分为离散域范围内的和连续域范围内的路径规划问题。
常见的路径规划算法有 Dijkstra 算法、A*算法、Floyd-Warshall 算法和蚁群算法等,根据算法的原理不同以及各自的优缺点,适用于解决不同环境、不同类型的路径规划问题。
最开始诸如有Dijkstra 、A*、Floyd-Warshall等利用贪心思想的算法,但TSP搜索空间随着城市数n的增加而增大,所有的旅程路线组合数为(n-1)!/2。当城市数较大时,TSP难以用遍历的方法找到最短路径。
然后出现了一系列诸如遗传算法、粒子群算法(模拟鸟群运动方式)、蜂群和蚁群等仿生算法。它们属于群优化算法,也就是说我们会在解空间里面同时设置许多个个体然后来组成一个群体来进行搜索寻找最优解。
还有一些较新的研究领域,包括使用强化学习等解决路径规划问题。
2.常见的一些解决方法
2.1 Dijkstra 算法
2.2 A*算法
2.3 Floyd-Warshall 算法
2.4 遗传算法
遗传算法是一种通过模拟自然进化过程搜索最优解的方法。使用适者生存的原则,在潜在的解决方案种群中逐次产生一个近似最优解的方案,在遗传算法的每一代中,根据个体在问题域中的适应度值和从自然遗传学中借鉴来的再造方法进行个体选择,产生一个新的近似解。这个过程导致种群中个体的进化,得到的新个体比原来个体更能适应环境,就像自然界中的改造一样。
基本步骤包括:
编码、产生初始种群、计算适应度函数值、选择、交叉、变异、产生下一代种群、解码。
计算适应度函数值->选择->交叉->变异 不停的循环迭代,最后直到满足一定的终止条件。
适应度函数用来评价个体的性能到底好不好;选择体现进化,更优的个体生存下来进化到下一代可能性比较大;交叉变异保持了样本的多样性,避免算法陷入局部寻优局部求解的误区。
2.5 粒子群算法
2.6 蜂群算法
人工蜂群算法是模仿蜜蜂行为提出的一种优化方法,是集群智能思想的一个具体应用,它的主要特点是不需要了解问题的特殊信息,只需要对问题进行优劣的比较,通过各人工蜂个体的局部寻优行为,最终在群体中使全局最优值突现出来,有着较快的收敛速度。为了解决多变量函数优化问题,Karaboga提出了人工蜂群算法ABC模型(artificial bee colony algorithm)。
人工蜂群算法属于群智能算法的一种,其受启发于蜜蜂的寻蜜和采蜜过程,相比于常见的启发式算法,它的优点在于其使用了较少的控制参数,并且鲁棒性强,在每次迭代过程中都会进行全局和局部的最优解搜索,因此能够找到最优解的概率大大增加。
相比于遗传算法来说,人工蜂群算法在局部的收敛和寻优能力上要更为出色,不会出现遗传算法的“早熟”现象,并且算法的复杂度也较低。但由于遗传算法有交叉以及变异的操作,因此遗传算法在全局最优值的搜索上要优于人工蜂群算法。此外,人工蜂群算法适用于进行连续函数的全局优化问题,而不适用于一些离散函数。
采蜜机制:
2.7 强化学习
该方法算是较新的一个解决方案,因为和我的需求场景不太适用,所以没有进一步了解。
感兴趣的小伙伴萌,可以看看下面这两篇论文。
《分布式强化学习解决动态旅行商问题_陈浩杰》
《基于深度强化学习的海战场目标搜寻路径规划_杨清清》
2.8 部分比较
3.蚁群算法
蚁群算法由意大利科学家提出,是根据在蚂蚁寻找食物的过程中会在路径上释放信息素这一特性发明的。
3.1 改进蚁群算法
针对基本蚁群算法一般需要较长的搜索时间和容易出现停滞现象等不足,很多学者在此基础上提出改进算法,提高了算法的性能和效率。
3.1.1 精英蚂蚁系统
3.1.2 最大最小蚂蚁系统
为了克服基本蚁群系统中可能出现的停滞现象, Thomas Stutz le等人提出了最大-最小(MAX-MIN) 蚁群系统 , 主要有三方面的不同:
(1)与蚁群系统相似,为了充分利用循环最优解和目前为止找出的最优解,在每次循环之后,只有一只蚂蚁进行信息素更新。这只蚂蚁可能是找出当前循环中最优解的蚂蚁(迭代最优的蚂蚁),也可能是找出从实验开始以来最优解的蚂蚁(全局最优的蚂蚁);而在蚂蚁系统中,对所有蚂蚁走过的路径都进行信息素更新。
(2) 为避免搜索的停滞, 在每个解元素(TSP中是每条边) 上的信息素轨迹量的值域范围被限制在[min,Tmax] 区间内; 而在蚂蚁系统中信息素轨迹量不被限制,使得一些路径上的轨迹量远高于其他边,从而蚂蚁都沿着同条路径移动,阻止了进一步搜索更优解的行为。
(3)为使蚂蚁在算法的初始阶段能够更多地搜索新的解决方案,将信息素初始化为tmax;而在蚂蚁系统中没有这样的设置。
3.1.3 基于排序的蚁群算法
基于排序的蚁群算法(Rank-BasedAntSystem)是Bull n heimer、Hartl和Strauss等人提出的。在该算法中, 每个蚂蚁释放的信息素按照它们不同的等级进行挥发,另外类似于精英蚁群算法,精英蚂蚁在每次循环中释放更多的信息素。在修改信息素路径前,蚂蚁按照它们的旅行长度进行排名(短的靠前),蚂蚁释放信息素的量要和蚂蚁的排名相乘。在每次循环中,只有排名前w-1位的蚂蚁和精英蚂蚁才允许在路径上释放信息素。己知的最优路径给以最强的反馈,和系数w相乘;而排名第r位的蚂蚁则乘以系数“w-(≥0)。
信息素如下式所示:
3.1.4 自适应蚁群算法
基本蚁群系统让信息量最大的路径对每次路径的选择和信息量的更新起主要作用,但由于强化了最优信息反馈,就可能导致“早熟”停滞现象。而最大最小蚁群算法将各个路径上的信息量的更新限定在固定的范围内,这虽然在一定程度上避免了“早熟”停滞现象,但在解分布较分散时会导致收敛速度变慢。以上方法的共同缺点在于:它们都按一种固定不变的模式去更新信息量和确定每次路径的选择概率。
为了克服以上算法的不足, L.M.Gambardella和M.Dorigo提出了基于调节信息素挥发度的自适应蚁群算法。相对基本蚁群算法的改进如下:
(1)在每次循环结束后求出最优解,并将其保留。
(2)自适应地改变p值。当问题规模比较大时,由于信息量的挥发系数p的存在,使那些从未被搜索到的信息量会减小到接近于0,降低了算法的全局搜索能力;当p过大且解的信息量增大时,以前搜索过的解被选择的可能性过大,也会影响到算法的全局搜索能力;通过减小p虽然可以提高算法的全局搜索能力,但又会使算法的收敛速度降低。因此可以自适应地改变p的值。p的初始值p(to)=1;当算法求得的最优值在N次循环内没有明显改进时,p减为:
传送带:基于matlab蚁群算法求解旅行商问题
3.2 和其它算法的结合
相关引用:
2.1-2.3 小节:《基于RFID移动定位的智慧景区中路径规划研究》(蚁群和A*结合)
2.4 小节:遗传算法、蚁群算法、粒子群算法解决TSP总结 matlab代码
2.5 小节:《基于智能终端的室内融合定位算法的研究》
2.6 小节:人工蜂群算法详解(可大致了解蜂群思想)
第3节:
蚁群算法(ACO)解决TSP问题(理论阐述)
蚁群算法原理及matlab代码实现
遗传算法、蚁群算法、粒子群算法解决TSP总结 matlab代码 (matlab代码,简单明晰,推荐)
人工智能结课作业-遗传算法/粒子群寻优/蚁群算法解决TSP问题(python代码,可以看下结论对比)
3.2小节:
基于matlab蚁群算法求解旅行商问题(蚁群相关概念较多,还包括一些改进方式)