Floy模拟模型

来自集智百科 - 复杂系统|人工智能|复杂科学|复杂网络|自组织
跳到导航 跳到搜索


Floy模拟模型

程序说明

生命是什么?我们能不能造出生命来?看看上面的程序。


你看到了什么?一群苍蝇在飞舞?这是简简单单的动画么?这些家伙是“活”的么?我可以告诉你,这群飞舞的动物叫Floy,它既不是苍蝇也不是蝌蚪,而是人工生命!这就是一段简简单单的程序,而且代码的长度才有200多行!


单击Properties按钮,你可以改变这群Floy的属性,首先我们为了从简单开始把Floy的个数更改为1个看看,点击OK返回以后再按一下Continue按钮,一只Floy在围绕着中心转,也许你会说,这没什么,不就是一个运动的点么?如果更改Floy的个数为2个,那么这两只Floy就会互相追逐着在屏幕上飞行,注意两只Floy的行为就会产生混沌模式了,也就是它们的运动方式几乎是完全不确定的。逐渐增加到15只以上你就会看到一大群生物在那里乱飞了,这很像我们现实世界中的苍蝇行为。点击Strangers按钮,你会看到一只红色的Floy从屏幕的左上角飞进来,注意,它的到来可不寻常,它是一个外来的入侵者!本来相安无事的绿色Floy因为它的到来而变得行为异常起来,它们会突然转过头来进攻红色的入侵者,而红色的Floy会赶忙逃跑。继续点击Strangers按钮,就会有不断的入侵者加入进来,同时原有的Floy群体在减少。你会看到有两群苍蝇在那里追逐。绿色的Floy是本地居民,它会进攻入侵者最后将它杀死。如果幸运,你甚至会看到绿色的Floy们会使用诡计,它们先若无其事的在一起飞即使身边就有一只红色的入侵者,但是突然之间,它会转过头来进攻红色的,让它来不及逃跑。点击Default按钮可以恢复原状。

模型的规则

为什么这一群小点在这么简单的程序之下会有这样复杂的行为?它们是怎么实现的?注意,虽然这也是编程,但我们并不是按照传统的方法对所有Floy的集体行为在每一种可能的情况都编程,而是给每一个个体Floy制定简单的规则,这样Floy集体的复杂行为就会自然而然的涌现出来了!那么个体Floy的规则是什么呢?它是遵循下面的规律:

  • 首先找到和自己最近的几只(邻居数)的Floy作为自己的邻居;
  • 对于每个邻居如果它是自己的同类那么然后分别计算与这些邻居之间的距离;
    • 如果太近(距离小于碰撞距离)就朝向远离这个邻居的方向加速飞翔;
    • 如果较远(距离大于碰撞距离)就朝向靠近这个邻居的方向加速飞翔;
  • 如果邻居是自己的异类;
    • 如果这只Floy是绿色的则以非常快的加速度向对方进攻;
    • 如果这只Floy是红色的陌生者则当小于碰撞距离的时候以非常快的加速度逃离,并且自己的能量减小;当距离不是很大时,停止加速。


总体来说,Floy的规则就是选择自己的加速度,并且这种选择仅仅跟自己的邻居有关,也就是说规则都是局部的。而这个程序的关键是要体现整体行为的涌现,也就是说虽然微观上每个Floy个体的规则都是简单的局部的,但是在集体涌现出来的现象却是复杂的并且是不可预测的。人工生命的精髓就是:其实生命现象本身不过是由微观的简单相互作用规律涌现出来的集体复杂行为。

模型的参数

