简要概述元胞自动机及其应用

谈一些自己的所学,有错误请指正。

元胞自动机( Cellular Automata) 是 20 世纪 50 年代初由计算机之父冯·诺依曼( J.

von Neumann) 为了模拟生命系统所具有的自复制功能而提出来的。此后,史蒂芬·沃尔夫勒姆( Stephen Wolfram) 对元胞自动机理论进行了深入的研究,例如,他对一维初等元胞机全部 256 种规则所产生的模型进行了深入研究,并将元胞自动机分为平稳型、周期型、混沌型和复杂型 4 种类型。

元胞自动机采用离散的空间布局和离散的时间间隔,将元胞分成有限种状态,元胞个体状态的演变仅与其当前状态以及其某个局部邻域的状态有关。

元胞自动机以计算机建模和仿真的方法,研究由类似于生物细胞( Cell) 的大量并

行单元个体组成的复杂系统的宏观行为与规律。 L-系统、有限凝聚扩散、格子气自动机[1-2]、格子 Boltzmann 方法[3]、交通流模型等都是元胞自动机的具体化,它们都有着重要的理论意义和实际应用价值。 元胞自动机方法是研究复杂系统的有力工具,是新方法、 新学科的重要生长点[4]。

初等元胞自动机( Elementary Cellular Automata, ECA)的基本要素如下

    • 空间:一维直线上等间距的点。可为某区间上的整数点的集合。
    • 状态集:S={s1,s2} 即只有两种不同的状态。这两种不同的状态可将其分别编码为0 与 1;若用图形表示,则可对应“黑”与“白” 或者其他两种不同的颜色。
  • 邻居:取邻居半径r=1,即每个元胞最多只有“左邻右舍”两个邻居。
  • 演化规则:任意设定, 最多2^8=256 种不同的设定方式。元胞以相邻的8个元胞为邻居。即Moore邻居;一个元胞的生死由其在该时刻本身的生死状态和周围八个邻居的状态。

比如:

ECA #76 = (01001100)2

ECA #184 = (10111000)2
交通流“单车道跟驰”(不允许超车)的雏形

ECA #90 = (01011010)2

“左邻右舍”模2加法

类似Sierpinski三角形

最后谈一下元胞自动机的应用

元胞自动机方法是一个框架模型,这个框架不必是刚性的,而是一个从实用主义出发考虑的模拟思想体系。元胞自动机模拟的要点是捕捉所研究现象的基本特性。

在实际应用过程中,有的元胞自动机模型对其中的某些特征进行了扩展,有的在规则设计中引入随机因素,如:森林火灾模型。 又如,在交通、通讯发达的今天, 研究流行病或计算机病毒的传播问题时, 我们还可以将空间背景换成复杂网络的结点,用网络邻接点作为邻居。这样的调整显然比仍旧使用二维欧氏空间、采用欧氏距离的模型更加符合实际情况。 在大型场所人群紧急疏散问题模拟研究中,可以考虑年龄、性别等因素,即元胞不是同质的,更加有利于使模拟系统接近真实系统。

元胞自动机将简单与复杂、 微观与宏观、 局部与整体、 有限与无穷、 离散与连续等
一对对哲学范畴紧密联系在一起,可望成为探索复杂科学的利器。

S. Wolfram曾说:

应该在学线性代数之前,先学元胞自动机。

参考文献:

[1] Hardy J, Pomeau Y, de Pazzis O. Time evolution of a two-dimensional model system. J.Math. Phys., 14:1746-1759, 1973

[2] Frish U, Hasslacher B, Pomeau Y. Lattice-gas automata for the Navier-Stokes equation.Phys. Rev. Lett., 56: 1505-1508, 1986

[3] Qian Y(钱跃竑), d‘Humié res D, Lallemand P. Lattice BGK model for Navier-Stokes

equation. Europhys. Lett., 17: 479-484, 1992

[4] Wolfram S. A New Kind of Science[M]. Wolfram Media Inc, 2002

时间: 2024-10-12 21:41:38

简要概述元胞自动机及其应用的相关文章

元胞自动机+生命游戏

元胞自动机 元胞自动机(Cellular Automaton,复数为Cellular Automata,简称CA,也有人译为细胞自动机.点格自动机.分子自动机或单元自动机).是一时间和空间都离散的动力系统.散布在规则格网 (Lattice Grid)中的每一元胞(Cell)取有限的离散状态,遵循同样的作用规则,依据确定的局部规则作同步更新.大量元胞通过简单的相互作用而构成动态系统的演化. 不同于一般的动力学模型,元胞自动机不是由严格定义的物理方程或函数确定,而是用一系列模型构造的规则构成.凡是满

