元胞自动机-附代码注释

article/2025/10/12 22:26:25

元胞自动机(Cellular Automata CA)是一种时空离散的局部动力学模型,是研究复杂系统的一种典型方法,适用于空间复杂系统的时空动态模拟研究。
元胞自动机不是由严格定义的物理方程或函数确定,而是用一系列模型构造的规则构成。满足这些规则的模型都可算作是元胞自动机模型。故元胞自动机是一类模型的总称,或者说是一个方法框架。
在CA模型中,散布在规则格网(Lattice Grid)中的每一元胞(Cell)取有限的离散状态,遵循同样的作用规则,依据确定的局部规则作同步更新。大量元胞通过简单的相互作用而构成动态系统的演化。

元胞自动机的组成部分有元胞、元胞空间、邻居及规则四部分。
简单讲,元胞自动机可以视为由一个元胞空间和定义于该空间的变换函数所组成。

元胞自动机的元胞

元胞是元胞自动机的最基本组成部分。它分布在离散的一维、二维或多维欧几里德空间的晶格点上。
状态,状态可以是{0,1}的二进制形式,或是整数形式的离散集。严格意义上,元胞只能有一个状态变量,但在实际应用中,往往将其进行扩展。

元胞自动机的元胞空间

元胞空间元胞所分布在的空间网点集合就是元胞空间。
对于一维元胞自动机,元胞空间划分只有一种。而高维的元胞自动机,元胞空间的划分则可能有多种形式。对于常见的二维自动机,元胞空间通常可按三角形、四边形或六边形三种网格排列。

  • 三角网格:拥有较少的邻居数目,这在某些时候很有用。缺点是计算机的表达与显示不方便。
  • 四边形网格 (最常用):直观简单,特别适合于计算机环境下进行表达显示。
  • 六边形网格:能较好的模拟各向同性的现象,因此,模型能更加自然而真实。其缺点同正三角网格一样,在表达显示上较为困难和复杂。

在理论上,元胞空间的边界条件在各个维向上是无限延展的,但实际应用过程中,无法在计算机上实现这一理想条件。

元胞自动机的邻居

