上QQ阅读APP看书,第一时间看更新
1.5 鸟群模型
第二个例子是模拟鸟群飞行。我们经常会看到鸟聚集成群,飞行时形成各种队形,姿态非常优美。当它们朝向一个障碍物飞行的时候,会动态地分成两队,在越过这个障碍物后,又能够聚合到一起。
那么究竟是谁带领这些鸟形成不同队形的?实际上,模拟程序告诉我们,并不需要一个领导者来发号施令,只需要让所有鸟都遵循一种非常自然的简单规则,一群鸟就有可能形成复杂的队形。
其中每一个主体都是一只模拟的鸟,每只鸟都有视野半径,只有其他鸟出现在它的视野半径内,才会对它造成影响。
我们为这些鸟设置3条简单的规则。
- 聚集:尽量靠近邻居。
- 对齐:与邻居飞行方向保持一致。
- 分离:如果和其他鸟靠得太近,则远离。
接下来看一看NetLogo自带的鸟群模拟程序。同样打开模型库,找到Flocking模型。开始的时候我们可以看到,这群模拟的鸟散落在屏幕上,如图1-7所示。
图1-7 初始化鸟群模型
然后单击“go
”按钮,它们就会按照前述3条简单规则发生聚集。你会发现,这些鸟慢慢会形成一系列鸟群。我们稍微调快一点儿模拟速度,让鸟群飞得快一点儿,你就会发现这群鸟很快就会形成几个队形,一会儿排成“一”字,一会儿排成“人”字,如图1-8所示。
图1-8 鸟群模拟图像
对于每一只鸟下一时刻将会朝哪个方向飞,很难进行预测,我们只有“钻”到代码里,去看每一只鸟所面对的环境,才能给出相应的答案。这种在模拟程序中出现了超出程序员事先构想的现象或行为称为“涌现”。