Python 实现最简单的元胞自动机

作者: Python高效编程 | 来源:发表于2019-01-27 22:36 被阅读0次

简介

元胞自动机(cellular automata) 是离散而抽象的计算系统。元胞自动机在时间和空间上是离散的,最小单位是简单元胞(单元格)。每个元胞会产生有限数量的状态集,后续元胞由其邻域元胞的状态确定。这里所说的领域元胞,是指当前元胞的前一个元胞(记作元胞A)以及元胞A左右两个元胞。也就是说,邻域元胞总共包含三个元胞。给定初始层的状态,基于一定规则,我们可以不断更新下一层元胞的状态。通俗的讲,元胞自动机就是基于一定规则的“繁衍机器”。

最简单的例子

我们在控制台演示元胞自动机程序。
这里,我们选取的元胞状态只有两种,分别为 0 和 1。每一层由 64 个元胞组成,若元胞状态为 1,那么控制台将打印星号(*);如果元胞状态为 0,那么控制台将打印连字符(-)。也就是说,每一行由 64 个混合星号与连字符的图案组成。
那么,我们如何确定每一行的状态呢?

  • 首先,我们要对第一行进行初始化操作。我们设置第 31 个元胞的状态为 1、其余 63 个元胞的状态为 0.
  • 状态更新规则:若当前元胞的前一个元胞的状态为 1,或者前一个元胞的左右两边的元胞的状态有且只有一个值为 1, 那么该元胞的状态就为 1。反之,元胞的状态设为 0。对于第一列和最后一列,我们只需分别考虑右元胞和左元胞即可。对于中间部分的元胞来说,若其领域元胞的状态为[0,1,0]、[0,0,1]、[1,0,0]、[1,1,0]等状态时,当前元胞的状态就为 1。
    实现效果如下:


    Python高效编程
import time


def print_seq(seq, speed=0.5):
    for item in seq:
        if item:
            print('*', end='')
        else:
            print('-', end='')
    print('')
    time.sleep(speed)


class Cell:
    def __init__(self, deepth=31):
        self.ca = [0 if i != 31 else 1 for i in range(64)]
        self.ca_new = []
        self.deepth = deepth

    def process(self):
        print_seq(self.ca)
        for i in range(self.deepth):
            self._rule()
            print_seq(self.ca_new)
            self.ca = self.ca_new
            self.ca_new = []

    def _rule(self):
        for i in range(64):
            if 0 < i < 63:
                if self.ca[i - 1] == self.ca[i + 1]:
                    self.ca_new.append(0)
                else:
                    self.ca_new.append(1)
            elif i == 0:
                if self.ca[1]:
                    self.ca_new.append(1)
                else:
                    self.ca_new.append(0)
            else:
                if self.ca[62]:
                    self.ca_new.append(1)
                else:
                    self.ca_new.append(0)


def main():
    cell = Cell()
    cell.process()


if __name__ == '__main__':
    main()

相关文章

  • Python 实现最简单的元胞自动机

    简介 元胞自动机(cellular automata) 是离散而抽象的计算系统。元胞自动机在时间和空间上是离散的,...

  • Python 实现基于元胞自动机的生命游戏

    这次我们使用 Python 来实现生命游戏,这是一种简单的元胞自动机。基于一定规则,程序可以自动从当前状态推演到下...

  • 元胞自动机的应用

    【定义】元胞自动机(Cellular Automata, CA)定义在一个具有离散、有限状态的元胞组成的元胞空间上...

  • 逆转箭头

    设元胞自动机(CA)运行第i步的位形为,若位形中只包含0和1两种元胞,则任一迭代规则都可以改成可逆的元胞自动机规则...

  • 基于元胞自动机的谣言传播防治探究毕业设计

    包含: 课程论文+演示视频+答辩PPT+Python代码 基于元胞自动机的谣言传播防治探究 电创xxxx XXX ...

  • 狐狸吃兔子模型元胞自动机

    项目介绍 狐狸吃兔子模型元胞自动机 标签 Java、JavaGUI、元胞机 技术工具选型 Java、JavaGUI...

  • Python 实现元胞自动机中的生命游戏(Game of lif

    简介 细胞自动机(又称元胞自动机),名字虽然很深奥,但是它的行为却是非常美妙的。所有这些怎样实现的呢?我们可以把计...

  • C语言简单实现生命游戏

    原理 细胞自动机(又称元胞自动机),名字虽然很深奥,但是它的行为却是非常美妙的。所有这些怎样实现的呢?我们可以把计...

  • 元胞自动机

    2013年数模,有一道题是关于道路故障占用车道的规划和预测分析,其中有一篇优秀论文用到了元胞自动机分析方法.元胞自...

  • 元胞自动机

    计算的极限(零):逻辑与图灵机:http://songshuhui.net/archives/tag/%E8%AE...

网友评论

    本文标题:Python 实现最简单的元胞自动机

    本文链接:https://www.haomeiwen.com/subject/ytonjqtx.html