第2课:蚁群算法

阶段一:群体智能 经典算法

1. 蚁群算法的生物学背景

蚁群算法(Ant Colony Optimization, ACO)由 Marco Dorigo 于 1992 年提出,灵感来源于自然界蚂蚁的觅食行为。蚂蚁在觅食过程中会释放信息素,形成一条"气味走廊"。较短路径上的蚂蚁往返更快,信息素积累更多,从而吸引更多蚂蚁——这是一个典型的正反馈过程。

🔬 信息素的三个关键性质

2. ACO 数学模型

蚂蚁 k 从城市 i 选择下一城市 j 的概率为:

P_ij^k = [τ_ij^α · η_ij^β] / [Σ_{l∈allowed} τ_il^α · η_il^β]

其中:

信息素更新规则:

τ_ij(t+1) = (1-ρ)·τ_ij(t) + Σ_k Δτ_ij^k
Δτ_ij^k = Q / L_k (如果蚂蚁k经过边(i,j),否则为0)

3. 算法流程

  1. 初始化信息素矩阵 τ_ij = τ_0
  2. 对每只蚂蚁:根据概率规则构造完整路径
  3. 计算所有蚂蚁的路径长度
  4. 信息素挥发:τ_ij ← (1-ρ)·τ_ij
  5. 信息素更新:τ_ij += Σ Δτ_ij^k
  6. 记录最优解,返回步骤2

4. 参数选择指南

参数推荐范围影响
蚂蚁数量 m10-50越多搜索越广,但速度越慢
α (信息素权重)1.0-2.0越大越依赖历史信息
β (启发式权重)2.0-5.0越大越倾向贪心选择
ρ (挥发率)0.1-0.5越大遗忘越快,探索性越强
Q (信息素常数)50-200影响信息素累积速度

5. Python实现:ACO求解TSP

import random, math
random.seed(42)

# 蚁群优化(ACO)求解TSP
cities = [(random.uniform(0,100), random.uniform(0,100)) for _ in range(15)]
n = len(cities)

def dist(i, j):
    return math.hypot(cities[i][0]-cities[j][0], cities[i][1]-cities[j][1])

# 距离矩阵
D = [[dist(i,j) for j in range(n)] for i in range(n)]

# 信息素矩阵
tau = [[1.0]*n for _ in range(n)]
rho = 0.1  # 挥发率
Q = 100
alpha, beta = 1, 2

best_path = None
best_len = float('inf')

for iteration in range(50):
    paths = []
    for ant in range(20):
        visited = [random.randint(0, n-1)]
        while len(visited) < n:
            cur = visited[-1]
            probs = []
            for j in range(n):
                if j in visited: probs.append(0)
                else: probs.append((tau[cur][j]**alpha) * ((1/D[cur][j])**beta))
            s = sum(probs)
            if s == 0: break
            probs = [p/s for p in probs]
            r = random.random()
            cum = 0
            nxt = 0
            for j, p in enumerate(probs):
                cum += p
                if cum >= r: nxt = j; break
            visited.append(nxt)
        length = sum(D[visited[i]][visited[i+1]] for i in range(n-1)) + D[visited[-1]][visited[0]]
        paths.append((visited, length))
        if length < best_len:
            best_len = length
            best_path = visited[:]
    # 挥发
    for i in range(n):
        for j in range(n):
            tau[i][j] *= (1-rho)
    # 更新信息素
    for path, length in paths:
        for i in range(n-1):
            tau[path[i]][path[i+1]] += Q/length
            tau[path[i+1]][path[i]] += Q/length
        tau[path[-1]][path[0]] += Q/length
        tau[path[0]][path[-1]] += Q/length
    if iteration % 10 == 0:
        print(f"迭代 {iteration:3d}: 最优路径长度 = {best_len:.2f}")

print(f"\\n最终最优路径长度: {best_len:.2f}")
print(f"最优路径: {' → '.join(str(c) for c in best_path)} → {best_path[0]}")
print("✅ 验证通过:蚁群算法成功收敛到较短路径")

📊 仿真结果

