【数学建模】元胞自动机

【数学建模】元胞自动机最初的元胞自动机是由冯 诺依曼在 1950 年代为模拟生物细胞的自我复制而提出的 但是并未受到学术界重视 1970 年 剑桥大学的约翰 何顿 康威设计了一个电脑游戏 生命游戏 后 元胞自动机才吸引了科学家们的注意 1983 年 S Wolfram 发表了一系列论文 对初等元胞机 256 种规则所产生的模型进行了深入研究 并用熵来描述其演化行为 将细胞自动机分为平稳型 周期型 混沌型和复杂型 A 应用社会学 元胞自动机经常用于研究个人行为的社会性 流行现象

前些天发现一个通俗易懂,风趣幽默的人工智能学习网站:

传送门

A 简介

1 历史
最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视.
1970 年, 剑桥大学的约翰 · 何顿 · 康威设计了一个电脑游戏 “生命游戏” 后, 元胞自动机才吸引了科学家们的注意.




1983 年 S.Wolfram 发表了一系列论文. 对初等元胞机 256 种 规则所产生的模型进行了深入研究, 并用熵来描述其演化行 为, 将细胞自动机分为平稳型, 周期型, 混沌型和复杂型.

2 应用

  • 社会学: 元胞自动机经常用于研究个人行为的社会性, 流行 现象. 例如人口迁移, 公共场所内人员的疏散, 流行病传播.
  • 图形学: 元胞自动机以其特有的结构的简单性, 内在的并行 性以及复杂计算的能力成为密码学中研究的热点方向之一
  • 物理学: 在物理学中, 元胞自动机已成功的应用于流体, 磁 场, 电场, 热传导等的模拟. 例如格子气自动机.

3 一维元胞自动机——交通规则
定义:

  • 元胞分布于一维线性网格上.
  • 元胞仅具有车和空两种状态.
    在这里插入图片描述

  • 元胞状态由周围两邻居决定.

4 二维元胞自动机——生命游戏
定义:

  • 元胞分布于二维方型网格上.
  • 元胞仅具有生和死两种状态.
    在这里插入图片描述

  • 元胞状态由周围八邻居决定.

5 什么是元胞自动机
离散的系统: 元胞是定义在有限的时间和空间上的, 并且元 胞的状态是有限.
动力学系统: 元胞自动机的举止行为具有动力学特征.
简单与复杂: 元胞自动机用简单规则控制相互作用的元胞 模拟复杂世界.
在这里插入图片描述








6 构成要素

在这里插入图片描述 在这里插入图片描述
  • 状态: 每一个元胞都有记忆贮存状态的功能.
  • 离散: 简单情况下, 元胞只有两种可能状态; 较复杂情况下, 元胞具有多种状态.
  • 更新: 元胞的状态都安照动力规则不断更新.

分类 :

  • 总和型: 某元胞下时刻的状态取决于且仅取决于它所有邻居 的当前状态以及自身的当前状态.
  • 合法型: 总和型规则属于合法型规则. 但如果把元胞自动机 的规则限制为总和型, 会使元胞自动机具有局限性.

程序实现
周期性边界条件
购进啊
在这里插入图片描述
其中的数字为编号
构建邻居矩阵
在这里插入图片描述












