今天分享的是细胞自动机,细胞自动机是一个学科,我今天要讲的是狭义的细胞自动机,广义的细胞自动机的边界还是模糊的。可能大家会把细胞自动机和dna编程混淆,实际上他们是有交集的,但是不同的两个学科,交集就是分形,自然界中处处存在分形。 我说的内容有一点的哲学,但是不需要进入深入思考,有段时间我差点想疯了。

一开始先让大家看一个图。

在说到自动机之前,来说下现在世界的两个 Bug ,一个是递归,一个是自动机。

递归是大家熟悉的,图灵机模型就是递归模型。

大概说下图灵机,图灵机,就是假设有一张无限长的字条,字条有固定长度的格子,人只能一次读一个格子,格子写着符号,人可以改写他现在读的格子的符号,根据他读到的符号或读过的,决定他下一个要读的格子。

为什么说递归是一个 Bug ,原因:他可以证明没有万能的上帝,可以证明现在的世界是假的。

假设存在万能的上帝,于是让上帝做出他吃不下的饭,上帝是万能的。上帝做出他吃不下的饭。

进入递归,世界上不存在上帝吃不下的饭,上帝是万能的,我做的饭他是可以吃下去的。

于是上帝做不出他吃不下的饭,所以没有上帝。

这是罗尔悖论,递归做出的悖论。

可能很多人玩过我的世界,有大神在我的世界弄出了电脑,于是在我的世界弄出的电脑里面玩我的世界……

有人做出来一个可以在电脑模拟的世界,于是这个 世界发展到一定时候,他们的人类造出了电脑,过了好久,他们可以用电脑模拟世界,于是过了好久,虚拟的世界出现了人类,过了好久,他们做出计算机……

根据上面说的,现在的世界处于现实世界的概率是 0 也就是当前所在的世界就是虚拟的世界

自动机如何也是一个 Bug ,因为他是一个问题,世界如何做出来的。

首先来说下历史,这个自动机的提出是在 1940 年,祖师爷 冯诺依曼 提出的,他是为了解决人工智能的问题而提出的。因为我前段时间在做人工智能,所以对他有一些了解。现在世界上的计算机用的都是冯诺依曼体系,现在影响了世界差不多一个世纪,自动机,是现在才有比较好的发展,可能以后会继续影响世界。

自动机使用的思想:采用局相互作用规则,最终产生整体的自复制构型。

用程序员的话是:1. 首先有固定维度的空间,空间有固定大小的格子,每个格子有一个 Cell 。

  1. 每个 Cell 有自己的状态,状态的值是有限的。

  2. 每个时刻, Cell 都检查他的邻居的状态,并且根据邻居的状态,改变自己下一时刻的状态。他的邻居是包括他的自己。

于是他的序列是不可控的,当你想知道他的第 n 个状态时,你需要计算他第 n-1 个状态,而想要知道 n-1 个状态是什么,就需要计算 n-2 个状态是什么才可以。在复杂的规则下,人类是很难求出一条公式可以表示输入 n 拿到状态,只能通过持续的计算,才能计算出第 n 个状态。在空间足够大的时候,同时 n 也足够大,这个计算量将会特别可怕。就像神兽[拉普拉斯妖(https://zhuanlan.zhihu.com/p/35239781 )知道了当前宇宙所有粒子的状态,但是因为计算量太大,在这个宇宙内的计算机很难计算出这个宇宙的下一次粒子的状态,或计算的时间长于现实粒子状态修改的时间。也就是即使你知道当前宇宙的所有粒子的状态,你在当前宇宙里面,你有一个强力的计算机,但是这个计算机的计算能力够不够强可以计算出所有粒子的下一个状态是一个问题,从当前状态计算出下一次状态的时间也是问题,例如当前宇宙的所有粒子的更改时间是 0.1 秒,但是你的计算时间需要 1 秒,同时你也没有任何数学公式可以直接输入一个时间就计算出所有粒子的状态,你只能一步步计算,那么你也无法预测这个宇宙

如果简单一点,通过这个规则构建一个简单的时间,一个简单的世界,可以由几个简单规则组成。

现在的世界也是由简单的规则做的,但是在这个世界的渣渣是很难知道这个世界的简单规则,反而会提出很多复杂的规则

开始做一个世界,这个世界有三条规则。

  1. 在他周围有两个或三个邻居存活,他就可以存活

  2. 如果他已经不存活,但他周围有三个邻居,于是他就可以出生。

  3. 在他周围,如果有超过三个以上的邻居,他就因为太拥挤而不存活。如果有小于两个邻居存活,他因为他孤单而不存活。

就是简单三个规则,可以做出一个世界。

现在人类对这个世界的了解只有100多个规则,至于这个世界是不是仅有这几个规则,人类还不知道。这个世界是不是可以产生生命,人类也不知道。

通过上面这三个简单的规则,写一段代码,运行的时候可以看到很多有趣的界面

最简单的图形:

这是静态图形,刚好满足条件1 自己计算一下

那么一些重复的图形:

可以看到他们有周期,所以很简单。

下面让大家看下,这个世界的生物

一些复杂的生物

可以看到他是不稳定的,但是他有周期,所以就可以说他可以存在。

但他在受到外界干扰,就不能保持他原来的样子。

这个世界有一个东西,他可以向一个方向走。

好在上面的这个生物可以自己去掉他。

那么这些生物是如何形成

那么是不是生物就那么大?不是,有些会无限大。

这就是简单的世界。

他可以做到的规模多大,现在还不知道,可能可以做出生命,他可以建立社会。

如果你有空闲的服务器,可以尝试自己写程序跑一下,说不定你就创建了一个世界

这是一个数学上的世界,其实玩数学的小伙伴也会在找合取数,什么是合取数,我将任何的东西使用有限序列的数值表示,这个数值都可以在某个无限不循环小数里面找到,例如 PI 我在里面找到我的密码

如果找到一个有限的空间,将这个空间通过数值表示,那么这个序列能否在 PI 里面找到,如果可以,那么一个更大的空间呢?是不是 PI 里面包含了当前的世界

参见:编程模拟自然(九):元胞自动机 - ExperDot - 博客园

简单二维元胞自动机 MATLAB实现 - 戎码半生 - 博客园

Cellular Automata (Stanford Encyclopedia of Philosophy)

特别感谢 HaibaraAi 大佬帮我审稿


本文会经常更新,请阅读原文: https://dotnet-campus.github.io//post/%E8%87%AA%E5%8A%A8%E6%9C%BA.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 lindexi (包含链接: https://dotnet-campus.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系