在数学上,它通常可以表示为一个多维的整数矩阵。
邻居、元胞和元胞空间只表示了系统的静态成分,为了将动态引入系统,必须加入演化(规则。这些规则是定义在局部空间范围内的,即一个元胞下一时刻的状态决定于本身的状态和它的邻居无胞的状态。因此,在指定规则之前,必须定义一定的邻居规则,明确哪些元胞属于该元胞的邻居。
一维元胞自动机中,通常以半径r来确定邻居,距离一个元胞r内的所有元胞都属于该元胞的邻居。
二维元胞自动机的邻居定义较为复杂,但通常有以下几种(以正方形网格为例)
在这里插入图片描述

元胞自动机的规则

规则根据元胞当前状态及其邻居状况确定下一时刻该元胞状态的动力学函数。简单讲,就是状态转移函数。这个函数构造了一种简单的离散的时间和空间范围的局部物理成分。状态的变化可以由状态转移函数表示。t时刻的邻居状态组合时间元胞自动机是一个动态系统,它在时间维上的变化是离散的,即时间t是一个整数值,而且连续且等间距。在转换函数中,一个元胞在t+1时刻的状态只直接决定于t时刻的该元胞及其邻居的状态。

元胞自动机的特性

把一个空间划分成网络,每一个点表示一个元胞,它们的状态赋值,在网格中用颜色的变化来表示,在事先设定的规则下,元胞的演化就用网格颜色的变化来描述,这样的模型就是元胞自动机。
通过对元胞自动机这些网络中的格点的不同定义,以及初始条件的不同,可以模拟出不同的现象和过程。
离散性:元胞自动机是高度离散的。它不仅仅空间离散时间离散,而且在函数值,即元胞的状态值也是离散的。
动力学演化的同步性:元胞自动机具有利用简单的,局部规则的和离散的方法,描述复杂的,全部的和连续系统的能力。
相互作用的局部性:元胞自动机的规则是局部的,而动力学行为规则是全局的,在模拟的过程中,具体的演化过程也是局部的,即仅同周围的元胞有关系。
时间、空间、状态都离散,每个变量只取有限多个状态,且其状态改变的规则在时间和空间上都是局部的。

元胞自动机的应用思想

复杂系统又称为非线性系统。如城市的发展与演化、城市人流与交通流以及交通堵塞的形成、自然环境下的动物的空间分布、河网的形成、疾病的传播等。
传统的自顶向下的分析方法是把系统分割成几个部分,对每一个部分逐个进行研究。而目前提出来的分析复杂动态系统的思想:自底向上的研究方法。

元胞自动机的演化行为的统计特征

Wolfram将元胞自动机的演化行为归纳为四大类:
平稳型(homogeneous) :自任何初始状态开始经过一定时间演化后,经过若干步运算便停留在一个固定的状态。
周期型(periodic):经过一定时间演化后,在几种状态之间周期循环。
混沌型(chaos):自任何初始状态开始,经过一定时间演化后,处于一种完全无序随机的状态,几乎找不到任何规律。
复杂型(edge of chaos):在演化的过程中可能产生复杂的结构,这种结构既不是完全的随机混乱,又没有固定的周期和状态。
固定点->周期->复杂->混沌

其实元胞自动机更多的是相当于一种思想、一种框架,通过设置一套规则,将时间离散化后,对元胞进行规则下的随时间的演化。

至今元胞自动机已经有了非常广泛的应用,典型应用如交通流模型、人员疏散模型、森林火灾模型、传染病模型、土地利用演化模型、城市发展扩张、交通状况模拟、博物馆逃生模拟等等。

森林火灾模拟

%% 森林火灾
m = 300; n = 300; % 表示森林的矩阵行列 m x nPlight = 5e-6;    % 闪电概率
Pgrowth = 1e-2;   % 生长概率% 邻居方位 d 和点燃概率 p
d = {[1,0], [0,1], [-1,0], [0,-1]};
p = [    1,     1,      1,      1];% % 改进元胞自动机
% d = {[1,0], [0,1], [-1,0], [0,-1], [1,1], [-1,1], [-1,-1], [1,-1]};
% p = [ones(1,4), ones(1,4)*(sqrt(1/2)-1/2)];% % 考虑风的情况
% d = {[1,0], [0,1], [-1,0], [0,-1], [1,1], [-1,1], [-1,-1], [1,-1], [0,-2]};
% p = [ 0.80,  0.30,   0.80,   1.00,  0.12,   0.12,    0.30,   0.30,    0.8];% 空=0, 火=1, 树=2
E = 0; F = 1; T = 2;S = T * (rand(m, n) < 0.5);imh = image(cat(3, S==F, S==T, zeros(m,n)));
axis image;for t = 1:3000% 计算邻居中能传播着火的个数sum = zeros(size(S));for j = 1:length(d) % 计算四个方向的着火邻居sum = sum + p(j) * (circshift(S,d{j}) == F);endisE = (S==E); isF = (S==F); isT = (S==T);     % 找出三种不同的状态ignite = rand(m,n) < sum | (rand(m,n) < Plight);  % 着火条件% 规则 1: 着火Rule1 = T * (isT & ~ignite) + F * (isT & ignite);% 规则 2: 烧尽Rule2 = F*isF - F*isF;% 规则 3: 新生Rule3 = T * (isE & rand(m,n) < Pgrowth);S = Rule1 + Rule2 + Rule3;set(imh, 'cdata', cat(3, isF, isT, zeros(m,n)))drawnow
end

生命游戏模拟

%% 生命游戏
%% 界面控制
startbutton = uicontrol('style','pushbutton','string','start','fontsize',12,'position',[100,400,50,20],'callback','start=1;');
freezebutton = uicontrol('style','pushbutton','string','freeze','fontsize',12,'position',[320,400,50,20],'callback','freeze=1;');
quitebutton = uicontrol('style','pushbutton','string','quit','fontsize',12,'position',[400,400,50,20],'callback','stop=1;close;');
number = uicontrol('style','text','string','1','fontsize',12,'position',[20,400,50,20]);
freeze_at_text = uicontrol('style','text','string','freeze at:','fontsize',12,'position',[180,400,80,20],'callback','start=1;');
freeze_at = uicontrol('style','edit','string','1000','fontsize',12,'position',[250,400,50,20]);
%% 初始化设置
n = 400; % 元胞数目
z = zeros(n, n);
cells = (rand(n, n)) < 0.6; % 初始值随机分布
big_matrix = zeros(n+2, n+2); % 增补矩阵
big_matrix(2:end-1, 2:end-1) = cells;
imh = image(cat(3,z, z, cells)); % 建立图像句柄
figure(gcf);
set(gcf, 'doublebuffer', 'on'); % 开启双缓冲
%% 主循环
start = 0; stop = 0; freeze = 0;
while stop == 0if findobj == 0 % 用来监视窗口是否已经被关闭 防止报错break;endif start == 1z = zeros(n, n);sum = sum_neighbour(big_matrix); % 计算邻居状态和z(cells == 1 & (sum == 2 | sum == 3)) = 1; % 按规则更新状态z(cells == 0 & sum == 3) = 1;big_matrix(2:end-1,2:end-1) = z; % 将新状态填充回增补矩阵cells = z; % 将状态更新set(imh, 'cdata', cat(3, zeros(n,n), zeros(n,n), cells)); % 画图stepnumber = 1 + str2double(get(number, 'string')); % 更新计数set(number, 'string', num2str(stepnumber));endif (freeze == 1 || stepnumber == str2double(get(freeze_at, 'string'))) % 判断是否暂停start = 0;freeze = 0;enddrawnow % 更新绘图
end
%% 计算邻居和函数
function [A] = sum_neighbour(B)
% 元胞自动机 计算周围邻居的状态和A = B(1:end-2,1:end-2)+B(1:end-2,2:end-1)+B(1:end-2,3:end)+B(2:end-1,1:end-2)+B(2:end-1,3:end)+B(3:end,1:end-2)+B(3:end,2:end-1)+B(3:end,3:end);
end

http://chatgpt.dhexx.cn/article/ff6NZtZe.shtml

相关文章

元胞自动机简介

摘要&#xff1a; 元胞自动机能利用简单的局部规则和离散方法描述复杂的全局的连续系统&#xff0c;已成为探索复杂系统的一种有效工具。文章 阐述了元胞自动机的发展历程、结构、特征及基本理论与方珐&#xff1b;介绍了元胞自动机在寡头垄断行为、交通管理及工程运输、城市…

数模笔记14-元胞自动机

元胞自动机模型 元胞自动机理论 元胞自动机&#xff08;Cellular Automata&#xff0c;CA&#xff09;是一种时空离散的局部动力学模型&#xff0c;是研究复杂系统的一种典型方法&#xff0c;特别适合用于空间复杂系统的时空动态模拟研究。 元胞自动机不是由严格定义的物理方程…

【数学建模】元胞自动机

前些天发现一个通俗易懂&#xff0c;风趣幽默的人工智能学习网站&#xff1a; 传送门 A 简介 1 历史 最初的元胞自动机是由冯 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 何顿 康威设计了一个电脑游戏 “生…

关于元胞自动机

元胞自动机(cellular automata&#xff0c;CA) 是一种时间、空间、状态都离散&#xff0c;空间相互作用和时间因果关系为局部的网格动力学模型&#xff0c;具有模拟复杂系统时空演化过程的能力。 其实在去年暑假准备国赛的时候试图过自学&#xff0c;但受限于&#xff0c;网上…

元胞自动机(数学建模)

一.元胞自动机的概念 元胞自动机(cellular automata&#xff0c;CA) 是一种时间、空间、状态都离散&#xff0c;空间相互作用和时间因果关系为局部的网格动力学模型&#xff0c;具有模拟复杂系统时空演化过程的能力。 元胞自动机是用一系列模型构造的规则构成&#xff0c;只要满…

元胞自动机

一个一个的格子看做是一个个的元胞&#xff0c;他们按照自己的规则自动进行状态改变就是元胞自动机。 定义&#xff1a;是一种时间、空间、状态都离散&#xff0c;空间相互作用和时间因果关系为局部的网格动力学模型&#xff0c;具有模拟复杂系统时空演化过程的能力。 元胞自…

元胞自动机简介(美赛复习一)

为美赛准备&#xff0c;进行元胞自动机的简单回顾。 本文只是简单回顾&#xff0c;可能会进行相关论文复现。 文章目录 一、简介 1.元胞2.元胞空间3.元胞邻居4.边界条件5.规则二、简单例子 一、简介 元胞自动机&#xff1a;是一种时间、空间、状态都离散&#xff0c;空间相互…

【数学建模】元胞自动机(CA)详解 + Matlab代码实现

文章目录 一、什么是元胞自动机&#xff1f;二、图解元胞自动机&#xff1a;三、案例Matlab代码实现&#xff1a;1.奇偶规则2.生命游戏3.森林火灾 一、什么是元胞自动机&#xff1f; 元胞自动机(cellular automata&#xff0c;CA) 是一种时间、空间、状态都离散&#xff0c;空…

迁移学习在金融行业的应用探索

摘要&#xff1a;通过迁移学习技术&#xff0c;解决少量数据&#xff08;较少重叠样本和特征&#xff09;和个性化&#xff08;较少标记&#xff09;的问题&#xff0c;从数据丰富的领域迁移到数据匮乏的领域。通过迁移学习在保证模型准确率的同时&#xff0c;也提高了建造模型…

pytorch之迁移学习

文章目录 1.导入相关的包2.加载数据3.可视化部分图像数据4.训练模型5.可视化模型的预测结果6.场景1&#xff1a;微调ConvNet7.场景2&#xff1a;ConvNet作为固定特征提取器 实际中&#xff0c;基本没有人会从零开始&#xff08;随机初始化&#xff09;训练一个完整的卷积网络&a…

翻译: Transfer learning 迁移学习指南

这是您需要了解的有关经典迁移学习和深度迁移学习的所有信息。阅读本指南可改进您的模型训练并在更短的时间内获得更好的性能。 1. 背景 事情是这样的—— 至少可以说&#xff0c;在处理一项全新的任务时收集大量数据可能具有挑战性。 然而- 仅使用有限数量的训练数据获得…

迁移学习方法学习

目录 迁移学习的基础知识迁移学习的概念迁移学习的分类按目标域标签分按学习方法分按特征分类按离线与在线形式分 迁移学习的基本方法基于样本的迁移基于特征的迁移基于模型的迁移基于关系的迁移 深度迁移学习深度网络的可迁移性最简单的迁移学习——finetune finetune的使用技…

迁移学习实例

上一篇我们介绍了迁移学习的核心思想和流程&#xff0c;我们介绍一个实例来加深理解。 传送门&#xff1a;迁移学习概述 获取预训练模型 pytorch和tensorflow都封装了很多预训练模型。 pytorch通过工具包torchvision.models模块获取&#xff0c;主要包括AlexNet、VGG系列、 Res…

迁移学习与微调的区别

一、迁移学习&#xff1a; 1、从字面意义上理解是知识转移的学习方法&#xff0c;指一种学习方法&#xff1b;类比机器学习、深度学习等等概念&#xff1b; 2、把已训练好的模型参数迁移到新的模型来帮助新模型训练二、微调&#xff1a; 1、从字面意义上理解是小小的调整&…

迁移学习---举一反三

1.概念 迁移学习是指充分考虑数据、任务、或者模型的相似性&#xff0c;将在旧领域学习到的模型&#xff0c;应用到新的领域的一种学习过程。 通俗的讲就是把已经学习训练好的模型参数迁移到新的模型进行训练。考虑到大部分数据或任务是存在相关性的&#xff0c;所以通过迁移…

迁移学习基础

人类具有跨任务传输知识的固有能力。我们在学习一项任务的过程中获得的知识&#xff0c;可以用来解决相关的任务。任务相关程度越高&#xff0c;我们就越容易迁移或交叉利用知识。到目前为止所讨论的机器学习和深度学习算法&#xff0c;通常都是被设计用于单独运作的。这些算法…

学习迁移学习

学习迁移学习 一、相关背景 随着机器学习和数据挖掘不断发展&#xff0c;一个愈加明显的问题出现在人们面前&#xff1a;要想机器学习能够正常运转必须要保证训练集和测试集有相同的特征空间并且同分布。一旦分布改变&#xff0c;大多数模型往往要根据数据重建&#xff0c;这…

联邦迁移学习

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/123573886 一、联邦学习的定义 横向联邦学习和纵向联邦学习要求所有的参与方具有相同的特征空间或样本空间&#xff0c;从而建立起一个有效的共享机器学习模型。然而&#xff0c;在更多的实际情况下&am…

迁移学习(二)

迁移学习综述&#xff08;二&#xff09;&#xff08;学习笔记&#xff09; A Comprehensive Survey on Transfer Learning 1.引言 迁移学习的目标是利用来自相关领域(称为源领域)的知识&#xff0c;以提高学习性能或最小化目标领域中需要的标记示例的数量。知识转移并不总是…

深度学习中的迁移学习介绍

迁移学习(Transfer Learning)的概念早在20世纪80年代就有相关的研究&#xff0c;这期间的研究有的称为归纳研究(inductive transfer)、知识迁移(knowledge transfer)、终身学习(life-long learning)以及累积学习(incremental learning)等。直到2009年&#xff0c;香港科技大学杨…