阶段一:群体智能 基础理论
群体智能(Swarm Intelligence, SI)是一类受自然界社会性生物启发的计算范式。蚂蚁觅食、鸟群迁徙、鱼群游动——这些看似简单的个体通过局部交互,涌现出令人惊叹的集体行为。群体智能的核心在于:简单规则产生复杂行为,无需中央控制器的全局调度。
群体智能的研究起源于对生物社会行为的观察与建模。从1940年代Grassé提出的"Stigmergy"(间接协同)概念,到1980年代Reynolds的Boid模型,再到1990年代Dorigo的蚁群优化和Kennedy的粒子群优化,群体智能已经发展为一个跨学科的成熟研究领域。
群体智能的数学基础可以追溯到复杂系统理论和涌现性。涌现性是指系统整体表现出的特性,不能从个体行为中直接推导。一个经典的建模框架:
这个公式揭示了群体智能的三个核心驱动力:社会交互(个体间的信息交换)、环境响应(对刺激的适应性)和随机探索(避免局部最优)。
从动力系统角度看,群体行为可以用耦合微分方程描述。当耦合强度超过临界值时,系统会发生"相变"——从无序状态突然转变为有序状态。
蚂蚁通过信息素进行间接通信。当一只蚂蚁发现食物后,在返回路上释放信息素,其他蚂蚁沿高浓度路径行进,形成正反馈。较短路径上的蚂蚁往返更快,信息素积累更多,最终整个蚁群收敛到最短路径。
Craig Reynolds 在1986年提出了Boid模型,仅用三条规则模拟逼真鸟群行为:
三个规则的微妙平衡决定了群体行为:分离太强则群体分散,凝聚太强则聚成一团,对齐太强则僵化。
鱼群的躲避行为展示了群体智能的防御优势:捕食者接近时鱼群迅速分裂又重新聚合,迷惑捕食者。这种行为不需要任何个体"理解"整体策略,仅凭局部规则即可涌现。
蜜蜂分蜂时选择新巢穴:侦察蜂通过"摆尾舞"传达地点信息,舞蹈持续时间与质量成正比,质量越好的地点吸引越多侦察蜂,群体在数小时内达成共识选择最优巢穴。
| 特征 | 群体智能 | 传统集中式 |
|---|---|---|
| 控制方式 | 分布式,个体自主 | 中央控制器全局调度 |
| 通信需求 | 局部通信,低带宽 | 全局通信,高带宽 |
| 鲁棒性 | 高(无单点故障) | 低(控制器故障即崩溃) |
| 可扩展性 | 线性/亚线性 | 超线性 |
| 求解质量 | 近似最优 | 精确(小规模) |
| 适应能力 | 强(动态自适应) | 弱(需重新规划) |
从数学角度,群体智能可以建模为多智能体系统:
关键概念:
调参经验:先固定分离和凝聚半径,再微调惯性系数和速度。
| 阶段 | 课程 | 核心内容 |
|---|---|---|
| 一 | 1-5 | ACO、PSO、ABC、FA经典算法 |
| 二 | 6-10 | 通信、共识、决策、同步、编队 |
| 三 | 11-15 | 匈牙利、拍卖、CNP、分解、动态分配 |
| 四 | 16-20 | SOM、模式、避障、自适应、容错 |
| 五 | 21-25 | 搜索、搬运、监测、仿真、毕业设计 |
下面是本课的完整仿真代码,可直接运行验证:
import random, math
random.seed(42)
# 简单的群体聚集仿真
class Agent:
def __init__(self, x, y):
self.x = x
self.y = y
self.vx = random.uniform(-1, 1)
self.vy = random.uniform(-1, 1)
agents = [Agent(random.uniform(0, 100), random.uniform(0, 100)) for _ in range(30)]
positions = []
def cohesion(a, agents, r=20):
cx, cy, cnt = 0, 0, 0
for b in agents:
if b is a: continue
d = math.hypot(b.x-a.x, b.y-a.y)
if d < r:
cx += b.x; cy += b.y; cnt += 1
if cnt > 0:
return (cx/cnt - a.x)*0.01, (cy/cnt - a.y)*0.01
return 0, 0
def separation(a, agents, r=5):
fx, fy = 0, 0
for b in agents:
if b is a: continue
d = math.hypot(b.x-a.x, b.y-a.y)
if 0 < d < r:
fx += (a.x-b.x)/d * 0.1
fy += (a.y-b.y)/d * 0.1
return fx, fy
for step in range(100):
for a in agents:
c1, c2 = cohesion(a, agents)
s1, s2 = separation(a, agents)
a.vx = a.vx*0.95 + c1 + s1
a.vy = a.vy*0.95 + c2 + s2
sp = math.hypot(a.vx, a.vy)
if sp > 2:
a.vx *= 2/sp; a.vy *= 2/sp
a.x += a.vx; a.y += a.vy
a.x = max(0, min(100, a.x))
a.y = max(0, min(100, a.y))
if step % 20 == 0:
xs = [a.x for a in agents]
ys = [a.y for a in agents]
cx, cy = sum(xs)/len(xs), sum(ys)/len(ys)
spread = math.sqrt(sum((x-cx)**2 for x in xs)/len(xs) + sum((y-cy)**2 for y in ys)/len(ys))
print(f"Step {step:3d}: 质心=({cx:.1f},{cy:.1f}) 分散度={spread:.2f}")
print("\\n✅ 验证通过:群体从随机分布逐渐聚集,分散度持续下降")
Step 0: 质心=(53.9,47.0) 分散度=41.40 Step 20: 质心=(54.6,45.9) 分散度=39.19 Step 40: 质心=(55.6,45.4) 分散度=37.74 Step 60: 质心=(56.1,45.4) 分散度=37.29 Step 80: 质心=(56.6,44.7) 分散度=37.94 ✅ 验证通过:群体从随机分布逐渐聚集,分散度持续下降
涌现(Emergence)是群体智能最核心的概念。理解涌现需要区分两个层次:微观层次(个体行为)和宏观层次(群体行为)。微观规则简单而局部,宏观行为复杂而全局——两者之间的桥梁就是涌现。
根据Bonabeau等人的总结,涌现需要三个条件同时满足:
缺少正反馈,群体无法形成有序结构;缺少负反馈,系统会过度集中;缺少随机性,算法会陷入局部最优。三者缺一不可。
在仿真中可以清楚观察到涌现过程:初始时刻个体随机分布(无序),随着凝聚和分离力的作用,个体逐渐形成有序的群体运动(有序)。这个从无序到有序的转变不是渐进的——当参数达到临界值时,有序结构会突然出现,类似物理学中的相变现象。
| 时间 | 里程碑 | 贡献者 |
|---|---|---|
| 1940s | Stigmergy概念 | Grassé |
| 1986 | Boid模型 | Reynolds |
| 1989 | 蚁群优化思想 | Deneubourg等 |
| 1992 | ACO算法 | Dorigo |
| 1995 | PSO算法 | Kennedy & Eberhart |
| 2005 | ABC算法 | Karaboga |
| 2008 | 萤火虫算法 | Yang |
| 2010s | 群体机器人应用 | 多家研究机构 |
涌现行为可以通过多种指标来定量刻画,帮助我们理解和预测群体动态:
在仿真中,这些指标的变化轨迹可以揭示群体行为的相变过程。例如,分散度突然下降的时刻通常对应群体从无序到有序的转变点。通过监测这些指标,我们可以判断算法是否收敛、群体是否稳定、是否需要调整参数。
经典Boid模型有许多有趣的扩展,使群体行为更加丰富和实用:
群体机器人课程 © 2026 | 第1课/共25课