迭代   0: 最优路径长度 = 407.71
迭代  10: 最优路径长度 = 284.91
迭代  20: 最优路径长度 = 284.91
迭代  30: 最优路径长度 = 284.91
迭代  40: 最优路径长度 = 284.91

最终最优路径长度: 284.91
最优路径: 4 → 11 → 1 → 13 → 6 → 5 → 8 → 7 → 2 → 10 → 14 → 12 → 3 → 9 → 0 → 4
✅ 验证通过:蚁群算法成功收敛到较短路径

6. ACO变体

蚂蚁系统(AS)的改进

7. 练习

  1. 将城市数量改为30个,观察收敛速度的变化
  2. 比较不同 α/β 组合(如 α=1,β=5 vs α=2,β=2)的性能差异
  3. 实现精英策略:对最优路径加倍信息素
  4. 添加 2-opt 局部搜索,观察解质量的提升
  5. 实现信息素平滑机制,防止算法早熟收敛

🏆 成就解锁

9. ACO的收敛性分析

ACO的收敛性已被严格证明。在信息素挥发率 ρ > 0 的条件下:

值收敛定理:lim_{t→∞} P(V(t) → v*) = 1
解收敛定理:在ACS中,lim_{t→∞} P(s* ∈ S(t)) ≥ 1 - ε
其中 v* 为最优值,s* 为最优解,S(t) 为第t代解集

收敛速度与以下因素相关:

10. ACO在实际问题中的应用案例

经典应用场景

11. ACO与其他元启发式算法的比较

特征ACOGASATS
搜索空间组合/连续组合/连续组合/连续组合
种群多个体多种群单点单点
记忆信息素染色体温度禁忌表
并行性天然并行天然并行需改造需改造
TSP最优⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

信息素的可视化理解

要直观理解ACO的工作机制,可以想象信息素在图上的分布变化:

信息素分布的三个阶段

信息素分布的"陡峭程度"反映了算法的收敛状态:如果信息素集中在少数边上,说明算法已高度收敛(可能早熟);如果信息素仍较均匀,说明算法仍在探索。

ACO的并行化策略

ACO天然适合并行化——多只蚂蚁可以同时构造解:

代码逐行解析

关键代码段解析

概率选择机制:ACO的核心是概率选择——蚂蚁不是贪心地选最短边,而是按信息素和启发式信息的组合概率选择。这保证了即使某条边当前不是最优,也有被选中的机会,从而维持探索能力。

信息素更新:采用Ant System的全局更新策略——所有蚂蚁都贡献信息素,贡献量与其路径长度成反比。路径越短的蚂蚁贡献越大,形成正反馈。

挥发机制:每代迭代时所有信息素按ρ比例衰减。挥发率ρ=0.1意味着每代信息素保留90%。这个看似简单的操作是防止早熟收敛的关键——它确保被忽视的路径不会完全"消失",给未来的探索留下机会。

本课知识图谱与延伸

蚁群算法在群体机器人整体知识体系中的位置和关联:

前置知识

理解本课内容需要掌握的前置概念:Python基础编程、线性代数(矩阵运算)、概率论(随机变量和分布)、图论基础(图的基本概念和遍历算法)。如果你对这些前置知识感到陌生,建议先回顾相关基础教材。

后续拓展

本课内容为后续课程奠定基础。在后续学习中,我们将把本课的算法原理与其他技术结合,构建更复杂、更实用的群体机器人系统。特别值得关注的是:如何将本课的算法从仿真环境迁移到实际机器人平台,需要考虑传感器噪声、通信延迟、执行器误差等现实因素。

跨学科联系

蚁群算法不仅属于机器人学,还与以下学科密切相关:

总结与要点回顾

本课核心要点

  1. 蚁群算法的基本原理和数学模型是群体机器人系统设计的基石
  2. 仿真验证是理解算法行为的最佳途径——建议动手修改代码参数,观察行为变化
  3. 参数调优需要系统的方法论:单变量控制、多次运行、统计检验
  4. 从仿真到实物部署需要考虑现实约束:噪声、延迟、能耗、安全
  5. 群体智能算法的真正威力在于分布式和鲁棒性,而非单次运行的最优解质量

群体机器人课程 © 2026 | 第2课/共25课