用元胞自动机实现多数分类算法

元胞自动机(Cellular automaton) 元胞自动机是由元胞组成的网格,每个元胞都根据邻域的状态来选择开或关.所有的元胞都遵循同样的规则,也称为元胞的更新规则,规则根据各元胞邻域的当前状态决定元胞的下一步状态.同自然界的复杂系统一样,元胞自动机也是由大量简单个体(元胞)组成,不存在中央控制,每个个体都只与少量其他个体交互.而且元胞自动机也能表现出非常复杂的行为,它们的行为很难甚至不可能通过其更新规则来预测.元胞自动机有很多种类型,著名的"生命游戏"也是元胞自动机的一种. 初等

编程模拟自然(九):元胞自动机

序 旧书有云:发鸠之山,其上多柘木.有鸟焉,其状如乌,文首.白喙.赤足,名曰精卫,其鸣自詨. 一日,精卫游于码海,溺而不返,后常衔西山之木石,以堙于海.有诗为证: 万事有不平,尔何空自苦: 长将一寸身,衔木到终古? 我愿平码海,身沉心不改: 码海无平期,我心无绝时. 呜呼!君不见,西山衔木众鸟多,鹊来燕去自成窠! (前情提要:主角元乘坐返回舱降落到了码海上,随后遇到了个鸟人...) “咳咳,远道的客人,我名精卫XIV,乃是先祖精卫鸟的第十四代后裔...”鸟人作自我介绍 “...你是谁,从哪里来又

【转载】【元胞自动机】生命游戏(时间简史)

原帖:http://www.cnblogs.com/lvpengms/archive/2010/02/08/1666095.html 晚上闲着没事干,鉴于前一段时间数学建模中看到了生命游戏 Game of Life,所以用C++实现一下,效果还不错. 本程序是用vs2005 C++编写,有意想要程序和源码的朋友可以给我发邮件. 更新:程序源码可以从这个地址下载:下载元胞自动机源码及程序 =======================================================

元胞自动机简介

摘要: 元胞自动机能利用简单的局部规则和离散方法描述复杂的全局的连续系统,已成为探索复杂系统的一种有效工具. 文章 阐述了元胞自动机的发展历程.结构.特征及基本理论与方珐: 介绍了元胞自动机在寡头垄断行为.交通管理及工程运输.城市发展.市场营销.股票投资.企业战略等管理领域中的应用: 指出元胞自动机理论的优势与不足, 并提出进一步的研究展望. 1引言 复杂科学 20世纪80年代,以美国圣塔菲(SantaFe)学派为首提出了复杂科学,一经提出,在世界范围内引起了广泛的关注.目前,关于复杂性和复杂系

元胞自动机

元胞自动机(cellular automata,CA)  元胞自动机(cellular automata,CA) 是一种时间.空间.状态都离散,空间相互作用和时间因果关系为局部的网格动力学模型,具有模拟复杂系统时空演化过程的能力. 元胞自动机是一类模型的总称,或者说是一个方法框架.其特点是时间.空间.状态都离散,每个变量只取有限多个状态,且其状态改变的规则在时间和空间上都是局部的. 有限自动机 有限自动机是一种控制状态有限.符号集有限的自动机,是一种离散输入输出系统的数学模型. 从数学上来定义,

基于元胞自动机NaSch模型的多车道手动-自动混合驾驶仿真模型的Matlab实现

模型的建立基本来自于:http://www.doc88.com/p-2078634086043.html 花了一天半的时间用新学会的matlab实现了一下. NaSch模型主函数: function [ret_Vave] = NaSch() rng('shuffle'); global CellsNum; CellsNum = 200; %The number of cells in each lane global LanesNum; LanesNum = 3; %The number of

几个设计元胞自动机式智能的挑战

知道我的理论的人不多,但是这个问题完全可以当成一个小游戏,规则如下: 有若干"神经元",每个处在激活态或未激活态(一共2个状态) 神经元有"能量"和"阈值",为方便理解,先假设每个神经元都一样 神经元间存在单向的联系,允许两个神经元间有多个联系(比如一正一反) 这若干个神经元可以进行"演化",每次演化,神经元同时行动,先把自己的能量平均分给联系到的神经元,然后如果接收到超过阈值的能量,就激活,否则不激活. 如果两个神经元同时激

Python案例(一):协程实现康威生命游戏,元胞自动机

from collections import namedtuple import os,time import random Query=namedtuple('Query',('y','x')) Transition=namedtuple('Transition',('y','x','state')) ALIVE="*" EMPTY="-" def count_neighbors(y,x): n_=yield Query(y+1,x+0) ne=yield Qu