本章我们将接触一个全新的模型——鸟群模型(Boids)。现实世界中鸟群的飞行非常优美,它们可以组成复杂的队形,还可以聪明地绕开障碍物并再次合成一队。看到这样复杂的行为,我们不禁会问,为什么它们能形成复杂的飞行动态?是因为某只领头鸟在发号施令,还是这些复杂的行为都写到了鸟的基因里面?
对这个问题进行思考的人不止我们。早在1983年,计算机图形学家Craig W.Reynolds就开始观察鸟群的飞行了,他立志在计算机上实现模拟的鸟群飞行。经过大量实验他发现,通过为每只模拟的人工鸟Boids制定3条简单的规则,就能够模拟逼真的鸟群行为。图9-1展示的就是他早年设计的用于模拟鸟群行为的3D模型。
image.png
人工鸟群模型不仅可用于研究自然界中鸟群的行为,它在人类社会中也有用武之地。比如,人群行动的轨迹就与鸟群有着某些相似之处:人们总是倾向于跟随人群,而不是独自行动,尤其是在目的地相同时,人们的行动轨迹总是会与前面的人保持一致;同时,人们总是会下意识地与他人保持一定的社交距离等。这些现象存在于很多实际应用场景中,如规划城市交通布局、疫情下的社交距离控制,以及室内设施布局等。理解并掌握人工鸟群模型,对于将该模型扩展到其他有关主体行动轨迹的问题很有帮助。
本章将介绍人工鸟群模型,内容如下:

  • 如何进行矢量运算,并且用矢量的方法来模拟鸟群的飞行;
  • 如何使用NetLogo中的list完成矢量运算,list是NetLogo中一个非常关键的数据结构;
  • 如何运用欧拉法(Euler Method)来求解鸟群的飞行轨迹。

人工鸟群模型Boids

首先我们看看Boids模型。Boids模型假设每只鸟都有一个视野半径,就是图9-2中的灰色区域,只有这些半径范围内的邻居才会对当前这只鸟造成一定的影响。具体的规则有3条。

  • 靠近规则:尽可能靠近邻居的中心位置点,如图9-2所示。

image.png

  • 对齐规则:飞行方向与大家的飞行方向尽量一致,如图9-3所示。

image.png

  • 分离规则:如果和别的鸟靠得太近,为了避免碰撞,彼此之间会产生斥力从而分离,如图9-4所示。

image.png
接下来我们试着在NetLogo中实现这3条规则。然而要实现它并不简单,我们需要通过受力分析、力的合成以及矢量运算来完成鸟群模型。这里的基本思想是将鸟群飞行的模型转化成一个多质点的相互作用的力学模型,然后通过力的分析和合成来完成鸟群模拟,实现鸟群飞行的3条规则,再利用牛顿第二定律,将力学问题转化成运动学问题,最后用欧拉法实现数值积分运算,从而模拟鸟群飞行轨迹。