细胞自动机的许多美丽世界

多年来我一直对Cellular Automata( 例如“ Conway的生命游戏” )感兴趣。 我用各种编程语言实现了无数次。 几周前,我创建了一个Dart库,用于探索如何玩Cellular Automata,它是开源的,可在Github上使用。 您可以浏览github演示或查看在我的个人网站上运行的库-本文中的gif也是使用该库生成的。


什么是细胞自动机?

Cellular Automata在70年代和80年代在科学数学俱乐部中风行一时,但是有关该主题的第一篇论文实际上可以追溯到40年代。 在那时,数学家和科学家使用笔和纸而不是计算机来创建规则(约翰·康威实际上是在围棋板上创建了“生命游戏”规则!)。 斯蒂芬·沃尔夫拉姆(Stephen Wolfram)在80年代和90年代撰写了许多有关该主题的论文。

元胞自动机是“单元”的网格,每个单元都有一个“状态”。 对于每个周期(称为新一代“一代”),将一组规则应用于网格中的每个单元,这可能会更改其状态。 规则通常将每个单元都视为“邻居”(周围的单元)。 元胞自动机规则通常非常简单。 以下是“ Conway的人生游戏”的规则(这是我图书馆的代码实现):

  1. 少于两个活邻居的任何活细胞都会死亡,就好像是人口不足造成的。
  2. 任何有两个或三个活邻居的活细胞都可以存活到下一代。
  3. 任何具有三个以上活邻居的活细胞都会死亡,就好像是人口过剩。
  4. 具有正好三个活邻居的任何死细胞都变成活细胞,就像通过繁殖一样。

“康威的生命游戏”(以及许多其他规则)可以描述为图灵完备的,这意味着它们可以执行计算(如果必要的细胞状态特别是编队-这样)。 《连线世界》是另一个极其简单的规则,它可以模拟电子逻辑元素-相当于Minecraft的红石电路80年代!

令我着迷的是,从如此简单的规则集中可以产生复杂的系统。 通常会出现稳定的细胞群,并形成大型复杂的结构,甚至可以作为一个单元移动。 重复出现的模式可能跨越多个世代(标头图形中只有一个简单的3世代模式) 。 我发现Cellular Automata的这一方面是如此令人兴奋-您永远不会知道将会看到什么。 好像我们在模拟一个非常基本的宇宙。 如果我们模拟质子,中子和电子,而不是一个非常简单的2D细胞网格,将会发生什么? 我们还会看到复杂的结构出现吗? 甚至是模拟生活? (除了: 模拟假设


飞镖库

该库将Cellular Automata规则(有趣的部分)与样板处理和渲染分开。 这样可以轻松快捷地添加新规则或实验。 到目前为止,我已经添加了一些规则,并且还添加了对“ MCell”规则的支持,因此它可以运行MCell规则Lexicon中发布的数百个规则中的任何一个。 我计划增加在同一场景中运行大量规则集的功能,尽管此功能必须等待下雨天。 渲染代码也已解耦,这意味着您可以根据需要轻松添加/交换渲染器,我已经添加了一些(WebGL,Canvas,Html),并且我计划添加另一个可以驱动LED矩阵的渲染器。

飞镖程序包“ cellular_automata”已发布在pub.dartlang.org上。 玩得开心,别忘了给我发送请求! 😉