% simulate forest fire with cellular automata % zhou lvwen:  % August 15 2010 n = 300; % 定义表示森林的矩阵大小 Plight = 5e-6; Pgrowth = 1e-2; % 定义闪电和生长的概率 UL = [n 1:n-1]; DR = [2:n 1]; % 定义上左,下右邻居 veg=zeros(n,n); % 初始化表示森林的矩阵 imh = image(cat(3,veg,veg,veg)); % 可视化表示森林的矩阵 % veg = 空地为0 着火为1 树木为2 for i=1:3000 sum = (veg(UL,:)==1) + ... (veg(:,UL)==1) + (veg(:,DR)==1) + ... (veg(DR,:)==1); % 计算出所有格子有几个邻居是着火的 % 根据规则更新森林矩阵:是否树=是否树-是否着火的树+是否新生的树(0-1运算) veg = 2*(veg==2) - ... ( (veg==2) & (sum>0 | (rand(n,n) 
  

时空轨迹(横轴是空间纵轴为时间)

在这里插入图片描述

1 加速规则:不能超过 v m a x ( 2 格 / s ) v_{max}(2格/s) vmax2/s
2 防止碰撞:不能超过车距

function [rho, flux, vmean] = ns(rho, p, L, tmax, animation, spacetime) vmax = 5; %最大速度 % place a distribution with density ncar = round(L*rho); % 车数量=L*rho rho = ncar/L; x = sort(randsample(1:L, ncar)); % 从1到L中随机采ncar格样并排序 v = vmax * ones(1,ncar); % 初始化所有车子su'du1为vmax flux = 0; % number of cars that pass through the end vmean = 0; road = zeros(tmax, L); for t = 1:tmax % 加速规则 v = min(v+1, vmax); %防止碰撞 gaps = gaplength(x,L); % 获得每一辆车到前面一辆车的距离 v = min(v, gaps-1); % 随机减速 vdrops = ( rand(1,ncar)

L; % 车走过整个路段 x(passed) = x(passed) - L;% 回到起点 if t>tmax/2 flux = flux + sum(v/L); %平均流量 vmean = vmean + mean(v); end road(t,x) = 1; end flux = flux/(tmax/2); vmean = vmean/(tmax/2); if spacetime; figure;imagesc(road);colormap([1,1,1;0,0,0]);axis image; end % ------------------------------------------------------------------------- function gaps = gaplength(x,L) % 计算车距 ncar = length(x); gaps=zeros(1, ncar); if ncar>0 gaps = x([2:end 1]) -x; % d(i)=x(i+1)-x(i) gaps(gaps<=0) = gaps(gaps<=0)+L; %d(i)=d(i)+L,if d(i)<0 end nsity = 0:0.02:1; roadlength = 100; vmax = 5; tmax = 200; pbrak = 0; flux = []; vmean = []; for rho = density [R, J, V] = ns(rho, pbrak, roadlength, tmax, 0, 0); flux = [flux; J]; vmean = [vmean; V]; end % ------------------------- density vs. volecity -------------------------- figure plot(density, vmean,'k.','markersize',15); hold on plot(density,min(vmax, 1./density-1),'-r','linewidth',2) ylim([0,5.55]) legend({'Cellular automata aproach', ... '$v(\rho) = \min\{v_{\max}, 1/\rho-1\}$'}, ... 'interpreter','latex') xlabel('density in vehicles/cell') ylabel('velocity in cell/time') % --------------------------- density vs. flux ---------------------------- figure plot(density, flux,'k.','markersize',15); hold on; plot(density,min(density*vmax, 1-density),'-r','linewidth',2) legend({'Cellular automata aproach', ... '$J(\rho) = \min\{\rho\cdot v_{\max}, 1-\rho\}$'}, ... 'interpreter','latex') xlabel('density in vehicles/cell') ylabel('flux in vehicles/time')

density = 0:0.02:1; roadlength = 100; vmax = 5; tmax = 200; pbrak = 0; flux = []; vmean = []; for rho = density [R, J, V] = ns(rho, pbrak, roadlength, tmax, 0, 0); flux = [flux; J]; vmean = [vmean; V]; end % ------------------------- density vs. volecity -------------------------- figure plot(density, vmean,'k.','markersize',15); hold on plot(density,min(vmax, 1./density-1),'-r','linewidth',2) ylim([0,5.55]) legend({'Cellular automata aproach', ... '$v(\rho) = \min\{v_{\max}, 1/\rho-1\}$'}, ... 'interpreter','latex') xlabel('density in vehicles/cell') ylabel('velocity in cell/time') % --------------------------- density vs. flux ---------------------------- figure plot(density, flux,'k.','markersize',15); hold on; plot(density,min(density*vmax, 1-density),'-r','linewidth',2) legend({'Cellular automata aproach', ... '$J(\rho) = \min\{\rho\cdot v_{\max}, 1-\rho\}$'}, ... 'interpreter','latex') xlabel('density in vehicles/cell') ylabel('flux in vehicles/time') 

周吕文 中国科学院力学研究所

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209676.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午8:40
下一篇 2026年3月19日 上午8:41


相关推荐

  • Navicat Premium 12连接Oracle时提示oracle library is not loaded的问题解决

    Navicat Premium 12连接Oracle时提示oracle library is not loaded的问题解决笔者使用的NavicatPremium12启动界面截屏:请注意是64位的。笔者win764位系统。连接Oracle时提示“oraclelibraryisnotloaded”。解决方法:1.前往“http://www.oracle.com/technetwork/database/database-te…

    2022年5月28日
    155
  • cacls查看文件权限

    cacls查看文件权限PSC cacls 099260b8 7e81 4d4c 8970 cbf txtC 099260b8 7e81 4d4c 8970 cbf txtBUILTIN Administrato ID FNTAUTHORITY SYSTEM ID F

    2026年3月16日
    1
  • navicat永久激活【2021最新】

    (navicat永久激活)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~00OE5RWT28-eyJsaWNlb…

    2022年3月30日
    77
  • nginx配置跨域访问,无法生效_页面跨域访问

    nginx配置跨域访问,无法生效_页面跨域访问由于浏览器同源策略的存在使得一个源中加载来自其它源中资源的行为受到了限制。即会出现跨域请求禁止。通俗一点说就是如果存在协议、域名、端口或者子域名不同服务端,或一者为IP地址,一者为域名地址(在跨域问题上,域仅仅是通过&quot;url的首部&quot;来识别而不会去尝试判断相同的IP地址对应着两个域或者两个域是否同属同一个IP),之中任意服务端旗下的客户端发起请求其它服务端资源的访问行动都是跨域的,而浏览器为了安全…

    2022年10月1日
    5
  • 数据增强之cutout变体,添加噪声和mixcut

    数据增强之cutout变体,添加噪声和mixcut数据增强之cutout变体,添加噪声生成框defrand_bbox(size,lam):W=size[2]H=size[3]#ratio=np.sqrt(1.-lam)cut_w=np.int(W*lam)cut_h=np.int(H*lam)#uniformcx=np.rand…

    2026年3月9日
    9
  • 【调优方法】——warmup

    【调优方法】——warmup学习率是模型训练中最重要的超参之一,针对学习率的优化有很多种方法,而warmup是其中重要的一种。1.什么是warmupwarmup是一种学习率优化方法(最早出现在ResNet论文中)。在模型训练之初选用较小的学习率,训练一段时间之后(如:10epoches或10000steps)使用预设的学习率进行训练;2.为什么使用warmup2.1理性分析因为模型的weights是随机初始…

    2025年8月18日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号