3.算法应用——TSP问题
3.1 TSP旅行商介绍
首先,我们先回顾一下,什么是TSP旅行商问题:
假设有一位邮递员,他从初始城市(任意一城市)出发,途径所有城市并回到初始城市,那么他一共会有
(n-1)!
条路径。从中找出那条最短路径,这就是TSP旅行商问题。
如果我们遍历的去找那个最短路径,那么随着城市的增加,计算量大大增加。
3.2 利用蚁群算法解决TSP问题
在这里,蚂蚁仅有信息素这一项能力是不够的。所以我们给与蚂蚁一些其他的能力
- 蚂蚁在一次旅行中不会重复访问相同的城市
- 蚂蚁可以知晓城市之间的距离。
- 蚂蚁在路上会释放信息素
- 蚂蚁在选择下一个城市的概率依靠以下公式:
参数名称 | 参数意义 | 参数设置过大 | 参数设置过小 |
信息素因子ɑ | 反映了蚂蚁运动过程中路径上积累的信息素的量在指导蚁群搜索中的相对重要程度。取值范围通常在[1, 4]之间。 | 蚂蚁选择以前已经走过的路可能性较大,容易使随机搜索性减弱 | 蚁群易陷入纯粹的随机搜索,使种群陷入局部最优 |
启发函数因子𝛽 | 反映了启发式信息在指导蚁群搜索中的相对重要程度,蚁群寻优过程中先验性、确定性因素作用的强度取值范围在[0, 5]之间 | 虽然收敛速度加快,但是易陷入局部最优 | 蚁群易陷入纯粹的随机搜索,很难找到最优解 |
例:下图为计算蚂蚁从起点城市2到可达城市的概率(套公式,很好理解):
图2. 此图和此节部分内容借鉴于秃头小苏:蚁群算法(实例帮助理解)
OK,蚂蚁有了这些能力后,我们只需要控制一下流程,就可以解决TSP问题了,下面是给出了此问题的一种常用的解决流程
蚁群算法解决TSP问题的算法流程
初始化信息素浓度矩阵,启发式函数,以及蚂蚁的位置。
每只蚂蚁按照信息素和启发式函数的概率选择下一个城市。
记录蚂蚁的路径和距离。
在所有蚂蚁走完所有城市之后,根据蚂蚁走过的路径和距离更新信息素浓度矩阵
如果未达到停止条件,则返回步骤2。
其中,停止条件可以是迭代次数达到预设值或者最佳解不再改变。
起点的选择对最短路径是有影响的。不同的起点可能会导致不同的最短路径。在蚁群算法中,通过随机选择起始点,可以增加搜索的广度,从而有更大的可能性找到全局最优解。
信息素更新的时机一般有两种方式:
在每个迭代周期结束后进行更新,即在所有蚂蚁完成当前迭代周期后,根据其路径长度和信息素更新信息素浓度。
在每只蚂蚁走遍所有城市之后,立即更新信息素浓度。
信息素更新公式:
其中,ρ是信息素挥发速度,是蚂蚁 k 在迭代 t 中走过路径 i 到 j 所留下的信息素,m 是蚂蚁的数量。
在每个迭代周期结束后进行更新或在每只蚂蚁走遍所有城市之后立即更新信息素浓度均可。
Delta tau 是蚂蚁 k 在迭代 t 中走过路径 i 到 j 所留下的信息素,不同的 Delta tau 规则有以下几种:
以上规则中,静态规则是最简单的,但是可能会导致信息素的浓度过高或过低,从而影响搜索效果。动态规则可以根据搜索的进展情况动态调整信息素的浓度,适应性更强。最大值规则可以防止信息素浓度过高,但可能会导致搜索无法跳出局部最优解。
例(静态规则):下图为信息素的更新过程,假设初始时各路径信息素浓度为10。
总结一下:
蚁群算法流程:
初始化信息素浓度矩阵𝜏_{ij}(t),启发式函数𝜂_{ij},以及蚂蚁的位置。
每只蚂蚁按照信息素和启发式函数的概率选择下一个城市。
记录蚂蚁的路径和距离。
在所有蚂蚁走完所有城市之后,根据蚂蚁走过的路径和距离更新信息素浓度矩阵𝜏_{ij}(t)。
如果未达到停止条件,则返回步骤2。
其中,停止条件可以是迭代次数达到预设值或者最佳解不再改变。
起点的选择对最短路径是有影响的。不同的起点可能会导致不同的最短路径。在蚁群算法中,通过随机选择起始点,可以增加搜索的广度,从而有更大的可能性找到全局最优解。
信息素更新的时机一般有两种方式:
在每个迭代周期结束后进行更新,即在所有蚂蚁完成当前迭代周期后,根据其路径长度和信息素更新信息素浓度。
在每只蚂蚁走遍所有城市之后,立即更新信息素浓度。
信息素更新公式:
其中,ρ 是信息素挥发速度,是蚂蚁 k 在迭代 t 中走过路径 i 到 j 所留下的信息素,m 是蚂蚁的数量。
在每个迭代周期结束后进行更新或在每只蚂蚁走遍所有城市之后立即更新信息素浓度均可。
Delta tau 是蚂蚁 k 在迭代 t 中走过路径 i 到 j 所留下的信息素,不同的 Delta tau 规则有以下几种: