元胞自动机(CA)代码及应用

上传人:M****1 文档编号:512038337 上传时间:2023-12-31 格式:DOC 页数:14 大小:227KB
返回 下载 相关 举报
元胞自动机(CA)代码及应用_第1页
第1页 / 共14页
元胞自动机(CA)代码及应用_第2页
第2页 / 共14页
元胞自动机(CA)代码及应用_第3页
第3页 / 共14页
元胞自动机(CA)代码及应用_第4页
第4页 / 共14页
元胞自动机(CA)代码及应用_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《元胞自动机(CA)代码及应用》由会员分享,可在线阅读,更多相关《元胞自动机(CA)代码及应用(14页珍藏版)》请在金锄头文库上搜索。

1、元胞自动机(CA)代码及应用引言元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元 胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状 态。变化规则适用于每一个元胞并且同时进行。 典型的变化规则,决定于元胞的 状态,以及其(4或8 )邻居的状态。元胞自动机已被应用于物理模拟,生物 模拟等领域。本文就一些有趣的规则,考虑如何编写有效的MATLAB的程序来实现这些元胞自动机。MATLAB的编程考虑 元胞自动机需要考虑到下列因素,下面分别说明如何用MATLAB实现这些部分。 并以Conway的生命游戏机的程序为例,说明怎样实现一个元胞自动机。矩阵和图像可以相互转化,

