🙋
“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(视野内没有任何个体)的除零错误,此时需要把各个力当作零向量处理。