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!...
python3 实现细胞自动机的更多相关文章
- python3 threading初体验
python3中thread模块已被废弃,不能在使用thread模块,为了兼容性,python3将thread命名为_thread.python3中我们可以使用threading进行代替. threa ...
- Python3中的字符串函数学习总结
这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...
- Mac-OSX的Python3.5虚拟环境下安装Opencv
Mac-OSX的Python3.5虚拟环境下安装Opencv 1 关键词 关键词:Mac,OSX,Python3.5,Virtualenv,Opencv 2 概述 本文是一篇 环境搭建 的基础 ...
- Ubuntu部署python3.5的开发和运行环境
Ubuntu部署python3.5的开发和运行环境 1 概述 由于最近项目全部由python2.x转向 python3.x(使用目前最新的 python3.5.1) ,之前的云主机的的默认python ...
- Python3 登陆网页并保持cookie
网页登陆 网页登陆的原理都是,保持一个sessionid在cookie然后,根据sessionid在服务端找到cookie进行用户识别 python实现 由于python的简单以及丰富的类库是开发网络 ...
- 阿里云 SDK python3支持
最近的一个项目需要操作阿里云的RDS,项目使用python3,让人惊讶的是官方的SDK竟然只支持python2 在阿里云现有SDK上改了改,文件的修改只涉及aliyun/api/base.py,详见h ...
- python3爬取1024图片
这两年python特别火,火到博客园现在也是隔三差五的出现一些python的文章.各种开源软件.各种爬虫算法纷纷开路,作为互联网行业的IT狗自然看的我也是心痒痒,于是趁着这个雾霾横行的周末瞅了两眼,作 ...
- CentOS7中安装Python3.5
1.下载 https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz 2.上传到服务器 3. 安装相关依赖 yum install gcc ope ...
- 使用virtualenv搭建python3开发环境
问题描述 环境: CentOS6.5 想在此环境下使用python3进行开发,但CentOS6.5默认的python环境是2.6.6版本. 之前的做法是直接从源码安装python3,替换掉现有的开发环 ...
随机推荐
- java课件运行实践
两数相加 源文件:Addition.java 源代码: // An addition program import javax.swing.JOptionPane; // import class ...
- javascript 方法总结(Array篇)
1.toString:返回以数组种的每个值得字符串形式拼接而成得一个以逗号分割得字符串 toStringArr = [1, 2, 3, 4, 5, 6] console.log(toStringArr ...
- 数组的strong copy理解
一.数组的不同情况下的copy,mutablecopy分析 1.不可变数组的copy(没有创建新对象,复制的只是指针) 2.不可变数组的mutable copy(创建新对象) ...
- HDU 4279 Number-------找规律题
Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- IDEA使用总结1-Github下载代码和上传代码到Git
1. 首先你需要在IDEA中创建一个项目,创建完项目后使能版本管理插件 选择git后创建本地git仓库成功,提示如下 2.第二步 commit代码到 commit时会提示是否需要进行检查什么的 3.第 ...
- 创建vue项目 webpack+vue
# 全局安装 vue-cli $ npm install -g vue-cli # 创建一个基于 "webpack" 模板的新项目 根据提示填写项目信息 && 对项 ...
- EF_CRUD
- 多线程下载英文Google地图
1. pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...
- FineReport中JS如何自定义按钮导出
FineReport支持多种不同的导出方式,直接使用FineReport内置导出按钮可以非常快捷方便的来对各种格式的输出,但是我们在web页面集成中的时候,往往只想将报表内容嵌入到iframe中,而工 ...
- 网鼎杯 pwn 记录
题目位置 https://gitee.com/hac425/blog_data/tree/master/wdb babyheap 通过分配和释放构建 2 个 fastbin 链 利用 show 功能, ...