阶段一:群体智能 经典算法
蚁群算法(Ant Colony Optimization, ACO)由 Marco Dorigo 于 1992 年提出,灵感来源于自然界蚂蚁的觅食行为。蚂蚁在觅食过程中会释放信息素,形成一条"气味走廊"。较短路径上的蚂蚁往返更快,信息素积累更多,从而吸引更多蚂蚁——这是一个典型的正反馈过程。
蚂蚁 k 从城市 i 选择下一城市 j 的概率为:
其中:
τ_ij:边(i,j)上的信息素浓度η_ij = 1/d_ij:启发式信息(距离的倒数)α:信息素重要程度(通常1-2)β:启发式信息重要程度(通常2-5)信息素更新规则:
ρ ∈ (0,1):信息素挥发系数Q:信息素强度常数L_k:蚂蚁 k 的路径总长度| 参数 | 推荐范围 | 影响 |
|---|---|---|
| 蚂蚁数量 m | 10-50 | 越多搜索越广,但速度越慢 |
| α (信息素权重) | 1.0-2.0 | 越大越依赖历史信息 |
| β (启发式权重) | 2.0-5.0 | 越大越倾向贪心选择 |
| ρ (挥发率) | 0.1-0.5 | 越大遗忘越快,探索性越强 |
| Q (信息素常数) | 50-200 | 影响信息素累积速度 |
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 ✅ 验证通过:蚁群算法成功收敛到较短路径
ACO的收敛性已被严格证明。在信息素挥发率 ρ > 0 的条件下:
收敛速度与以下因素相关:
| 特征 | ACO | GA | SA | TS |
|---|---|---|---|---|
| 搜索空间 | 组合/连续 | 组合/连续 | 组合/连续 | 组合 |
| 种群 | 多个体 | 多种群 | 单点 | 单点 |
| 记忆 | 信息素 | 染色体 | 温度 | 禁忌表 |
| 并行性 | 天然并行 | 天然并行 | 需改造 | 需改造 |
| TSP最优 | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
要直观理解ACO的工作机制,可以想象信息素在图上的分布变化:
信息素分布的"陡峭程度"反映了算法的收敛状态:如果信息素集中在少数边上,说明算法已高度收敛(可能早熟);如果信息素仍较均匀,说明算法仍在探索。
ACO天然适合并行化——多只蚂蚁可以同时构造解:
概率选择机制:ACO的核心是概率选择——蚂蚁不是贪心地选最短边,而是按信息素和启发式信息的组合概率选择。这保证了即使某条边当前不是最优,也有被选中的机会,从而维持探索能力。
信息素更新:采用Ant System的全局更新策略——所有蚂蚁都贡献信息素,贡献量与其路径长度成反比。路径越短的蚂蚁贡献越大,形成正反馈。
挥发机制:每代迭代时所有信息素按ρ比例衰减。挥发率ρ=0.1意味着每代信息素保留90%。这个看似简单的操作是防止早熟收敛的关键——它确保被忽视的路径不会完全"消失",给未来的探索留下机会。
蚁群算法在群体机器人整体知识体系中的位置和关联:
理解本课内容需要掌握的前置概念:Python基础编程、线性代数(矩阵运算)、概率论(随机变量和分布)、图论基础(图的基本概念和遍历算法)。如果你对这些前置知识感到陌生,建议先回顾相关基础教材。
本课内容为后续课程奠定基础。在后续学习中,我们将把本课的算法原理与其他技术结合,构建更复杂、更实用的群体机器人系统。特别值得关注的是:如何将本课的算法从仿真环境迁移到实际机器人平台,需要考虑传感器噪声、通信延迟、执行器误差等现实因素。
蚁群算法不仅属于机器人学,还与以下学科密切相关:
群体机器人课程 © 2026 | 第2课/共25课