› Boids群集模拟器 返回
Emergent Behavior Simulator

Boids群集模拟器 — 群体涌现行为

分离、对齐、聚合三条简单规则,就足以在屏幕上生成栩栩如生的鱼群与鸟群。拖动权重滑块、放入天敌或引力源,看局部交互如何涌现出全局的群体智能。

参数设置
120
2.5
60 px
1.5
1.0
1.0
预设
显示选项
交互

点击→捕食者 / 右键→引力源 / 点击画布上的 Boid 也可切换关注对象

实时指标
120
Boid 数量
—
平均邻居数
—
对齐度 φ (0~1)
—
平均速度
—
实时群体动画

点击:添加捕食者 / 右键:添加引力源 / 长按:引力源

分离 对齐 聚合 合力(转向) 关注 Boid 的视野
理论与主要公式

每个 Boid 对视野半径 $r$ 内的邻居计算三种力:

  • 分离 (Separation): $\mathbf{F}_s = -\sum_{j \in N_{sep}}\frac{\mathbf{r}_{ij}}{|\mathbf{r}_{ij}|^2}$
  • 对齐 (Alignment): $\mathbf{F}_a = \langle \mathbf{v}_j \rangle - \mathbf{v}_i$
  • 聚合 (Cohesion): $\mathbf{F}_c = \langle \mathbf{x}_j \rangle - \mathbf{x}_i$

最终加速度:$\mathbf{a}_i = w_s \mathbf{F}_s + w_a \mathbf{F}_a + w_c \mathbf{F}_c$(在关注 Boid 上用上面三种颜色的向量和白色合力箭头可视化)

群体秩序(对齐度):$\varphi = \dfrac{1}{N}\left|\sum_i \hat{\mathbf{v}}_i\right|$($\varphi\to1$ 完全对齐,$\varphi\to0$ 无序)

速度限制在 $v_{max}$。到达边缘后从另一侧出现(环面空间)。邻域搜索用空间哈希实现 $O(N)$,保持 60fps。

什么是 Boids 模拟器

🙋
“Boid”是什么?看起来只是一些点在动,为什么会产生像鱼群那样复杂的运动?
🎓
粗略地说,每个 Boid 都是只遵守“分离”“对齐”“聚合”三条规则运动的聪明粒子。看那只发黄光的“关注 Boid”:红、蓝、绿箭头分别是分离、对齐、聚合的力,白色箭头是它们的合力,也就是实际的转向方向。用上面的滑块把“分离权重”调到 0 试试,红色箭头消失,个体之间开始相撞了吧?这就是避免碰撞的基本规则。
🙋
原来如此!改变每条规则的强度,运动就完全不同了。把“对齐”调强,它们会像军队一样整齐!“对齐度 φ”也接近 1 了。这在现实中也有应用吗?
🎓
没错!φ(序参量)是衡量群体整齐程度的指标,1 表示完全对齐,0 表示无序。实际中常用于 CG 的群众场景生成和游戏 NPC 的群体 AI。在 CAE 领域,它作为粒子法模拟的基础也很重要:只搜索附近粒子、把局部力加起来的计算结构,与 SPH 等粒子法是相通的。
🙋
原来和 CAE 也有关系!按下“添加捕食者”后,群体一下子分开逃走了。这是涌现的回避行为吗?
🎓
很敏锐!没有谁发出“快逃”的号令,只是每个 Boid 局部地加上远离捕食者的力,整个群体就会分开再重新聚集。仅靠局部信息就产生全局秩序,正是“涌现”的有趣之处。一边看关注 Boid 的向量和“平均邻居数”,一边观察行为从分散→成群→旋涡的变化吧。

常见问题

增大分离权重,个体间距离变大,群体容易散开;增大对齐权重,运动会朝一个方向整齐划一。增强聚合容易形成密集的团块,反之减弱则群体扩散。叠加在关注 Boid 上的红(分离)、蓝(对齐)、绿(聚合)向量和白色合力箭头,可以直接看到每条规则的贡献。
视野半径小时,每个 Boid 只能感知附近的个体,群体容易分裂。反之半径大时也会受到远处个体的影响,整体容易形成聚在一起的大群。关注 Boid 上的虚线圆和扇形表示它实际“看得见”的范围和视野。
本模拟器把画面边缘作为环面(周期边界)处理,Boid 会从另一侧重新出现,不会跑出画面。另外,分离权重极小时个体容易重叠。
它适合用于理解涌现基本原理的教学和演示。要再现真实生物的复杂行为(避障、对捕食者的反应等),需要追加规则并调整参数。