2、所以矩阵的显示是可以真接实现的。如果矩阵cells的所有元素只包含两种状态且矩阵 Z含有零,那么用image函数来显 示cat命令建的RGB图像,并且能够返回句柄。imh = image(cat(3,cells,z,z); set(imh, erasemode, non e) axis equalaxis tight矩阵和图像可以相互转化,所以初始条件可以是矩阵,也可以是图形。以下 代码生成一个零矩阵,初始化元胞状态为零,然后使得中心十字形的元胞状 态=1。z = zeros (n,n);cells = z;cells( n/2,.25* n:.75* n) = 1; cells(.25* n

3、:.75* n,n/2) = 1;Matlab的代码应尽量简洁以减小运算量。以下程序计算了最近邻居总和, 并按照CA规则进行了计算。本段Matlab代码非常灵活的表示了相邻邻居 x = 2:n-1;y = 2:n-1;sum(x,y) = cells(x,y-1) + cells(x,y+1) + . cells(x-1, y) + cells(x+1,y) + . cells(x-1,y-1) + cells(x-1,y+1) + . cells(x+1,y-1) + cells(x+1,y+1);cells = (sum=3) | (sum=2 & cells);加入一个简单的图形用户界面

4、是很容易的。在下面这个例子中,应用了三个 按钮和一个文本框。三个按钮,作用分别是运行,停止,程序退出按钮。文 框是用来显示的仿真运算的次数。%build the GUI%defi ne the plot butt onplotbutt on=uic on trol(style,pushbutt on,.stri ng,Ru n,.fon tsize,12, .positio n,100,400,50,20, .callback, run=1;);%defi ne the stop butt onerasebutt on=uic on trol(style,pushbutt on,.stri n

5、g,Stop, .fon tsize,12, .positio n,200,400,50,20, .callback,freeze=1;);%defi ne the Quit butt onquitbutt on=uic on trol(style,pushbutt on,.stri ng,Quit, .fon tsize,12, .positio n,300,400,50,20, .callback,stop=1;close;);nu mber = uic on trol(style,text, .stri ng,1, .fon tsize,12, .positio n,20,400,50,

6、20); 经过对控件(和CA)初始化,程序进入一个循环,该循环测试由回调函数的每 个按钮控制的变量。刚开始运行时,只在嵌套的 while循环和if语句中运行。 直到退出按钮按下时,循环停止。另外两个按钮按下时执行相应的 if语句。stop= 0; %wait for a quit butt on pushrun = 0; %wait for a drawfreeze = 0; %wait for a freezewhile (stop=0)if (run=1)%n earest n eighbor sumsum(x,y) = cells(x,y-1) + cells(x,y+1) + .cel

7、ls(x-1, y) + cells(x+1,y) + . cells(x-1,y-1) + cells(x-1,y+1) + . cells(3: n, y-1) + cells(x+1,y+1);% The CA rulecells = (sum=3) | (sum=2 & cells);%draw the new imageset(imh, cdata, cat(3,cells,z,z)%update the step nu mber diaplay step nu mber = 1 + str2 nu m(get (nu mber,stri ng); set (nu mber,stri

8、 ng, nu m2str(step nu mber)endif (freeze=1)run = 0;freeze = 0;enddraw now%n eed this in the loop for con trols to workend例子1 .Conway的生命游戏机。规则是:? 对周围的8个近邻的元胞状态求和? 如果总和为2的话,则下一时刻的状态不改变? 如果总和为3,则下一时刻的状态为1? 否则状态=0核心代码:x = 2:n-1;y = 2:n-1;%n earest n eighbor sumsum(x,y) = cells(x,y-1) + cells(x,y+1) + .

9、cells(x-1, y) + cells(x+1,y) + . cells(x-1,y-1) + cells(x-1,y+1) + . cells(3: n,y -1) + cells(x+1,y+1);% The CA rulecells = (sum=3) | (sum=2 & cells);2 .表面张力规则是:? 对周围的8近邻的元胞以及自身的状态求和? 如果总和4或=5,下一时刻的状态=0? 否则状态=1核心代码:x = 2:n-1;y = 2:n-1;%n earest n eighbor sumsum(x,y) = cells(x,y-1) + cells(x,y+1) + .

10、 cells(x-1, y) + cells(x+1,y) + . cells(x-1,y-1) + cells(x-1,y+1) + . cells(3: n, y-1) + cells(x+1,y+1)+. cells(x,y);% The CA rulecells = (sum0 (至少一个邻居)并且r阈值,或者元胞从未有过一个邻居,则元胞=1 。?如果总和 0则设置记录的标志,记录这些元胞有一个非零的邻居。核心代码:sum(2:a-1,2:b-1) = cells(2:a-1,1:b-2) + cells(2:a-1,3:b) + .cells(1:a-2, 2:b-1) + cell

11、s(3:a,2:b-1) + .cells(1:a-2,1:b-2) + cells(1:a-2,3:b) + . cells(3:a,1:b-2) + cells(3:a,3:b);pick = ran d(a,b);cells = cells | (sum=1) & (pick=threshold) & (visit=0)visit = (sum=1);变量a和b是图像的尺寸。最初的图形是由图形操作决定的。以下程序设定坐 标系为一个固定的尺寸,在坐标系里写入文本,然后获得并返回坐标内的内容, 并用getframe函数把它们写入一个矩阵ax = axes(u nits,pixels,posi

12、tio n,1 1 500 400,color,k);text(u nits, pixels, positi on, 130,255,0,.stri ng,MCM,color,w,fo ntn ame,helvetica,fo ntsize,100)text( un its, pixels, positi on, 10,120,0,.stri ng,Cellular Automata,color,w,fo ntn ame,helvetica,fo ntsize,50)in itial = getframe(gca);a,b,c=size(i nitial.cdata); z=zeros(a,b

13、);cells = double(i nitial.cdata(:,:,1)=255); visit = z ;sum = z;经过几十个时间间隔(从 MCM Cellular Automata这个图像开始),我们可以得到以下的图像。50100150200250300350400501001502002503003504004505005504 .激发介质(BZ reaction or heart )规则:? 元胞有10个不同的状态。状态0是体眠。1-5为活跃状态,、6-9为是极活 跃状态。? 计算每一个处于活跃的状态的元胞近邻的 8个元胞。? 如果和大于或等于3 (至少有三个活跃的邻居),则下一时刻该元胞=1 0)&(cells(x,y-1)0)&(cells(x,y+1) 0)&(cells(x-1,y)0)&(cells(x+1,y)0)&(cells(x-1,y+1)0)&(cells(x-1,y-1)0)&(cells(x+1,y-1)t)+(cells

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号