热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python3实现细胞自动机

废话不多说,先直接上效果图:“滑翔者”:每4个回合“它”会向右下角走一格。虽然细胞早就是不同的细胞了,但它能保持原本的形态。脉冲星:它的周期为3,看起来像一颗周期爆发的星星。

 废话不多说,先直接上效果图:

“滑翔者”:每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!...


推荐阅读
  • requestLayout()引起的问题网上有大量写的很深入的requestLayout()源码分析的文章。故这里不再写了,只做一个实际情况下遇到的问题的分析。起因:自定义了一个C ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 详解 Python 的二元算术运算,为什么说减法只是语法糖?[Python常见问题]
    原题|UnravellingbinaryarithmeticoperationsinPython作者|BrettCannon译者|豌豆花下猫(“Python猫 ... [详细]
  • return 语句竟然跳不出 for 循环?怎么肥事?
    松哥最近正在录制TienChin项目视频~采用SpringBoot+Vue3技术栈,里边会涉及到各种好玩 ... [详细]
  • 拯救万千学子于水深火热之中!Facebook开源无梯度优化工具
    乾明发自凹非寺量子位出品|公众号QbitAI机器学习啥最苦?十有八九找参数!不少研究生,都被卡在这个环节上,久久不能毕业。现 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • PyTorch框架中有一个非常重要且好用的包:torchvision,该包主要由3个子包组成,分别是:torchvision.datasets、torchvision.models、torchv ... [详细]
  • 一json文件JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使 ... [详细]
author-avatar
qzy4799723
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有