现实世界中的应用

计算机图形与游戏开发:在电影和游戏中被广泛用于生成自然的鸟群、鱼群或人群(如僵尸大军)动画。无需在每个智能体中加入复杂的 AI,就能高效制作大规模群体场景。

群体机器人学:作为协调大量自主机器人动作的控制算法基础得到应用。例如,用机器人群在灾害现场搜索、在仓库中搬运物品的研究正在进行。

粒子法模拟(CAE):SPH(光滑粒子流体动力学)等基于粒子的流体分析会计算粒子间的局部相互作用。Boids 算法作为这类粒子间邻域搜索和力计算的原型,在教学上很有用。

群体智能算法(PSO):“粒子群优化(Particle Swarm Optimization)”是把 Boids 的概念应用到优化问题上的方法。搜索空间中的粒子(候选解)在共享自身最优解和整个群体最优解信息的同时向最优解移动,被用于工程设计优化等。

常见误解与注意事项

首先,刚开始使用这个模拟器时常见的想法是“参数越极端越真实”。例如把分离、对齐、聚合的权重全部调到最大,反而会出现不自然的抽搐般的运动。实际中要根据生物的观测数据和目的,平衡才是关键。想再现鱼群时把“对齐”稍微调强,鸟群则把“聚合”稍微调弱,往往效果更好。诀窍是以初始值的平衡(例如 分离:1.5、对齐:1.0、聚合:1.0)为基准进行微调。

其次,是忽视“视野半径”与“最大速度”关系的错误。即使扩大视野半径,如果个体的最大速度太低,得到了信息也来不及做出反应。反之速度太快则控制跟不上,群体会崩溃。例如视野半径设为 50 像素时,最大速度从其 5~10% 左右(2.5~5.0 像素/步)开始调整,比较容易稳定。

最后是实现上的陷阱:不要低估距离计算的开销。每一步都直接计算所有粒子之间的距离,粒子数 N 超过 1000 左右就会急剧变慢。实际中必须用空间划分(空间网格法或四叉树)优化邻域搜索(本模拟器也用空间哈希实现了 O(N))。另外要注意计算力时邻居数 |N| 为 0(视野内没有任何个体)的除零错误,此时需要把各个力当作零向量处理。

使用指南

  1. 在 20~300 范围内设置 Boid 数量。150~200 个时容易观察典型的群体行为(借助空间哈希,即使 300 个也以 60fps 为目标运行)
  2. 在 20~150 像素范围内调节视野半径。半径越小,相互作用越局部,群体越快分裂成小簇。关注 Boid 周围的虚线圆显示其实际感知范围
  3. 调节分离、对齐、聚合的权重,一边看关注 Boid 的红、蓝、绿向量和白色合力箭头,以及上方的“对齐度 φ”和“平均邻居数”,一边观察从分散→成群→旋涡的转变

具体计算示例

“密集鸟群”预设(Boid 数 120、视野半径 70 像素、最大速度 2.0 px/步、分离 0.9、对齐 2.0、聚合 2.4)下,平均邻居数约为 10,个体在密集的群体中相互推挤,因此对齐度 φ 多数情况下在 0.7~0.95 之间波动,当群体分成两团朝不同方向前进时也可能降到 0.4 左右。“松散鸟群”(90 个、视野半径 45、最大速度 3.2、分离 2.2、对齐 0.8、聚合 0.5)下平均邻居数降到约 6,但对齐力一直在起作用,大约 20 秒后 φ 升到 0.85~0.99,稀疏的个体朝同一方向飞行。也就是说,φ 是方向一致程度的指标,而不是密集程度的指标。数值会随机波动,请拖动滑块观察趋势。

实务注意事项