进一步,你可以探索更改参数对这群Floy的影响。你可以点击Behavior按钮,Floy的个性会改变,有温顺的也有疯狂的。它们的行为完全是由几个简单参数制约的,再次点击Properties按钮,那里面的参数制约了每个Floy个体的行为自然也就制约了Floy整体的涌现规律。其中各个参数的意义:加速度就是指每只苍蝇进行加速靠近或者远离的最小加速度值;中心吸引度是为了让Floy能够围绕屏幕中心旋转而让它们的加速度都有一个指向中心的分量;碰撞距离定义多少像素距离是叫做碰撞,从而Floy们选择远离还是靠近;最大速度是为了Floy们的行为不至于太疯狂也就是速度固定一个上限;反弹速度是当Floy撞击墙壁的时候反弹回来的速度;间隔时间是控制整个程序快慢的参数;初始速度是每只苍蝇在开始的初速度;自由重组邻居的概率:为了让Floy们的行为中有一定的随机不确定性,它们会以自由重组邻居的概率重新随机的选择自己的邻居(正常情况下是选择距离最小的若干Floy作为自己的邻居),如果这个概率指定为0那么Floy的行为就没那么有趣了;邻居数目定义了每只Floy可以有多少邻居。


接下来我们能干什么?也许你觉得这个简单程序太没趣了,应该把它改为三维的动画。没问题,这个要求还算容易满足。你只要点击这里就能看到三维的Floy。但是因为Java本身的限制,动画不如用Maya之类的三维软件作的好看,但是这个程序却反映了规律的本质,有兴趣的朋友完全可以把这个动画用Maya作一遍,这样你可以给每个Floy赋予贴图裁质,那样也许更有趣。


也许三维的Floy仍然不够有趣,我们能不能在想出点疯狂的?


进化!首先让每只Floy都拥有自己的个性,然后让Floy能够进行有性繁殖,并且后代Floy能够继承父母的特性,没问题,请看能够进化的Floy。

三维的Floy鸟群模拟模型

  • 名 称:3d的Floy
  • 作 者:Ariel Dolan
  • 源代码:Floy3d.zip

程序说明

如果二维的Floy还看得不够过瘾,那么请看三维Floy程序,这里,每个Floy遵循的规则和前面叙述的基本Floy的规则一样,其中每只Floy都有两个邻居。也许三维的Floy仍然不够有趣,我们能不能在想出点疯狂的?进化!首先让每只Floy都拥有自己的个性,然后让Floy能够进行有性繁殖,并且后代Floy能够继承父母的特性,没问题,请看能够进化的Floy。

相关wiki

编者推荐

书籍推荐

《复杂》封面

蚂蚁在组成群体时为何会表现出如此的精密性和具有目的性?数以亿计的神经元是如何产生出像意识这样极度复杂的事物?是什么在引导免疫系统、互联网、全球经济和人类基因组等自组织结构?这些都是复杂系统科学尝试回答的迷人而令人费解的问题的一部分。理解复杂系统需要有全新的方法,需要超过传统的科学还原论,并重新划定学科的疆域。借助于圣塔菲研究所的工作经历和交叉学科方法,复杂系统的前沿科学家米歇尔在《复杂》一书中,以清晰的思路介绍了复杂系统的研究,横跨生物、技术和社会学等领域,并探寻复杂系统的普遍规律。与此同时,她还探讨了复杂性与进化、人工智能、计算、遗传、信息处理等领域的关系。

文章推荐

近期,由北京师范大学张江团队发表的文章《A general deep learning framework for network reconstruction and dynamics learning》在期刊Applied Network Science上刊登,这篇文章提出了一种基于深度学习的数据驱动模型,可以从节点的时间演化数据中重构出网络结构,并且学习到系统的动力学。本文是第一作者张章对该文章内容的解读。

课程推荐

本课程通过数个案例教会大家如何去动手搭建一个多主体仿真模型,以及如何利用NetLogo去实现。从生命游戏到人工鸟群,从模拟经济系统到病毒沿网络的传播,通过循序渐进的案例,该课程带你逐步走入NetLogo多主体建模的神奇世界。
本课程将视线转移到生物学领域,展现计算机模拟在生物学中的应用。认识自然现象,我们可以从物理、数学、生物、天文、化学等众多角度去解读,那么怎样将众多的知识综合起来转化为可以用计算机模拟的语言哪?本节课将通过一个模型案例来帮助我们打开思路,更好的去描述和模拟生物现象。

本中文词条由Jake思无涯咿呀咿呀用户参与编译,乐多多编辑,欢迎在讨论页面留言。


本词条内容源自wikipedia及公开资料,遵守 CC3.0协议。