python3 实现细胞自动机
废话不多说,先直接上效果图:
“滑翔者”:每4个回合“它”会向右下角走一格。虽然细胞早就是不同的细胞了,但它能保持原本的形态。
"脉冲星":它的周期为3,看起来像一颗周期爆发的星星。
“轻量级飞船”:它的周期是4,每2个回合会向右边走一格。
除了这几个比较有名的细胞自动机的图案,你也可以随意的自己定义初始图案,然后开始"你的细胞自动机":
for ex1:
for ex2:
怎么样?是不是觉得很炫酷,一共100行代码,下面我们进行细胞自动机的介绍和代码的解读!
细胞自动机是Wolfram提出的,此人我觉得挺屌..大家可以自行查找他的工作.
细胞自动机(英语:Cellular automaton),又称格状自动机、元胞自动机,是一种离散模型,在可算性理论、数学及理论生物学都有相关研究。它是由无限个有规律、坚硬的方格组成,每格均处于一种有限状态。整个格网可以是任何有限维的。同时也是离散的。每格于t时的态由 t-1时的一集有限格(这集叫那格的邻域)的态决定。 每一格的“邻居”都是已被固定的。(一格可以是自己的邻居。)每次演进时,每格均遵从同一规矩一齐演进。
就形式而言,细胞自动机有三个特征:
平行计算(parallel computation):每一个细胞个体都同时同步的改变,这点很重要
局部的(local):细胞的状态变化只受周遭细胞的影响。对于本例来讲,就是周围的8个细胞
一致性的(homogeneous):所有细胞均受同样的规则所支配,规则的制定不是很简单.
本例规则采用,以下的规则:
#每个细胞有两种状态 - 存活或死亡,每个细胞与以自身为中心的周围八格细胞产生互动。(如图,黑色为存活,白色为死亡)
# 当前细胞为存活状态时,当周围低于2个(不包含2个)存活细胞时, 该细胞变成死亡状态。(模拟生命数量稀少)
# 当前细胞为存活状态时,当周围有2个或3个存活细胞时, 该细胞保持原样。
# 当前细胞为存活状态时,当周围有3个以上的存活细胞时,该细胞变成死亡状态。(模拟生命数量过多)
# 当前细胞为死亡状态时,当周围有3个存活细胞时,该细胞变成存活状态。 (模拟繁殖)
这些规则比较简单,便于模拟,有兴趣的话,可以看一下Wolfram写的其他规则,比较著名的是Rule 30.这是一套规则组,处理的是更加简单的一维细胞自动机,每一次迭代的产物变成新的一行打印在下面。可是,从一个活细胞出发,它却生成了一套极其复杂的无尽花纹.更牛逼的是,他的假说是,只要计算力和空间足够大,他就能模拟宇宙....
科学人:你一直说,不含随机性的细胞自动机也可以产生无法预测的模式。现实世界如此多姿多彩,你觉得它是不是也不需要随机性?
沃尔夫勒姆: 我觉得不需要。很多时候人们说的“随机性”,其实是建模时用的黑箱:我不了解一个系统的全部规则,所以我假定这个系统有某些额外的因素在提供“随机”的输入。这个意义上的“随机”,只是证明你还没为这个系统建立完整的模型而已。但我们能为宇宙建立一个完整的模型吗?我的工作假说是“能”。也许这假说是错的,也许出于什么原因我们就是无法为宇宙建立完整模型——但是我还没有见到相关的证据。所以我会朝这个目标而努力。一旦我们得到了完整模型,随机性就消失了,没有任何来自外部的不可预知的因素。我有个朋友名叫格里高利·蔡廷,他对于算法随机性这整个领域非常感兴趣,他有一个著名的发现叫做“欧米伽数”(即蔡廷常数),这个数字虽然是个确定的数,但任何图灵机都计算不出来。我和他观点的区别就是,我认为宇宙像pi一样,虽然无穷无尽但可以计算到任意精度;而他始终认为宇宙像欧米伽。我不知道为什么。
以下是关于科学人对其的采访:
科学人:如果我们建立了宇宙的完整模型,是否意味着我们就没有自由意志了呢?
沃尔夫勒姆: 我在我的书里讨论了一个概念,叫做“计算不可化约性”(Computational irreducibility)。这意味着,就算你知道了一切规则,你可能也无法提前预测这些规则将会做什么——唯一的办法是实地运行这些规则看看它们到底会做出什么来。
“自由意志”这个词包括很多层面,如果我们能预测我们将会做出什么事情来,那可以说我们没有自由意志。比如说,看一只蛾子反复地撞击玻璃窗,试图飞出去,我们会说它看起来没有自由意志,似乎是决定性的反射机制。但如果我们看到一个人在做一件非常复杂的行为,我们会说他看起来好像在作出选择,因为我们无法预测他将会怎么做——在这个意义上,我们拥有自由意志。
我们的历史必须按顺序逐渐上演,你不能说“我已经知道结局了,快进到头吧”;历史是必不可少的。世界的底层规则是简单的、决定性的,但是这些规则生成的人类行为却极端复杂,这之间的计算鸿沟无法化约,因此我们的行为是“自由”的。
科学人:会不会有一天,我们对大脑已经有足够的了解,可以监控到足够的信息,可以说“十秒钟之后这个人会想这件事情”?这时人们还有自由意志吗?
沃尔夫勒姆: 我不知道。这一点已经部分地在鸟类中实现了,我们能大致预测出鸟类下一秒会唱什么样的歌。但我还是觉得,自由意志这个概念的根源,只是因为要预测未来所需的计算量太大。就算我们发现了宇宙的全部规律,要么我们得想办法进行和宇宙同样的运算,要么我们就看着宇宙自己这么算下去。
科学人:到那时,是否物理就变成了数学呢?物理条件会反过来限制我们对数学的理解吗?
沃尔夫勒姆: 如果我们真的建立了宇宙的模型,一切都可计算,那么全部物理问题就都还原成了数学。但什么是数学呢?数学从公理系统出发,比如欧几里得的公理系统;在此基础上我们推导出一系列的形式知识。至于选择什么样的公理,可以是人为武断选择、得到纯粹抽象的数学知识,也可以选择那些和现实世界对应的公理。欧几里得认为他选择的公理是对应现实的,但后来数学家逐渐开始做出武断的抽象的选择。数学是个抽象的领域,它不会被现实的物理限制。
github源码:
https://github.com/whyaza/learnPython/blob/master/leetcode_python/cellmachine.py
talk is easy, give you the code!...