system: [SYSTEM]

user: 2. 改进的自适应蚁群算法 蚁群算法是以蚂蚁在寻找食物过程中寻找最短路径为原型的一种模拟进化算法。蚁群内的蚂蚁会在其经过的路径上释放信息素，其他蚂蚁感知到释放的信息素后会沿着信息素浓度较高路径行走，每只路过的蚂蚁都在这条路径上释放信息素，因此形成一种类似正反馈的机制，经过一段时间后，最优路径上的信息素浓度越来越大，整个蚁群就会沿着最短路径到达食物源了。 2.1. 状态转移概率的改进 蚁群算法中，蚂蚁主要是通过其他蚂蚁在移动期间散发的信息素浓度的大小，以及当前节点选择下一节点的启发信息，选择所要行走的移动路径。蚂蚁从当前节点转移到下一节点主要有涉及到概率选择和信息素更新这两个关键因素。当蚂蚁在行驶过程中存在复杂障碍物时，会大大降低蚂蚁搜索路径的准确性，为了使机器人在移动过程中能够尽可能地避开障碍物安全行驶，获取有效的避障路径，在路径选择概率公式中增加了安全性因素 φ ( i ， j ) ， φ ( i ， j ) ∈ [ 0 ， 1 ] 。蚂蚁在当前节点i选择下一节点j时的安全程度用式(1)表示： φ ( i ， j ) = 1 e ϕ ( j ) (1) 其中， ϕ ( j ) = m j − min ( m i j ) 表示蚂蚁转移到节点j的安全性， m j 是下一个节点j的障碍物数， min ( m i j ) 是蚂蚁从当前节点 i 转移到下一个所有可行节点中障碍物数最小值。 ϕ ( j ) 越小表示障碍物越少，移动路径越安全，对蚂蚁的启发作用越强 [ 10 ]。 改进后的路径选择概率公式为式(2)，即当 q > q 0 时，第k只蚂蚁由节点 转移到下一个节点j的概率为： P i j k ( t ) = { τ i j α ( t ) η i j β ( t ) φ γ ( i ， j ) ( t ) ∑ s ∈ a l l o w e d k i τ i s α ( t ) η i s β ( t ) φ γ ( i ， j ) ( t ) j ∈ allowed k i 0 j ∉ allowed k i (2) 其中， τ i j ( t ) 表示在t时刻当前节点i到下一个节点j途中信息素的浓度； η i j ( t ) 表示在t时刻当前节点i到下一个节点j路径上的启发信息， η i j = 1 d i j ， d i j 为节点i到节点j的欧氏距离； α 表示信息素增强系数， 其值越大对初始随机的信息素影响越深； β 为期望启发式信息系数，其值越大蚂蚁就越倾向于目标节点； γ 为安全程度因子，其值越小蚂蚁移动的路径就越安全； s ∈ allowed k i 表示蚂蚁 k 在当前节点i到下一个可选节点j的集合，每只蚂蚁对每个节点最多访问一次。 当 q ≤ q 0 时，第 k 只蚂蚁选取概率最大的节点 j ^ 作为目标节点： j ^ = arg max s ∈ allowed k i τ i s α ( t ) η i s β ( t ) φ γ ( i ， j ) ( t ) (3) q是均匀分布在0与1之间随机变量，依赖于时间t； q 0 ∈ ( 0 ， 1 ) 是蚂蚁状态转移的阈值。第k只蚂蚁从节点i转移到下一个节点j的规则由q与 q 0 比较的大小决定。 移动机器人在当前节点移动到周围可行节点距离目标节点差距较大，为了提高算法的收敛速度，在上述状态转移概率公式中引入加权因子 l ( l ∈ ( 0 ， 1 ) ) 。改进后的公式如下： P i j k ( t ) = { l ⋅ τ i j α ( t ) η i j β ( t ) φ γ ( i ， j ) ( t ) ∑ s ∈ a l l o w e d k i τ i s α ( t ) η i s β ( t ) φ γ ( i ， j ) ( t ) j ∈ allowed k i 0 j ∉ allowed k i (4) 2.2. 改进信息素更新机制 蚁群算法中，蚂蚁会以较高概率选择信息素浓度较高的路径，当搜索过的路径被重复搜索时，全局搜索能力下降，改变挥发系数虽然可以提高全局搜索率但是会降低收敛速度 [ 11 ]。因此提出一种自适应的改变节点i与节点j间信息素值的方法。设信息素挥发的系数为 ρ ，改进后的局部信息素更新公式下： τ i j ( t + 1 ) = ( 1 − ρ ) τ i j ( t ) + ρ Δ τ i j ( t ) (5) Δ τ i j ( t ) = ∑ k = 1 m Δ τ i j k ( t ) (6) Δ τ i j k ( t ) = Q i j L k L localbest + L localworst 2 (7) 其中， Δ τ i j k 表示第k只蚂蚁从节点i到节点j的最优路径； Q i j 表示蚂蚁从节点i到节点j最优路径的信息素浓度增加总和，是一个大于0的常数； L k 表示第k只蚂蚁此次迭代搜索的路径长度； L localworst 表示此次迭代后的最差路径长度； L localbest 表示此次迭代的最优路径长度。 当较短路径信息素浓度增加时，全局最优路径与单次迭代的最优路径相关性较大，容易陷入局部最优，因此在全局信息素更新规则中加入自适应动态因子，动态更新每次迭代最优路径的全局信息素浓度， 也动态更新了较优的局部最优解。传统算法的动态因子是 f ( x ) = 1 2 sgn ( x ) + 1 2 ， x 为最优路径长度，虽 然加强了最优路径上信息素浓度，但在较优路径上的信息素浓度没有及时更新。为了使较优路径信息素浓度更新更具有自适应性，使用双曲正切函数作为自适应动态因子 [ 12 ]，如式(8)： f ( x ) = 1 2 tanh ( ω x ) + 1 2 (8) 其中， ω 为控制双曲正切函数形状参数。 通过自适应地控制每次迭代的最优解的信息素浓度在当前最优解中的权重，及时更新较优路径上的信息素浓度，发挥较优路径信息素浓度的作用。改进后的全局信息素更新公式如下： τ i j ( t + 1 ) = ( 1 − ρ ) τ i j ( t ) + σ μ Δ τ i j (9) σ = 1 2 tan h ( ω L localbest − L best L ave − L best ⋅ L best + L worst 2 ) + 1 2 (10) 其中， L best 是所有路径中的最优路径长度； L worst 表示所有路径中的最差路径长度； L ave 表示路径的平均长度； μ 是给定的参数。 2.3. 改进后的算法步骤 步骤1初始化参数。设置初始位置S，目标位置T，最大迭代次数N，蚂蚁数m，信息素因子 α ，启发函数因子 β ，路径启发因子 η i j 。 步骤2定义节点i和节点j路径上的初始信息素浓度为 τ i j 。将m只蚂蚁放在初始位置S处，并将S写入禁忌表中，按照式(3)和式(4)选择下一个可以转移的目标点并将其添加到禁忌表中。 步骤3蚂蚁每次找到路径后，按照式(5)进行信息素局部更新。 步骤4重复步骤2和3，直到所有蚂蚁都到目标位置T，存储路径信息，得到m条由初始位置S到达目标位置T的路径集合 { l 1 ， l 2 ， ⋯ ， l m } 。 步骤5比较m条路径的长度并找出本次迭代的最优路径记为 L localbest ，求出m条路径的平均路径长度 L ave ，所有路径中的最优路径长度 L best ，所有路径中的最差解 L worst ，按照式(9)计算出自适应动态因子，并根据式(8)对信息素浓度进行全局更新。 步骤6重复步骤2~4，直到达到最大迭代次数N，比较输出结果，找到全局最优解。 流程图如图1。 图1. 改进自适应蚁群算法流程图