复杂系统学习(五):细胞自动机 I:1D 和 2D CAs
目录
1. 引言
2. 1D 细胞自动机
2.1 1D 细胞自动机——最简单的情况
2.2 1D 细胞自动机——行为
2.2.1 正式地描述1D细胞自动机
2.2.2 命名CA的规则
2.3 Discrete time dynamics
2.4 Wolfram classes
3. 2D Cellular Automata
3.1 Conway’s Game of Life
1. 引言
从宏观到微观:
复杂系统是指其行为由许多单独部分之间的相互作用产生的系统:
Lotka-Volterra模型
单独部分=动物(捕食者和猎物)
相互作用=捕食(捕食者吃猎物)
SIR疾病模型
单独部分=人(易感者、传染者和康复者)
相互作用=疾病传播(从传染者到易感者)
这些系统的ODE模型要求我们用全局(或宏观)变量来表示它们的状态,并根据这些全局变量如何随时间变化来定义更新规则。
Lotka-Volterra模型
全局变量=捕食者/猎物的数量
更新规则=以出生率、死亡率和捕食率计算
SIR疾病模型
全局变量=每种疾病状态下的种群比例
更新规则=以感染率和恢复率计算
然而,为了建立这些ODE模型,我们必须对我们的系统做出假设。这两个模型都要求我们假设子种群中的所有个体都是相同的,而且我们种群中的所有个体都有相同的机会相互作用。
但是事实是,在讨论这些模型可能存在的问题时,这些假设不断出现,成为限制因素:
Lotka-Volterra模型
一些捕食者/猎物可能比其他人更强/更弱
一些捕食者/猎物可能比其他人更快/更慢
捕食者/猎物种群可能具有非均匀的空间分布
SIR疾病模型
一些年龄组(如儿童)可能更易受影响/感染
人口可能有不均匀的空间分布(例如,我们90%的人口可能接种了疫苗,但如果没有接种的10%的人都住在同一个郊区,那就是一个高风险的子人口)。
我们可以扩展我们的ODE模型来反映这种异质性(个体之间的变化),但所需的方程和参数的数量将迅速爆炸性增长。
在接下来的几篇博客里,我们将探索能够代表人口中这种异质性的建模方法:
元胞自动机模型 |
基于代理的模型 |
网络模型 |
这些模型将是计算性的而不是数学性的。
这篇博客我们先来学习元胞自动机模型,思考一个问题:
考虑一个SIR模型,在这个模型中,我们人口中的每个人在一个正方形格子(网格)上都有一个固定位置 :
- 什么是最合适的数据结构?
- 你可以如何表示状态?
- 你如何确定谁与谁互动?
- 状态如何更新?
2. 1D 细胞自动机
细胞自动机(CA)是一种离散动态系统,在简单的局部规则基础上表现出复杂的行为。
自动机:一种理论上的机器,它根据外部输入和自身先前的状态更新其内部状态。
细胞自动机:一个自动机(单元)阵列,其中一个单元的输入是附近单元的当前状态。
在一个CA里:
- 时间是离散的(如逻辑图)因为是逐次迭代的过程,不是连续的状态改变。
- 注:逻辑图,
- 空间是离散的:通常是一维或二维网格(三维也可)。
- 系统状态是离散的:系统的每个组件都处于一组有限的状态中(例如,开或关);因此,整个系统有有限的、可数的状态。
- 更新规则是根据组件之间的局部相互作用来定义的。
细胞自动机——应用
2.1 1D 细胞自动机——最简单的情况
一些基本的元素
一个一维的单元格:
每个细胞都有两种状态之一:
单元本身及其相邻的两个邻居(K = 3):
离散迭代(time step):
使用上一代的邻域状态:
邻域状态有种可能的组合:
这些组合中的每一个都决定了下一代中目标(中心)细胞的状态:
具体的例子:
2.2 1D 细胞自动机——行为
我们可以使用NetLogo来探索一些不同规则的行为,NetLogo的学习文档有:
NetLogo 6.2.2 User Manual
NetLogo 6.2.2 User Manual: BehaviorSpace Guide
2.2.1 正式地描述1D细胞自动机
每个有限自动机由一个有限的单元格状态集、一个有限的输入字母表和一个过渡函数组成,它是一个从邻域状态集到单元格状态集的映射。
邻域的状态是由大小为的邻域模板所覆盖的自动机状态的函数(例如叉积)。因此,每个自动机的输入字母表由一组可能的邻域状态组成。
让,(细胞状态的数量) 。
的大小等于可能的邻域状态的数量:
为了定义一个转移函数,中唯一的下一个状态必须与一个可能的邻接状态相关联。
由于有的状态可供分配给每一个可能的邻域状态作为下一个状态,所以有个可能的转换函数可以被定义。
是所有可能的过渡函数的集合,可以用个邻域和个状态来定义。
例子:
考虑一个2维的细胞自动机,每个单元使用8个状态;一个有5个单元局部邻域(北、南、东、西)的规则网格。这里,,,所以有:
可能的邻域状态。
对于所有这些相邻状态,有8种不同的状态在下可供下一个细胞状态选择,所以有:
可能的过渡函数。
2.2.2 命名CA的规则
有可能地规则更新1D CA()。
这是Rule 90。
256条规则中的许多规则都是微不足道的相互等价:基础几何的简单转换:
- mirror:通过垂直轴的反射。
- complement:交换定义中0和1的角色
256条基本规则中的一些规则仅仅通过重新命名状态或左右颠倒就完全相同,因此本质上不同的基本规则的数量较少(只有88条)。
Rule 30
Rule 30 显示出非周期性的、混乱的行为:
与自然界中的模式有相似之处,纺织锥螺(Conus textile),鳕鱼洞,大堡礁,澳大利亚:
Rule 110
Rule 110 是图灵完全的,即能够进行普遍计算:
2.3 Discrete time dynamics
之前学习地ODE模型中的许多概念也适用于这里。
- 我们对系统的长期行为感兴趣:随着时间的推移会发生什么?
- 我们的状态空间(系统中所有可能状态的集合)是离散和有限的,我们的轨迹是状态的序列
- 我们可以观察到瞬态、固定点和极限循环吸引子
- 导致每个吸引子的状态构成了它的吸引盆
2.4 Wolfram classes
". ......许多(也许是所有)CA都属于四个基本的行为类别"——Stephen Wolfram, 1984
3. 2D Cellular Automata
2D CA与 1D CA类似,只是我们必须选择如何定义我们的邻域和我们的更新规则。
两个常见的邻域是:
冯-诺伊曼邻域
摩尔邻域
3.1 Conway’s Game of Life
像 Rule 110 一样,Game of Life 是图灵完全的。
生命的规则:
- 每个细胞都可以是活的(黑色)或死的(白色)。
- 如果一个活着的细胞有少于2个活着的邻居,它就会死去—— loneliness。
- 如果一个活着的细胞有3个以上的邻居,它就会死去——overcrowding。
- 如果一个活着的细胞有2个或3个活着的邻居,它就会活着——survival。
- 如果一个死亡的细胞正好有3个活的邻居,它就会活下来——reproduction。
活细胞的初始模式构成了系统的第一代。然后,这些规则同时应用于系统中的每一个细胞,产生第二代,以此类推。系统的长期行为是什么?
Loneliness
如果一个活的细胞少于2个活的邻居,它就会死亡:
Overcrowding
如果一个活着的细胞有超过3个活着的邻居,它就会死亡:
Survival
如果一个活着的细胞有2个或3个活着的邻居,它就能保持活力:
Reproduction
如果一个死细胞正好有3个活的邻居,它就会活过来:
具体地例子:
随着时间的推移,出现了有组织的模式:
可用于实现携带信息的信号和对这些信号的逻辑操作。
总结:
《Game of Life》(以及更普遍的《CA》)便是复杂系统的典型例子,性质如下:
- many components
- local interactions
- decentralised control
- parallel processing
- emergent global behaviour
- self-organisation
然而,它们仍然做出了一些强有力的假设,可能限制了它们作为真实系统模型的适用性:
- 所有的更新都是同步进行的
- 所有的更新都是确定性的
下一篇博客我们将讨论如何创建更现实的CA模型:捕食者与猎物的相互作用和一种传染病的传播。
复杂系统学习(五):细胞自动机 I:1D 和 2D CAs相关推荐
- 【系统学习】环境土壤物理模型HYDRUS1D/2D/3D
Hydrus是基于Windows系统界面开发的环境土壤物理模拟软件,是模拟一维和多维变饱和多孔介质的水流.溶质(污染物等)运移.根系吸水和溶质吸收.热量传输等方面的强有力工具.该模型具有灵活方便的图形 ...
- 系统学习机器学习之增强学习(五)--马尔可夫决策过程策略TD求解(SARSA)
转自:https://www.cnblogs.com/pinard/p/9529828.html 1.时间差分法(temporal difference) 蒙特卡洛方法,需要所有的采样序列都是经历完整 ...
- 开放信息抽取(OIE)系统(五)-- 第四代开放信息抽取系统(基于深度学习, deeplearning-based, 抽取式生成式)
开放信息抽取(OIE)系统(五)-- 第四代开放信息抽取系统(基于深度学习, deeplearning-based, 抽取式&生成式) 一.第四代开放信息抽取系统背景 第四代开放信息抽取系统的 ...
- java学mybatis还用学jdbc吗,mybatis系统学习(二)——使用基础mybatis代替原始jdbc
mybatis系统学习(二)--使用基础mybatis代替原始jdbc 前言 这一篇笔记的内容应当是建立在上一篇的基础之上,不论是使用的数据表,还是对应的实体类,都在上一篇有过说明. 有兴趣的或者对相 ...
- python自学流程-Python系统学习流程图,教你一步步学习python
对于刚开始接触Python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了!接下来我给大家分享下多位大牛倾力打造的python系统学习流程,一个月才设计完的! Pytho ...
- Netty实战 IM即时通讯系统(五)客户端启动流程
## Netty实战 IM即时通讯系统(五)客户端启动流程 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 实战: 客户端和服务端双向通信 数据传输载体ByteBuf ...
- 用python设计一个管理系统思路_Python大佬一个月打造的Python系统学习流程图!
对于刚开始接触Python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了!接下来我给大家分享下多位大牛倾力打造的python系统学习流程,一个月才设计完的! Pytho ...
- C#多线程学习(五) 多线程的自动管理(定时器) (转载系列)——继续搜索引擎研究...
Timer类:设置一个定时器,定时执行用户指定的函数. 定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数. 初始化一个Timer对象: Timer timer ...
- Docker学习五:Docker 数据管理
前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...
- 布谷鸟哈希函数的参数_系统学习hash算法(哈希算法)
系统学习hash算法(哈希算法) 转载请说明出处. 前言: 关于本文<系统学习hash算法>的由来.在看到了<十一.从头到尾彻底解析Hash 表算法>这篇文章之后,原文中没有暴 ...
最新文章
- 运动目标检测__光流法
- 代码缺陷导致 CloudFlare 泄露大量客户站点的密码等私密信息
- Java实现仿百度文库文档在线阅读
- winform打开cad图纸_为什么CAD图纸打开后会显示很多问号“???”,该怎么解决...
- python人工智能pdf_800G人工智能学习资料:AI电子书+Python语言入门+教程+机器学习等限时免费领取!...
- ESP8266调试-P2P(AP模块与STA模块通信)
- PL/SQL Developer 8.0.2.1505 简体中文汉化版下载,带注册机-永久注册。
- 分数等级_山东新高考:quot;6选3quot;等级考分数是怎么换算出来的
- java如何查内存泄露_如何排查Java内存泄露
- 教你用MSChart控件绘制正态分布图形
- 重庆市计算机考试题库,重庆市计算机一级题库
- 【Excel】数据的输入
- DoDataExchange(CDataExchange* pDX)没有执行到原因
- python单核运行_python下多核,单核CPU对于并行,并发执行效率的对比-Go语言中文社区...
- Win10安装Linux子系统教程
- LinkedList 类 的简单应用
- RGB-D论文复习速读
- Tez的web UI简单体验
- linux修改SSH密码的方法
- 青龙面板之九章油条(更新)