目录
1、基本蚁群算法
基本蚁群算法可以表述如下:在算法的初始时刻,将 \(m\) 只蚂蚁随机地放到 \(n\) 座城市,同时,将每只蚂蚁的禁忌表 \(tabu\) 的第一个元素设置为它当前所在的城市。此时各路径上的信息素量相等,设 \(\tau_{ij}(0) = c\)(\(c\) 为一较小的常数),接下来,每只蚂蚁根据路径上残留的信息素量和启发式信息(两城市间的距离)独立地选择下一座城市,在时刻 \(t\),蚂蚁 \(k\) 从城市 \(i\) 转移到城市 \(j\) 的概率 \(p_{ij}^k(t)\)为:
$$p_{ij}^k(t) = \begin{cases} \frac{[\tau_{ij}(t)]^{\alpha} \cdot [\eta_{ij}(t)]^{\beta}}{\sum_{s \in J_k(i)} {[\tau_{is}(t)]^{\alpha} \cdot [\eta_{is}(t)]^{\beta}}}, & \text{当 \(j \in J_k(i)\) 时} \\ 0, & \text{其它} \\ \end{cases} \quad \text {(1)} $$
其中,\(J_k(i) = \lbrace 1,2,…,n \rbrace -tabu_k\) 表示蚂蚁 k 下一步允许选择的城市集合。禁忌 表 \(tabu_k\) 记录了蚂蚁 k 当前走过的城市。当所有 n 座城市都加入到禁忌表 \(tabu_k\) 中时,蚂蚁 k 便完成了一次周游,此时蚂蚁 k 所走过的路径便是 TSP 问题的一个可行解。式(1)中的 \(\eta_{ij}\) 是一个启发式因子,表示蚂蚁从城市 i 转移到城市 j 的期望程度。在蚁群算法中,\(\eta_{ij}\) 通常取城市 i 与城市 j 之间距离的倒数。\alpha 和 \beta 分别表示信息素和期望启发式因子的相对重要程度。当所有蚂蚁完成一次周游 后,各路径上的信息素根据式(2)更新:
$$ \tau_{ij}(t+n)=(1- \rho) \cdot \tau_{ij}(t)+ \Delta \tau_{ij} \quad \text {(2)} $$
$$ \Delta \tau_{ij}= \sum_{k=1}^{m} \Delta \tau_{ij}^k \quad \text {(3)} $$
其中:\(\rho(0< \rho <1)\)表示路径上信息素的蒸发系数,\(1- \rho\) 表示信息素的持久性系数;\(\Delta \tau_{ij}\) 表示本次迭代中边 \(ij\) 上信息素的增量,\(\Delta \tau_{ij}^k\) 表示第 k 只蚂蚁在本次迭代中留在边 \(ij\) 上的信息素量。如果蚂蚁 k 没有经过边 \(ij\),则 \(\Delta \tau_{ij}^k\) 的值为零。\(\Delta \tau_{ij}^k\) 表示为:
$$\Delta \tau_{ij}^k = \begin{cases} Q/L_K, & \text{当蚂蚁 k 在本次周游中经过边 \(ij\) 时} \\ 0, & \text{其它} \\ \end{cases} \quad \text {(4)} $$
其中,Q 为正常数,\(L_K\)表示第 k 只蚂蚁在本次周游中所走过路径的长度。
M. Dorigo 提出了 3 种蚁群算法的模型,式(4)称为 ant-cycle,另外两个模型分别称为 ant-quantity 和 ant-density,其差别主要在(4)式,即在 ant-quantity 模型中为:
$$\Delta \tau_{ij}^k = \begin{cases} Q/d_{ij}, & \text{当蚂蚁 k 在时刻 t 和 t+1 经过边 \(ij\) 时} \\ 0, & \text{其它} \\ \end{cases} \quad \text {(5)} $$
在 ant-density 模型中为:
$$\Delta \tau_{ij}^k = \begin{cases} Q, & \text{当蚂蚁 k 在时刻 t 和 t+1 经过边 \(ij\) 时} \\ 0, & \text{其它} \\ \end{cases} \quad \text {(6)} $$
蚁群算法实际上是正反馈原理和启发式算法相结合的一种算法。在选择路径时,蚂蚁不仅利用了路径上的信息素,而且用到了城市间距离的倒数作为启发式因子。实验结果表明,ant-cycle 模型比 ant-quantity 和 ant-density 模型有更好的性能。这是因为 ant-cycle 模型利用全局信息更新路径上的信息素量,而 ant-quantity 和 ant-density 模型使用局部信息。
2、基本蚁群算法的流程
基本蚁群算法的具体实现步骤如下:
(1)参数初始化。令时间 \(t = 0\) 和循环次数 \(N_c = 0\),设置最大循环次数 G,将 m 个蚂蚁置于 n 个元素(城市)上,令有向图上每条边 (i,j) 的初始化信息量 \(\tau_{ij}(t) = c\),其中 \(c\) 表示常数,且初始时刻 \(\Delta \tau_{ij}(0) = 0\)。
(2)循环次数 \(N_c = N_c + 1\)。
(3)蚂蚁的禁忌表索引号 k = 1。
(4)蚂蚁数目 k = k + 1。
(5)蚂蚁个体根据状态转移概率公式(1)计算的概率选择元素 j 并前进,\(j \in J_k(i)\)。
(6)修改禁忌表指针,即选择好之后将蚂蚁移动到新的元素,并把该元素移动到该蚂蚁个体的禁忌表中。
(7)若集合 C 中元素未遍历完,即 k < m,则跳转到第(4)步;否则执行第(8)步。
(8)记录本次最佳路线。
(9)根据式(2)和式(3)更新每条路径上的信息量。
(10)若满足结束条件,即如果循环次数 \(N_c \geq G\) ,则循环结束并输出程序优化结果;否则清空禁忌表并跳转到第(2)步。
蚁群算法的运算流程如下图所示:
3、关键参数说明
在蚁群算法中,不仅信息素和启发函数乘积以及蚂蚁之间的合作行为会严重影响到算法的收敛性,蚁群算法的参数也是影响其求解性能和效率的关键因素。信息素启发式因子 α、期望启发因子 β、信息素蒸发系数 ρ、信息素强度 Q、蚂蚁数目 m 等都是非常重要的参数,其选取方法和选取原则直接影响到蚁群算法的全局收敛性和求解效率。
3.1 信息素启发式因子 α
信息素启发式因子 α 代表信息量对是否选择当前路径的影响程度,即反映蚂蚁在运动过程中所积累的信息量在指导蚁群搜索中的相对重要程度。α 的大小反映了蚁群在路径搜索中随机性因素作用的强度,其值越大,蚂蚁在选择以前走过的路径的可能性就越大,搜索的随机性就会减弱;而当启发式因子 α 的值过小时,则易使蚁群的搜索过早陷于局部最优。根据经验,信息素启发式因子 α 取值范围一般为 [1,4] 时,蚁群算法的综合求解性能较好。
3.2 期望启发因子 β
期望启发因子 β 表示在搜索时路径上的信息素在指导蚂蚁选择路径时的向导性,它的大小反映了蚁群在搜索最优路径的过程中的先验性和确定性因素的作用强度。期望启发因子 β 的值越大,蚂蚁在某个局部点上选择局部最短路径的可能性就越大,虽然这个时候算法的收敛速度得以加快,但蚁群搜索最优路径的随机性减弱,而此时搜索易于陷入局部最优解。根据经验,期望启发因子 β 取值范围一般为 [3,5] 时,蚁群算法的综合求解性能较好。