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

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

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

引言

元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状态。变化规则适用于每一个元胞并且同时进行。典型的变化规则,决定于元胞的状态,以及其(4或8 )邻居的状态。元胞自动机已被应用于物理模拟,生物模拟等领域。本文就一些有趣的规则,考虑如何编写有效的MATLAB的程序来实现这些元胞自动机。

MATLAB的编程考虑

元胞自动机需要考虑到下列因素,下面分别说明如何用MATLAB实现这些部分。并以Conway的生命游戏机的程序为例,说明怎样实现一个元胞自动机。

●矩阵和图像可以相互转化,所以矩阵的显示是可以真接实现的。如果矩阵

cells的所有元素只包含两种状态且矩阵Z含有零,那么用image函数来显示cat命令建的RGB图像,并且能够返回句柄。

imh = image(cat(3,cells,z,z));

set(imh, 'erasemode', 'none')

axis equal

axis tight

●矩阵和图像可以相互转化,所以初始条件可以是矩阵,也可以是图形。以下

代码生成一个零矩阵,初始化元胞状态为零,然后使得中心十字形的元胞状态= 1。

z = zeros(n,n);

cells = z;

cells(n/2,.25*n:.75*n) = 1;

cells(.25*n:.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);

●加入一个简单的图形用户界面是很容易的。在下面这个例子中,应用了三个

按钮和一个文本框。三个按钮,作用分别是运行,停止,程序退出按钮。文框是用来显示的仿真运算的次数。

%build the GUI

%define the plot button

plotbutton=uicontrol('style','pushbutton',...

'string','Run', ...

'fontsize',12, ...

'position',[100,400,50,20], ...

'callback', 'run=1;');

%define the stop button

erasebutton=uicontrol('style','pushbutton',...

'string','Stop', ...

'fontsize',12, ...

'position',[200,400,50,20], ...

'callback','freeze=1;');

%define the Quit button

quitbutton=uicontrol('style','pushbutton',...

'string','Quit', ...

'fontsize',12, ...

'position',[300,400,50,20], ...

'callback','stop=1;close;');

number = uicontrol('style','text', ...

'string','1', ...

'fontsize',12, ...

'position',[20,400,50,20]);

经过对控件(和CA)初始化,程序进入一个循环,该循环测试由回调函数的每个按钮控制的变量。刚开始运行时,只在嵌套的while循环和if语句中运行。直到退出按钮按下时,循环停止。另外两个按钮按下时执行相应的if语句。

stop= 0; %wait for a quit button push

run = 0; %wait for a draw

freeze = 0; %wait for a freeze

while (stop==0)

if (run==1)

%nearest neighbor sum

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(3:n,y-1) + cells(x+1,y+1);

% The CA rule

cells = (sum==3) | (sum==2 & cells);

%draw the new image

set(imh, 'cdata', cat(3,cells,z,z) )

%update the step number diaplay

stepnumber = 1 + str2num(get(number,'string'));

set(number,'string',num2str(stepnumber))

end

if (freeze==1)

run = 0;

freeze = 0;

end

drawnow %need this in the loop for controls to work

end

例子

1 .Conway的生命游戏机。

规则是:

对周围的8个近邻的元胞状态求和

如果总和为2的话,则下一时刻的状态不改变

如果总和为3 ,则下一时刻的状态为1

否则状态= 0

核心代码:

x = 2:n-1;

y = 2:n-1;

%nearest neighbor sum

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(3:n,y-1) + cells(x+1,y+1);

% The CA rule

cells = (sum==3) | (sum==2 & cells);

2 .表面张力

规则是:

对周围的8近邻的元胞以及自身的状态求和

如果总和< 4或= 5 ,下一时刻的状态= 0

否则状态= 1

核心代码:

x = 2:n-1;

y = 2:n-1;

%nearest neighbor sum

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(3:n,y-1) + cells(x+1,y+1)+...

cells(x,y);

% The CA rule

cells = ~((sum< 4) | (sum==5));

3 .渗流集群

规则:

对周围相邻的8邻居求和(元胞只有两种状态,0或1 )。元胞也有一个单独的状态参量(所谓'记录' )记录它们之前是否有非零状态的邻居。

在0与1之间产生一个随机数r 。

如果总和> 0 (至少一个邻居)并且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) + cells(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 = rand(a,b);

cells = cells | ((sum>=1) & (pick>=threshold) & (visit==0)) ; visit = (sum>=1) ;

变量a 和b 是图像的尺寸。最初的图形是由图形操作决定的。以下程序设定坐标系为一个固定的尺寸,在坐标系里写入文本,然后获得并返回坐标内的内容,并用getframe 函数把它们写入一个矩阵

ax = axes('units','pixels','position',[1 1 500 400],'color','k'); text('units', 'pixels', 'position', [130,255,0],...

'string','MCM','color','w','fontname','helvetica','fontsize',100) text('units', 'pixels', 'position', [10,120,0],...

'string','Cellular Automata','color','w','fontname','helvetica','fontsize',50) initial = getframe(gca);

[a,b,c]=size(initial.cdata); z=zeros(a,b);

cells = double(initial.cdata(:,:,1)==255); visit = z ; sum = z;

经过几十个时间间隔(从MCM Cellular Automata 这个图像开始) ,我们可以得到以下的图像。

50

100

150

200

250

300

350

400

450

500

550

50100

150

200

250

300

350

400

4 .激发介质( BZ reaction or heart )

规则:

元胞有10个不同的状态。状态0是体眠。1-5为活跃状态,、6-9为是极活跃

状态。

计算每一个处于活跃的状态的元胞近邻的8个元胞。

如果和大于或等于3 (至少有三个活跃的邻居) ,则下一时刻该元胞= 1 。 不需要其它输入,1至9种状态依次出现。如果该时刻状态= 1那么下一时刻

状态= 2 。如果该时刻状态= 2 ,然后下一时刻状态= 3 ,对于其它的状态依次类推,直到第9种状态。如果状态= 9 ,然后下一状态= 0并且元胞回到休息状态。 核心代码:

x = [2:n-1]; y = [2:n-1];

sum(x,y) = ((cells(x,y-1)> 0)&(cells(x,y-1)< t)) + ((cells(x,y+1)> 0)&(cells(x,y+1)< t)) + ...

((cells(x-1, y)> 0)&(cells(x-1, y)< t)) + ((cells(x+1,y)> 0)&(cells(x+1,y)< t)) + ...

((cells(x-1,y-1)> 0)&(cells(x-1,y-1)< t)) + ((cells(x-1,y+1)> 0)&(cells(x-1,y+1)< t)) + ...

((cells(x+1,y-1)> 0)&(cells(x+1,y-1)< t)) + ((cells(x+1,y+1)> 0)&(cells(x+1,y+1)< t));

cells = ((cells==0) & (sum>=t1)) + ...

2*(cells==1) + ...

3*(cells==2) + ...

4*(cells==3) + ...

5*(cells==4) + ...

6*(cells==5) +...

7*(cells==6) +...

8*(cells==7) +...

9*(cells==8) +...

0*(cells==9);

一个CA初始图形经过螺旋的变化,得到下图。

5 .森林火灾

规则:

元胞有3个不同的状态。状态为0是空位,状态= 1是燃烧着的树木,状态= 2是树木。

如果4个邻居中有一个或一个以上的是燃烧着的并且自身是树木(状态为

2 ),那么该元胞下一时刻的状态是燃烧(状态为1 )。

森林元胞(状态为2 )以一个低概率(例如0.000005 )开始烧(因为闪电)。 一个燃烧着的元胞(状态为1 )在下一时时刻变成空位的(状态为0 )。 空元胞以一个低概率(例如0.01 )变为森林以模拟生长。

出于矩阵边界连接的考虑,如果左边界开始着火,火势将向右蔓延,右边界同理。同样适用于顶部和底部。

核心代码:

sum = (veg(1:n,[n 1:n-1])==1) + (veg(1:n,[2:n 1])==1) + ...

(veg([n 1:n-1], 1:n)==1) + (veg([2:n 1],1:n)==1) ;

veg = ...

2*(veg==2) - ((veg==2) & (sum> 0 | (rand(n,n)< Plightning))) + ...

2*((veg==0) & rand(n,n)< Pgrowth) ;

注意环形连接是由序标实现的。

6 .气体动力学

这个CA (以及接下来的两个CA)是用来模拟粒子运动的。此元胞自动机需要

一种不同类型的元胞的邻居。此元胞的邻居时刻变化,因此某一个方向运动趋势,将继续在同一个方向。换言之,此规则保存势头,这是基础的动力仿真。这种邻居通常被称为margolis邻居并且这种邻居通常由重叠的2x2块的元胞构成。在下面的表格中,偶数步长时左上方4元胞为邻居关系,奇数步长时右下的4元胞为邻居关系。某一特定元胞在每一个时间步长都有3个邻居,但是具体的元胞构成了邻居的旋转和反复。

规则:

此规则叫作HPP-气体规则。

每个元胞有2种状态。状态= 0是空的,状态= 1代表粒子。

在任何一个时间步长,假设粒子是刚刚进入2x2的网格块。它将通过其网格块的中心到达对角的网格中,所以在任何时间步长,每一个元胞与该元胞对角对元胞交换的内容。如下所示,左边显示出来的元胞结构经过一个时间步长变为右边的结构。以下是六种不同的情况,所有所有的元胞都遵循相同的转动规则。下文还将考虑两种特殊情况,即粒子-粒子碰撞和粒子-墙碰撞。

为了实现粒子碰撞过程(保证动量和能量守恒),对于两个处于对角线上的粒子,他们相互撞击后偏转90度。在一个时间步长里使其从一个对角转成另一个对角。你可以逆时针旋转这四个元胞来实现这个过程。则第三规则可以表示为:

粒子撞击墙壁时,简单地使其离开且状态不变。这就引起反射现象。

核心代码:

p=mod(i,2); %margolis neighborhood, where i is the time step

%upper left cell update

xind = [1+p:2:nx-2+p];

yind = [1+p:2:ny-2+p];

%See if exactly one diagonal is ones

%only (at most) one of the following can be true!

diag1(xind,yind) = (sand(xind,yind)==1) & (sand(xind+1,yind+1)==1) & ...

(sand(xind+1,yind)==0) & (sand(xind,yind+1)==0);

diag2(xind,yind) = (sand(xind+1,yind)==1) & (sand(xind,yind+1)==1) & ...

(sand(xind,yind)==0) & (sand(xind+1,yind+1)==0);

%The diagonals both not occupied by two particles

and12(xind,yind) = (diag1(xind,yind)==0) & (diag2(xind,yind)==0);

%One diagonal is occupied by two particles

or12(xind,yind) = diag1(xind,yind) | diag2(xind,yind);

%for every gas particle see if it near the boundary

sums(xind,yind) = gnd(xind,yind) | gnd(xind+1,yind) | ...

gnd(xind,yind+1) | gnd(xind+1,yind+1) ;

% cell layout:

% x,y x+1,y

% x,y+1 x+1,y+1

%If (no walls) and (diagonals are both not occupied)

%then there is no collision, so move opposite cell to current cell

%If (no walls) and (only one diagonal is occupied)

%then there is a collision so move ccw cell to the current cell

%If (a wall)

%then don't change the cell (causes a reflection)

sandNew(xind,yind) = ...

(and12(xind,yind) & ~sums(xind,yind) & sand(xind+1,yind+1)) + ...

(or12(xind,yind) & ~sums(xind,yind) & sand(xind,yind+1)) + ...

(sums(xind,yind) & sand(xind,yind));

sandNew(xind+1,yind) = ...

(and12(xind,yind) & ~sums(xind,yind) & sand(xind,yind+1)) + ...

(or12(xind,yind) & ~sums(xind,yind) & sand(xind,yind))+ ...

(sums(xind,yind) & sand(xind+1,yind));

sandNew(xind,yind+1) = ...

(and12(xind,yind) & ~sums(xind,yind) & sand(xind+1,yind)) + ...

(or12(xind,yind) & ~sums(xind,yind) & sand(xind+1,yind+1))+ ...

(sums(xind,yind) & sand(xind,yind+1));

sandNew(xind+1,yind+1) = ...

(and12(xind,yind) & ~sums(xind,yind) & sand(xind,yind)) + ...

(or12(xind,yind) & ~sums(xind,yind) & sand(xind+1,yind))+ ...

(sums(xind,yind) & sand(xind+1,yind+1));

sand = sandNew;

8.扩散限制聚集

这个系统是模拟粘性颗粒的聚集,形成分形结构。质点以一个类似于例6中的HPP-气体规则发生运动。不同的是粒子在一些高密度(但看不见)的液体周围被假定是弹跳的。效果是每一个粒子在每个时间步长在随机的方向上运动。换言之,每一个时间步长是一个碰撞的过程。这个仿真矩阵的中心确定了在一个固定生长颗粒。任何弥散粒子触及它就会被它粘住,并成为一个不能移动的,有粘性颗粒。

规则:

使用Margolus型邻居。在每一个时间步,等概率地顺时针或逆时针旋转4个元胞。旋转使速度随机化。

在移动后,如果八个最近的邻居有一个或一个以上元胞是固定的粘性颗粒,则下时刻该元胞将被冻结,并且使之有粘性。

核心代码:

p=mod(i,2); %margolis neighborhood

%upper left cell update

xind = [1+p:2:nx-2+p];

yind = [1+p:2:ny-2+p];

%random velocity choice

vary = rand(nx,ny)< .5 ;

vary1 = 1-vary;

%diffusion rule -- margolus neighborhood

%rotate the 4 cells to randomize velocity

sandNew(xind,yind) = ...

vary(xind,yind).*sand(xind+1,yind) + ... %cw

vary1(xind,yind).*sand(xind,yind+1) ; %ccw

sandNew(xind+1,yind) = ...

vary(xind,yind).*sand(xind+1,yind+1) + ...

vary1(xind,yind).*sand(xind,yind) ;

sandNew(xind,yind+1) = ...

vary(xind,yind).*sand(xind,yind) + ...

vary1(xind,yind).*sand(xind+1,yind+1) ;

sandNew(xind+1,yind+1) = ...

vary(xind,yind).*sand(xind,yind+1) + ...

vary1(xind,yind).*sand(xind+1,yind) ;

sand = sandNew;

%for every sand grain see if it near the fixed, sticky cluster

sum(2:nx-1,2:ny-1) = gnd(2:nx-1,1:ny-2) + gnd(2:nx-1,3:ny) + ...

gnd(1:nx-2, 2:ny-1) + gnd(3:nx,2:ny-1) + ...

gnd(1:nx-2,1:ny-2) + gnd(1:nx-2,3:ny) + ...

gnd(3:nx,1:ny-2) + gnd(3:nx,3:ny);

%add to the cluster

gnd = ((sum> 0) & (sand==1)) | gnd ;

%and eliminate the moving particle

sand(find(gnd==1)) = 0;

以下经过很多时间步长后固定集聚后的图像显示。

9 .砂堆规则

一堆沙子的横截面,可以使用Margolus型邻居仿真,但运动规则不同。

规则:

元胞有2个状态。状态= 0是空的,状态= 1代表沙子。

在任何时间步长,一个粒子,可以在2x2块中向着底部运动。可能运动如下所示。墙壁和底部将阻止粒子继续运动。

为了让该运动略有随机性,我亦补充说一项规则,有时处于下落状态的两个元胞还旋转,直到所有的动作都完成。

核心代码:

p=mod(i,2); %margolis neighborhood

sand(nx/2,ny/2) = 1; %add a grain at the top

%upper left cell update

xind = [1+p:2:nx-2+p];

yind = [1+p:2:ny-2+p];

%randomize the flow -- 10% of the time

vary = rand(nx,ny)< .9 ;

vary1 = 1-vary;

sandNew(xind,yind) = ...

gnd(xind,yind).*sand(xind,yind) + ...

(1-gnd(xind,yind)).*sand(xind,yind).*sand(xind,yind+1) .* ...

(sand(xind+1,yind+1)+(1-sand(xind+1,yind+1)).*sand(xind+1,yind));

sandNew(xind+1,yind) = ...

gnd(xind+1,yind).*sand(xind+1,yind) + ...

(1-gnd(xind+1,yind)).*sand(xind+1,yind).*sand(xind+1,yind+1) .* ...

(sand(xind,yind+1)+(1-sand(xind,yind+1)).*sand(xind,yind));

sandNew(xind,yind+1) = ...

sand(xind,yind+1) + ...

(1-sand(xind,yind+1)) .* ...

( sand(xind,yind).*(1-gnd(xind,yind)) + ...

(1-sand(xind,yind)).*sand(xind+1,yind).*(1-gnd(xind+1,yind)).*sand(xind+1,yind+1));

sandNew(xind+1,yind+1) = ...

sand(xind+1,yind+1) + ...

(1-sand(xind+1,yind+1)) .* ...

( sand(xind+1,yind).*(1-gnd(xind+1,yind)) + ...

(1-sand(xind+1,yind)).*sand(xind,yind).*(1-gnd(xind,yind)).*sand(xind,yind+1));

%scramble the sites to make it look better

temp1 = sandNew(xind,yind+1).*vary(xind,yind+1) + ...

sandNew(xind+1,yind+1).*vary1(xind,yind+1);

temp2 = sandNew(xind+1,yind+1).*vary(xind,yind+1) + ...

sandNew(xind,yind+1).*vary1(xind,yind+1);

sandNew(xind,yind+1) = temp1;

sandNew(xind+1,yind+1) = temp2;

sand = sandNew;

参考文献

[1] Cellular Automata Modeling of Physical Systems

[2] Cellular Automata Machines by Tommaso Toffoli and Norman Margolus,

MIT Press, 1987.

[3] Cellular Automata Modeling of Physical Systems by Bastien Chopard and

Michel Droz, Cambridge University Press, 1998.

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

元胞自动机(CA)代码及应用 引言 元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状态。变化规则适用于每一个元胞并且同时进行。典型的变化规则,决定于元胞的状态,以及其(4或8 )邻居的状态。元胞自动机已被应用于物理模拟,生物模拟等领域。本文就一些有趣的规则,考虑如何编写有效的MATLAB的程序来实现这些元胞自动机。 MATLAB的编程考虑 元胞自动机需要考虑到下列因素,下面分别说明如何用MATLAB实现这些部分。并以Conway的生命游戏机的程序为例,说明怎样实现一个元胞自动机。 ●矩阵和图像可以相互转化,所以矩阵的显示是可以真接实现的。如果矩阵 cells的所有元素只包含两种状态且矩阵Z含有零,那么用image函数来显示cat命令建的RGB图像,并且能够返回句柄。 imh = image(cat(3,cells,z,z)); set(imh, 'erasemode', 'none') axis equal axis tight ●矩阵和图像可以相互转化,所以初始条件可以是矩阵,也可以是图形。以下 代码生成一个零矩阵,初始化元胞状态为零,然后使得中心十字形的元胞状态= 1。 z = zeros(n,n); cells = z; cells(n/2,.25*n:.75*n) = 1; cells(.25*n:.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); ●加入一个简单的图形用户界面是很容易的。在下面这个例子中,应用了三个 按钮和一个文本框。三个按钮,作用分别是运行,停止,程序退出按钮。文框是用来显示的仿真运算的次数。 %build the GUI %define the plot button plotbutton=uicontrol('style','pushbutton',...

元胞自动机简史

元胞自动机简史 元胞自动机的诞生是人类探索人的认识本质的结果,也是计算技术巨大进步推动的结果。自古以来,人类认识一般问题的根本方法就是,建模和计算(推演)。模型是人类智力能理解自然世界的唯一方式。而元胞自动机正是一种可以用来建模也非常容易进行计算的理论框架和模型工具。最早从计算的视角审视问题的是关心人的认识本质的哲学家。笛卡尔认为, 人的理解就是形成和操作恰当的表述方式。洛克认为, 我们对世界的认识都要经过观念这个中介, 思维事实上不过是人类大脑对这些观念进行组合或分解的过程。霍布斯更是明确提出, 推理的本质就是计算。莱布尼兹也认为, 一切思维都可以看作是符号的形式操作的过程。进入20 世纪, 弗雷格, 怀特海、罗素等人通过数理逻辑把人类的思维进一步形式化, 形成了所谓的命题逻辑及一阶和高阶逻辑。在他们看来, 逻辑和数学, 都是根据特定的纯句法规则运作的。在这里, 所有的意义都被清除出去而不予考虑。在弗雷格和罗素的基础上, 维特根斯坦在他的早期哲学中把哲学史上自笛卡尔以来的原子论的理性主义传统发展到了一个新的高度。在维特根斯坦看来, 世界是逻辑上独立的原子事实的总和, 而不是事物的总和; 原子事实是一些客体的结合, 这些事实和它们的逻辑关系都在心灵中得到表达: 我们在心灵中为自己建造了事实的形象。人工智能事实上就是试图在机器中实现这种理性主义理想的一门学科。 在计算理论发展过程中, 阿兰·图灵(A. Turing) 的思想可以说是最关键的。在1936 年发表的论文中, 图灵提出了著名的图灵机概念。图灵机的核心部分有三: 一条带子、一个读写头、一个控制装置。带子分成许多小格, 每小格存一位数; 读写头受制于控制装置, 以一小格为移动量相对于带子左右移动, 或读小格内的数, 或写符号于其上。可以把程序和数据都以数码的形式存储在带子上。这就是“通用图灵机”原理。图灵在不考虑硬件的前提下, 严格描述了计算机的逻辑构造。这个理论不仅解决了纯数学基础理论问题, 而且从理论上证明了研制通用数字计算机的可行性。 图灵认为, 人的大脑应当被看作是一台离散态机器。尽管大脑的物质组成与计算机的物质组成完全不同, 但它们的本质则是相同。。离散态机器的行为原则上能够被写在一张行为表上, 因此与思想有关的大脑的每个特征也可以被写在一张行为表上, 从而能被一台计算机所仿效。1950 年, 图灵发表了《计算机器和智能》的论文, 对智能问题从行为主义的角度给出了定义, 设计出著名的“图灵测验,论证了心灵的计算本质, 并反驳了反对机器能够思维的9 种可能的意见。 与图灵提出人的大脑是一台离散态的计算机的思想几乎同一时期, 计算机科学的另一个 开创者冯·诺伊曼(J . von Neumann) 则开始从计算的视角思考生命的本质问题。一个人工的机器能够繁殖它自己吗? 当年笛卡尔在声称动物是机器的时候, 就曾被这个问题所难住。但冯·诺伊曼要回答这个问题, 他要找到自动机产生后代的条件, 他要证明机器可以繁殖! 为此, 冯·诺伊曼作了一个思想实验。他想象一台机器漂浮在一个池塘的上面, 这个池塘里有许多机器的零部件。这台机器是一台通用的建造器: 只要给出任何一台机器的描述,这台机器就会在池塘中寻找合适的部件, 然后再制造出这台机器。如果能够给出它自身的描述, 它就可以创造出它本身。不过, 这还不是完全的自我繁殖, 因为后代机器还没有对自身的描述, 它们因此不能复制自己。所以, 冯·诺伊曼继续假定最初的机器还必须包含一个描述复制器, 一旦后代机器产生出来, 它也从亲代那里复制一份关于自身的描述, 这样, 后代机器就可以无穷无尽地繁殖下去。 冯·诺伊曼的试验揭示了一个深刻的问题:任何自我繁殖的系统的基因材料, 无论是自然的还是人工的, 都必须具有两个不同的基本功能: 一方面它必须起到计算机程序的作用, 是一种在繁殖下一代时能够运行的算法, 另一方面它必须起到被动数据的作用, 是一个能够复制和传给下一代的描述。1953 年沃森和克里克揭示的DNA 结构和自我复制的机理。DNA 的特性正好具备冯·诺伊曼所指出的两个要求。 然而, 冯·诺伊曼对他自己的动力学模型并不十分满意。他不能充分地获得最小的逻辑前提, 因为该模型仍然以具体的原材料的吸收为前提。冯·诺伊曼感到, 该模型没有很好地把过程的

交通流中的NaSch模型及MATLAB代码元胞自动机完整

元胞自动机NaSch模型及其MATLAB代码 作业要求 根据前面的介绍,对NaSch模型编程并进行数值模拟: ●模型参数取值:Lroad=1000,p=,Vmax=5。 ●边界条件:周期性边界。 ●数据统计:扔掉前50000个时间步,对后50000个时间步进行统计,需给出的 结果。 ●基本图(流量-密度关系):需整个密度范围内的。 ●时空图(横坐标为空间,纵坐标为时间,密度和文献中时空图保持一致, 画 500个时间步即可)。 ●指出NaSch模型的创新之处,找出NaSch模型的不足,并给出自己的改进思 路。 ●? 流量计算方法: 密度=车辆数/路长; 流量flux=density×V_ave。 在道路的某处设置虚拟探测计算统计时间T内通过的车辆数N; 流量flux=N/T。 ●? 在计算过程中可都使用无量纲的变量。 1、NaSch模型的介绍 作为对184号规则的推广,Nagel和Schreckberg在1992年提出了一个模拟车辆交通的元胞自动机模型,即NaSch模型(也有人称它为NaSch模型)。 ●时间、空间和车辆速度都被整数离散化。

● 道路被划分为等距离的离散的格子,即元胞。 ● 每个元胞或者是空的,或者被一辆车所占据。 ● 车辆的速度可以在(0~Vmax )之间取值。 2、NaSch 模型运行规则 在时刻t 到时刻t+1的过程中按照下面的规则进行更新: (1)加速:),1min(max v v v n n +→ 规则(1)反映了司机倾向于以尽可能大的速度行驶的特点。 (2)减速:),min(n n n d v v → 规则(2)确保车辆不会与前车发生碰撞。 (3)随机慢化: 以随机概率p 进行慢化,令:)0, 1-min(n n v v → 规则(3)引入随机慢化来体现驾驶员的行为差异,这样既可以反映随机加速行为,又可以反映减速过程中的过度反应行为。这一规则也是堵塞自发产生的至关重要因素。 (4)位置更新:n n n v x v +→ ,车辆按照更新后的速度向前运动。 其中n v ,n x 分别表示第n 辆车位置和速度;l (l ≥1)为车辆长度;11--=+n n n x x d 表示n 车和前车n+1之间空的元胞数;p 表示随机慢化概率;max v 为最大速度。 3、NaSch 模型实例 根据题目要求,模型参数取值:L=1000,p=,Vmax=5,用matlab 软件进行编程,扔掉前11000个时间步,统计了之后500个时间步数据,得到如下基本图和时空图。 程序简介 初始化:在路段上,随机分配200个车辆,且随机速度为1-5之间。 图是程序的运行图,图中,白色表示有车,黑色是元胞。

元胞自动机简史

元胞自动机简史元胞自动机的诞生是人类探索人的认识本质的结果,也是计算技术巨大进步推动的结果。自古以来,人类认识一般问题的根本方法就是,建模和计算(推演)。模型是人类智力能理解自然世界的唯一方式。而元胞自动机正是一种可以用来建模也非常容易进行计算的理论框架和模型工具。最早从计算的视角审视问题的是关心人的认识本质的哲学家。笛卡尔认为, 人的理解就是形成 和操作恰当的表述方式。洛克认为, 我们对世界的认识都要经过观念这个中介, 思维事实上不过是 人类大脑对这些观念进行组合或分解的过程。霍布斯更是明确提出, 推理的本质就是计算。莱布尼兹也认为, 一切思维都可以看作是符号的形式操作的过程。进入20 世纪, 弗雷格, 怀特海、罗素等人通过数理逻辑把人类的思维进一步形式化, 形成了所谓的命题逻辑及一阶和高阶逻辑。在他们看来, 逻辑和数学, 都是根据特定的纯句法规则运作的。在这里, 所有的意义都被清除出去而不 予考虑。在弗雷格和罗素的基础上, 维特根斯坦在他的早期哲学中把哲学史上自笛卡尔以来的原 子论的理性主义传统发展到了一个新的高度。在维特根斯坦看来, 世界是逻辑上独立的原子事实 的总和, 而不是事物的总和; 原子事实是一些客体的结合, 这些事实和它们的逻辑关系都在心灵中得到表达: 我们在心灵中为自己建造了事实的形象。人工智能事实上就是试图在机器中实现这种理性主义理想的一门学科。 在计算理论发展过程中,阿兰图灵(A. Turing)的思想可以说是最关键的。在1936年发表的论 文中, 图灵提出了著名的图灵机概念。图灵机的核心部分有三: 一条带子、一个读写头、一个控制装置。带子分成许多小格, 每小格存一位数; 读写头受制于控制装置, 以一小格为移动量相对于带子左右移动, 或读小格内的数, 或写符号于其上。可以把程序和数据都以数码的形式存储在带子上。这就是“通用图灵机”原理。图灵在不考虑硬件的前提下, 严格描述了计算机的逻辑构造。这个理论不仅解决了纯数学基础理论问题, 而且从理论上证明了研制通用数字计算机的可行性。 图灵认为, 人的大脑应当被看作是一台离散态机器。尽管大脑的物质组成与计算机的物质组成完全不同, 但它们的本质则是相同。。离散态机器的行为原则上能够被写在一张行为表上, 因此与思想有关的大脑的每个特征也可以被写在一张行为表上, 从而能被一台计算机所仿效。1950 年, 图灵发表了《计算机器和智能》的论文, 对智能问题从行为主义的角度给出了定义, 设计出著名的“图灵测验,论证了心灵的计算本质, 并反驳了反对机器能够思维的9 种可能的意见。 与图灵提出人的大脑是一台离散态的计算机的思想几乎同一时期, 计算机科学的另一个 开创者冯诺伊曼J . von Neumann)则开始从计算的视角思考生命的本质问题。一个人工的机器能 够繁殖它自己吗?当年笛卡尔在声称动物是机器的时候,就曾被这个问题所难住。但冯诺伊曼要回答这个问题, 他要找到自动机产生后代的条件, 他要证明机器可以繁殖! 为此,冯诺伊曼作了一个思想实验。他想象一台机器漂浮在一个池塘的上面,这个池塘里有许多机器的零部件。这台机器是一台通用的建造器: 只要给出任何一台机器的描述,这台机器就会在 池塘中寻找合适的部件, 然后再制造出这台机器。如果能够给出它自身的描述, 它就可以创造出它本身。不过, 这还不是完全的自我繁殖, 因为后代机器还没有对自身的描述, 它们因此不能复制自己。所以,冯诺伊曼继续假定最初的机器还必须包含一个描述复制器,一旦后代机器产生岀来,它也从亲代那里复制一份关于自身的描述, 这样, 后代机器就可以无穷无尽地繁殖下去。 冯诺伊曼的试验揭示了一个深刻的问题:任何自我繁殖的系统的基因材料,无论是自然的还是人工的, 都必须具有两个不同的基本功能: 一方面它必须起到计算机程序的作用, 是一种在繁殖下一代时能够运行的算法, 另一方面它必须起到被动数据的作用, 是一个能够复制和传给下一代的描述。1953 年沃森和克里克揭示的DNA 结构和自我复制的机理。DNA 的特性正好具备冯诺伊曼所指岀的两个要求。 然而, 冯诺伊曼对他自己的动力学模型并不十分满意。他不能充分地获得最小的逻辑前提, 因为该模型仍然以具体的原材料的吸收为前提。冯诺伊曼感到, 该模型没有很好地把过程的 逻辑形式和过程的物质结构区分开。作为一个数学家,冯诺伊曼需要的是完全形式化的抽象理

元胞自动机-森林火灾模型MATLAB代码

% 元胞自动机:森林火灾模型 % 规则: % (1)正在燃烧的树变成空格位; % (2)如果绿树格位的最近邻居中有一个树在燃烧,则它变成正在燃烧的树;% (3)在空格位,树以概率p生长; % (4)在最近的邻居中没有正在燃烧的树的情况下树在每一时步以概率f(闪%? 电)变为正在燃烧的树。 % 参考文献: % 祝玉学,赵学龙译,<<物理系统的元胞自动机模拟>>, p23 close all; clc; clear; figure; p=0.3;% 概率p f=6e-5;% 概率f axes; rand('state',0); set(gcf,'DoubleBuffer','on'); % S=round((rand(300)/2+0.5)*2); S=round(rand(300)*2); Sk=zeros(302);

Sk(2:301,2:301)=S;%%加边开始的森林初值% 红色表示正在燃烧(S中等于2的位置) % 绿色表示绿树(S中等于1的位置) % 黑色表示空格位(S中等于0的位置) C=zeros(302,302,3); R=zeros(300); G=zeros(300); R(S==2)=1; G(S==1)=1; C(2:301,2:301,1)=R; C(2:301,2:301,2)=G; Ci=imshow(C); ti=0; tp=title(['T = ',num2str(ti)]);%%时间记录while 1; ti=ti+1; St=Sk; %%St表示t时刻的森林情况 St(Sk==2)=0; % for rule (1) Su=zeros(302); Sf=Sk;%%Sf表示模拟着火的过程 Sf(Sf<1.5)=0;%%只留下着火点

元胞自动机的定义与构成及其特征

元胞自动机的定义与构成及其特征 https://www.360docs.net/doc/0f4420726.html, 2005-4-17 15:05:00 来源:生命经纬 尽管元胞自动机有着较为宽松,甚至近乎模糊的构成条件。但作为一个数理模型,元胞自动机有着严格的科学定义。同时,元胞自动机是一个地地道道的"混血儿"。是物理学家、数学家,计算机科学家和生物学家共同工作的结晶。因此。对元胞自动机的含义也存在不同的解释,物理学家将其视为离散的、无穷维的动力学系统;数学家将其视为描述连续现象的偏微分方程的对立体,是一个时空离散的数学模型;计算机科学家将其视为新兴的人工智能、人工生命的分支;而生物学家则将其视为生命现象的一种抽象。下面给出几种常见的定义: 1.元胞自动机的物理学定义 元胞自动机是定义在一个由具有离散、有限状态的元胞组成的元胞空间上,并按照一定局部规则,在离散的时间维上演化的动力学系统。 具体讲,构成元胞自动机的部件被称为"元胞",每个元胞具有一个状态。这个状态只琵取某个有限状态集中的一个,例如或"生"或"死",或者是256中颜色中的一种,等等;这些元胞规则地排列在被你为"元胞空间"的空间格网上;它们各自的状态随着时间变化。而根据一个局部规则来进行更新,也就是说,一个元胞在某时刻的状态取决于、而且仅仅家决于上一时刻该元胞的状态以及该元胞的所有邻居元胞的状态;元胞空间内的元胞依照这样的局部规则进行同步的状态更新,整个元胞空间则表现为在离散的时间维上的变化。 2.元胞自动机的数学定义 美国数学家L.P.Hurd和K·Culik等人在90年代初,对元胞自动机分别从集合论和拓扑学等角度进行了严格地描述和定义 (谢惠民,1994; Culik,II K,1990;李才伟,1997) 1)基于集合论的定义 设d代表空间维数,k代表元胞的状态,并在一个有限集合S中取值,r表元胞的邻居半径。Z是整数集,表示一维空间,t代表时间。 为叙述和理解上简单起见,在一维空间上考虑元胞自动机,即假定d=1。那么整个元胞空间就是在一维空间,将整数集Z上的状态集S的分布,记为S Z。元胞自动机的动

元胞自动机参考文献

[1] Zhou W H, Lee J, Li G L, et al. Embedding Game of Life into a Simple Asynchronous Cellular Automaton[C]. Computing and Networking (CANDAR), 2014 Second International Symposium on IEEE, 2014: 503-506. [2]Tian J, Treiber M, Zhu C, et al. Cellular Automaton Model with Non-hypothetical Congested Steady State Reproducing the Three-Phase Traffic Flow Theory[M]. Cellular Automata. Springer International Publishing, 2014: 610-619. [3]Delivorias S, Hatzikirou H, Penaloza R, et al. Detecting Emergent Phenomena in Cellular Automata Using Temporal Description Logics[M]. Cellular Automata. Springer International Publishing, 2014: 357-366. [4] D'Ariano G M, Mosco N, Perinotti P, et al. Path-integral solution of the one-dimensional Dirac quantum cellular automaton[J]. Physics Letters A, 2014, 378(43): 3165-3168. [5] Bisio A, D’Ariano G M, Tosini A. Quantum field as a quantum cellular automaton: The Dirac free evolution in one dimension[J]. Annals of Physics, 2015, 354: 244-264. [6] Masuda T, Nishinari K, Schadschneider A. Cellular Automaton Approach to Arching in Two-Dimensional Granular Media[M]. Cellular Automata. Springer International Publishing, 2014: 310-319. [7] Takada K, Namiki T. on Limit Set of Two-Dimensional Two-State Linear Cellular Automaton Rules[C]. Computing and Networking (CANDAR), 2014 Second International Symposium on. IEEE, 2014: 470-475. [8] Al-Mamun M A, Srisukkham W, Fall C, et al. A cellular automaton model for hypoxia effects on tumour growth dynamics[C].Software, Knowledge, Information Management and Applications (SKIMA), 2014 8th International Conference on. IEEE, 2014: 1-8. [9] Hu M L, Sun J. Sudden change of geometric quantum discord in finite temperature reservoirs[J]. Annals of Physics, 2015, 354: 265-273. [10] Bure? M, Siegl P. Hydrogen atom in space with a compactified extra dimension and potential defined by Gauss’ law [J]. Annals of Physics, 2015, 354: 316-327. [11] Terrier V. Recognition of linear-slender context-free languages by real time one-way cellular automata[C]. AUTOMATA 2015. 2015, 9099: 251-262. [12] Fuentes M L, Klimchuk J A. Two-dimensional cellular automaton model for the evolution of active region coronal plasmas[J]. The Astrophysical Journal, 2015, 799(2): 128. [13] Tucker G E, Hobley D E J, Hutton E, et al. CellLab-CTS 2015: a Python library for continuous-time stochastic cellular automaton modeling using Landlab[J]. Geoscientific Model Development Discussions, 2015, 8: 9507-9552.

数学建模常用算法模型

按模型的数学方法分: 几何模型、图论模型、微分方程模型、概率模型、最优控制模型、规划论模型、马氏链模型等 按模型的特征分: 静态模型和动态模型,确定性模型和随机模型,离散模型和连续性模型,线性模型和非线性模型等 按模型的应用领域分: 人口模型、交通模型、经济模型、生态模型、资源模型、环境模型等。 按建模的目的分: 预测模型、优化模型、决策模型、控制模型等 一般研究数学建模论文的时候,是按照建模的目的去分类的,并且是算法往往也和建模的目的对应 按对模型结构的了解程度分: 有白箱模型、灰箱模型、黑箱模型等 比赛尽量避免使用,黑箱模型、灰箱模型,以及一些主观性模型。 按比赛命题方向分: 国赛一般是离散模型和连续模型各一个,2016美赛六个题目(离散、连续、运筹学/复杂网络、大数据、环境科学、政策) 数学建模十大算法 1、蒙特卡罗算法 (该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,比较好用的算法) 2、数据拟合、参数估计、插值等数据处理算法 (比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用Matlab作为工具)

3、线性规划、整数规划、多元规划、二次规划等规划类问题 (建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo软件实现) 4、图论算法 (这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备) 5、动态规划、回溯搜索、分治算法、分支定界等计算机算法 (这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中) 6、最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法 (这些问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用) 7、网格算法和穷举法 (当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具) 8、一些连续离散化方法 (很多问题都是从实际来的,数据可以是连续的,而计算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的) 9、数值分析算法 (如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用)10、图象处理算法 (赛题中有一类问题与图形有关,即使与图形无关,论文中也应该要不乏图片的这些图形如何展示,以及如何处理就是需要解决的问题,通常使用Matlab进行处理) 算法简介 1、灰色预测模型(必掌握)

元胞自动机方法及其在材料介观模拟中的应用

https://www.360docs.net/doc/0f4420726.html, 1 元胞自动机方法及其在材料介观模拟中的应用 何燕,张立文,牛静 大连理工大学材料系(116023)  E-mail : commat @https://www.360docs.net/doc/0f4420726.html,   摘 要:元胞自动机(CA)是复杂体系的一种理想化模型,适合于处理难以用数学公式定量描 述的复杂动态物理体系问题,如材料的组织演变等。本文概述了元胞自动机方法的基本思想 及原理,介绍了CA的基本组成及特征,综述了CA方法在材料介观模拟研究中的应用。研究表 明CA法在对金属凝固结晶、再结晶、及相变现象等材料介观尺度的组织模拟中表现出特有的 优越性。  关键词:元胞自动机,组织演变,介观模拟,动态再结晶 1. 引 言  自20世纪计算机问世以来,用计算机建立模型来模拟材料行为的方法在材料设计中的 应用越来越广泛,此方法既可节省大量的人力物力和实验资金,又能为实验提供巨大的灵活 性和方便性,因而已经引起了各界科学家的高度重视和极大兴趣。计算机对材料行为的模拟 主要有三个方面:材料微观行为、介观行为和宏观行为的模拟。材料的微观行为是指在电子、原子尺度上的材料行为,如模拟离子实(原子)体系行为,在这方面主要应用分子动力学、分子力学等理论方法;材料的介观行为是指材料显微组织结构的转变,包括金属凝固结晶、再结晶及相变过程,在这方面的模拟主要应用Monte Carlo(MC)方法和Cellular Automata(CA)方法;材料的宏观行为主要指材料加工方面,如材料加工中的塑性变形,应力 应变场及温度场的变化等,在这方面的模拟工作主要应用大型有限元软件Marc, Ansys等。大量实验研究表明,材料的微观组织结构决定了其宏观行为及特征。因此,对材料介观行为 的模拟显得尤为重要。传统的数学建模方法是建立描述体系行为的偏微分方程,它依赖于对 体系的成熟定量理论,而对大多数体系来说这种理论是缺乏的;从微观入手的Monte Carlo 方法主要依赖于体系内部自由能的计算,由于其运算量大,需要大量的数据,运算速度慢,为模拟工作带来了诸多不便;而CA方法则另辟蹊径,通过直接考察体系的局部相互作用, 再借助计算机模拟这种作用导致的总体行为,从而得到其组态变化,并体现出宏观上的金属 性能。由于CA的结构简单,便于计算,允许考虑数量极大的元胞,并且在空间和时间的尺 度上都不受限制,出于以上特点,元胞自动机方法已经受到越来越多研究工作者的青睐。本 文概述了元胞自动机方法的基本思想及原理,介绍了CA的基本组成及特征,对CA法在模拟 介观组织行为方面的应用进行了综述。

基于元胞自动机原理的微观交通仿真模型

2005年5月重庆大学学报(自然科学版)May2005第28卷第5期Journal of Chongqing University(Natural Science Editi on)Vol.28 No.5 文章编号:1000-582X(2005)05-0086-04 基于元胞自动机原理的微观交通仿真模型3 孙 跃,余 嘉,胡友强,莫智锋 (重庆大学自动化学院,重庆 400030) 摘 要:描述了一种对高速路上的交通流仿真和预测的模型。该模型应用了元胞自动机原理对复杂的交通行为进行建模。这种基于元胞自动机的方法是将模拟的道路量离散为均匀的格子,时间也采用离散量,并采用有限的数字集。同时,在每个时间步长,每个格子通过车辆跟新算法来变换状态,车辆根据自定义的规则确定移动格子的数量。该方法使得在计算机上进行仿真运算更为可行。同时建立了跟车模型、车道变换的超车模型,并根据流程对新建的VP算法绘出时空图。提出了一个设想:将具备自学习的神经网络和仿真系统相结合,再根据安装在高速路上的传感器所获得的统计数据,系统能对几分钟以后的交通状态进行预测。 关键词:元胞自动机;交通仿真;数学模型 中图分类号:TP15;TP391.9文献标识码:A 1 元胞自动机 生物体的发育过程本质上是单细胞的自我复制过程,50年代初,计算机创始人著名数学家冯?诺依曼(Von Neu mann)曾希望通过特定的程序在计算机上实现类似于生物体发育中细胞的自我复制[1],为了避免当时电子管计算机技术的限制,提出了一个简单的模式。把一个长方形平面分成若干个网格,每一个格点表示一个细胞或系统的基元,它们的状态赋值为0或1,在网格中用空格或实格表示,在事先设定的规则下,细胞或基元的演化就用网格中的空格与实格的变动来描述。这样的模型就是元胞自动机(cellular aut omata)。 80年代,元胞自动机以其简单的模型方便地复制出复杂的现象或动态演化过程中的吸引子、自组织和混沌现象而引起了物理学家、计算机科学家对元胞自动机模型的极大兴趣[1]。一般来说,复杂系统由许多基本单元组成,当这些子系统或基元相互作用时,主要是邻近基元之间的相互作用,一个基元的状态演化受周围少数几个基元状态的影响。在相应的空间尺度上,基元间的相互作用往往是比较简单的确定性过程。用元胞自动机来模拟一个复杂系统时,时间被分成一系列离散的瞬间,空间被分成一种规则的格子,每个格子在简单情况下可取0或1状态,复杂一些的情况可以取多值。在每一个时间间隔,网格中的格点按照一定的规则同步地更新它的状态,这个规则由所模拟的实际系统的真实物理机制来确定。格点状态的更新由其自身和四周邻近格点在前一时刻的状态共同决定。不同的格子形状、不同的状态集和不同的操作规则将构成不同的元胞自动机。由于格子之间在空间关系不同,元胞自动机模型分为一维、二维、多维模型。在一维模型中,是把直线分成相等的许多等分,分别代表元胞或基元;二维模型是把平面分成许多正方形或六边形网格;三维是把空间划分出许多立体网格。一维模型是最简单的,也是最适合描述交通流在公路上的状态。 2 基于元胞自动机的交通仿真模型的优点目前,交通模型主要分为3类: 1)流体模型(Hydr odyna m ic Model),在宏观上,以流体的方式来描述交通状态; 2)跟车模型(Car-f oll owing Model),在微观上,描述单一车辆运动行为而建立的运动模型; 3)元胞自动机模型(Cellular Aut omat on),在微观 3收稿日期:2005-01-04 基金项目:重庆市自然科学基金项目(6972) 作者简介:孙跃(1960-),浙江温州人,重庆大学教授,博士,研究方向:微观交通仿真、电力电子技术、运动控制技术及系统。

基于元胞自动机的土地资源节约利用模拟

第24卷 第5期 自 然 资 源 学 报V ol 24N o 5 2009年5月J OURNAL OF NATURAL RESOURCES M ay ,2009 收稿日期:2008-08-22;修订日期:2008-12-02。 基金项目:国家自然科学基金重点资助项目(40830532);国家自然科学基金资助项目(40801236);国家杰出青年基金资助项目(40525002);国家高技术研究发展计划资助项目(2006AA12Z206)。 作者简介:杨青生(1974-),男,青海乐都人,讲师,博士,主要研究遥感与地理信息模型及应用。E m ai :l qs y ang2002@https://www.360docs.net/doc/0f4420726.html, 基于元胞自动机的土地资源节约利用模拟 杨青生1,2 (1 广东商学院资源环境学院,广州510230;2 中山大学地理科学与规划学院,广州510275) 摘要:为模拟节约土地资源的城市可持续发展形态,以珠江三角洲城市快速发展的东莞市为 例,运用元胞自动机(C A )、地理信息系统(G IS)和遥感(RS)从历史数据中建立城市空间扩展的 C A,将土地资源节约利用程度与城市用地空间聚集程度相结合,在评价城市用地空间聚集程度 的基础上,通过不断增加离市中心距离权重和离公路距离权重,调整CA 的参数,模拟节约土地 资源,城市用地在空间上紧凑布局的城市形态,并以调整参数的模型(离市中心距离权重为 -0 006,离公路权重为-0 024)模拟结果为基础,分析了实现城市用地空间上紧凑发展,土地 资源节约利用的政策:到2010年,东莞市离市中心27k m 范围内的适宜地区可规定为鼓励城市 发展区,27~34k m 范围内的适宜地区可规定为限制性城市发展区,其它地区为非城市发展区。 关 键 词:土地资源;节约利用;紧凑;元胞自动机 中图分类号:F301 24;P208 文献标识码:A 文章编号:1000-3037(2009)05-0753-10 1 引言 元胞自动机(C ellular Auto m ata ,简称CA )具有强大的空间运算能力,可以有效地模拟复杂的动态系统。近年来,CA 已被越来越多地运用在城市模拟中,取得了许多有意义的研究成果[1~3]。CA 可以模拟虚拟城市,验证城市发展的相关理论,也可以模拟真实城市的发展, 如W u 等模拟了广州市的城市扩展 [4];黎夏和叶嘉安模拟了东莞市的城市扩张[5]。同时,用CA 可以模拟未来的城市规划景观,如黎夏等模拟了珠江三角洲地区城市不同发展条件下的规划景观[6,7]。这些研究表明,C A 能模拟出与实际城市非常接近的特征,可以由此预测未来城市的发展及土地利用变化,为城市和土地利用规划提供决策依据。 CA 的特点是通过一些简单的局部转换规则,模拟出全局的、复杂的空间模式。为了模拟城市,除了运用CA 的局部转换规则外,还要在转换规则中引入影响城市扩展的区域变量和全局变量。转换规则中的这些变量对应着很多参数,这些参数值反映了不同变量对模型的 贡献 程度。研究表明,这些参数值对模拟的结果影响很大。目前,C A 主要通过多准则判断(MCE ) [8]、层次分析法(AH P)[9]和主成分分析[10]、自适应模型[11]、人工神经网络模型 [5]、决策树[12]等方法确定模型的参数值。笔者也采用粗集[13]、支持向量机[14]、贝叶斯分类[15]、空间动态转换规则[16]等方法研究了非线性、动态转换规则模拟城市发展。目前,采用CA 模拟虚拟城市系统和真实城市系统已经非常成熟,模型的精度也越来越高,而模拟可

元胞自动机NaSch模型及其MATLAB代码

元胞自动机N a S c h模型 及其M A T L A B代码 This manuscript was revised by the office on December 22, 2012

元胞自动机N a S c h模型及其M A T L A B代码 作业要求 根据前面的介绍,对NaSch模型编程并进行数值模拟: 模型参数取值:Lroad=1000,p=0.3,Vmax=5。 边界条件:周期性边界。 数据统计:扔掉前50000个时间步,对后50000个时间步进行统计,需给出的结果。 基本图(流量-密度关系):需整个密度范围内的。 时空图(横坐标为空间,纵坐标为时间,密度和文献中时空图保持一致,画500个时间步即可)。 指出NaSch模型的创新之处,找出NaSch模型的不足,并给出自己的改进思路。 流量计算方法: 密度=车辆数/路长; 流量flux=density×V_ave。 在道路的某处设置虚拟探测计算统计时间T内通过的车辆数N; 流量flux=N/T。 在计算过程中可都使用无量纲的变量。 1、NaSch模型的介绍 作为对184号规则的推广,Nagel和Schreckberg在1992年提出了一个模拟车辆交通的元胞自动机模型,即NaSch模型(也有人称它为NaSch模型)。 时间、空间和车辆速度都被整数离散化。道路被划分为等距离的离散的格子,即元胞。 每个元胞或者是空的,或者被一辆车所占据。 车辆的速度可以在(0~Vmax)之间取值。 2、NaSch模型运行规则 在时刻t到时刻t+1的过程中按照下面的规则进行更新: (1)加速:vnmin(vn1,vmax) 规则(1)反映了司机倾向于以尽可能大的速度行驶的特点。 (2)减速:vnmin(vn,dn) 规则(2)确保车辆不会与前车发生碰撞。 (3)随机慢化:以随机概率p进行慢化,令:vnmin(vn-1,0) 规则(3)引入随机慢化来体现驾驶员的行为差异,这样既可以反映随机加速行为,又可以反映减速过程中的过度反应行为。这一规则也是堵塞自发产生的至关重要因素。 (4)位置更新:vnxnvn,车辆按照更新后的速度向前运动。其中vn,xn分别表示第n辆车位置和速度;l(l≥1)为车辆长度; p表示随机慢化概率;dnxn1xn1表示n车和前车n+1之间空的元胞数; vmax为最大速度。 3、NaSch模型实例

元胞自动机与Matlab

元胞自动机与MATLAB 引言 元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状态。变化规则适用于每一个元胞并且同时进行。典型的变化规则,决定于元胞的状态,以及其(4或8 )邻居的状态。元胞自动机已被应用于物理模拟,生物模拟等领域。本文就一些有趣的规则,考虑如何编写有效的MATLAB的程序来实现这些元胞自动机。 MATLAB的编程考虑 元胞自动机需要考虑到下列因素,下面分别说明如何用MATLAB实现这些部分。并以Conway的生命游戏机的程序为例,说明怎样实现一个元胞自动机。 ●矩阵和图像可以相互转化,所以矩阵的显示是可以真接实现的。如果矩阵 cells的所有元素只包含两种状态且矩阵Z含有零,那么用image函数来显示cat命令建的RGB图像,并且能够返回句柄。 imh = image(cat(3,cells,z,z)); set(imh, 'erasemode', 'none') axis equal axis tight ●矩阵和图像可以相互转化,所以初始条件可以是矩阵,也可以是图形。以下 代码生成一个零矩阵,初始化元胞状态为零,然后使得中心十字形的元胞状态= 1。 z = zeros(n,n); cells = z; cells(n/2,.25*n:.75*n) = 1; cells(.25*n:.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); ●加入一个简单的图形用户界面是很容易的。在下面这个例子中,应用了三个 按钮和一个文本框。三个按钮,作用分别是运行,停止,程序退出按钮。文框是用来显示的仿真运算的次数。

元胞自动机理论基础

元胞自动机理论基础 Chapter1 元胞自动机(Cellular Automata,简称CA,也有人译为细胞自动机、点格自动机、分子自动机或单元自动机)。是一时间和空间都离散的动力系统。散布在规则格网 (Lattice Grid)中的每一元胞(Cell)取有限的离散状态,遵循同样的作用规则,依据确定的局部规则作同步更新。大量元胞通过简单的相互作用而构成动态系统的演化。不同于一般的动力学模型,元胞自动机不是由严格定义的物理方程或函数确定,而是用一系列模型构造的规则构成。凡是满足这些规则的模型都可以算作是元胞自动机模型。因此,元胞自动机是一类模型的总称,或者说是一个方法框架。其特点是时间、空间、状态都离散,每个变量只取有限多个状态,且其状态改变的规则在时间和空间上都是局部的。 1. 自动机 自动机(Automaton)通常指不需要人们逐步进行操作指导的设备(夏培肃,1984)。例如,全自动洗衣机可按照预先安排好的操作步骤作自动地运行;现代计算机能自动地响应人工编制的各种编码指令。完成各种复杂的分析与计算;机器人则将自动控制系统和人工智能结合,实现类人的一系列活动。另一方面,自动机也可被看作为一种离散数字动态系统的数学模型。例如,英国数学家A.M.Turing于1936年提出的图灵机就是一个描述计算过程的数学模型(TuringA M.,1936)。它是由一个有限控制器、一条无限长存储带和一个读写头构成的抽象的机器,并可执行如下操作: ·读写头在存储带上向左移动一格; ·读写头在存储带上向右移动一格; ·在存储的某一格内写下或清除一符号; ·条件转移。 图灵机在理论上能模拟现代数字计算机的一切运算,可视为现代数字计算机的数学模型。实际上,一切"可计算"函数都等价于图灵机可计算函数,而图灵机可计算函数类又等价于一般递归函数类。 根据存储带是否有限,可将自动机划分为有限带自动机(Finite Automaton)和无限带自动机(Infinite Automaton)。由于图灵机有无限长的存储带,所以为一种无限带自动机。有限带自动机常用作数字电路的数学模型,也用来描述神经系统和算法;而无限带自动机主要用来描述算法,也用来描述繁殖过程 (如细胞型自动机和网络型自动机)。 有限自动机是一种控制状态有限、符号集有限的自动机,是一种离散输入输出系统的数学模型。可将有限自动机设想成由一条划分为许多方格的输入带和一个控制器组成的机器:在输入带的每一个小格中可以容 纳一个符号,这些符号取自一个有限符号集S-控制器具有有限个可能状态(构成集合Q)。并在每一时刻仅处于其中的一个状态q;控制器有一个读入头,可以从输入带中读入符号;时间是离散的,初始时控制器处在状态;控制器的功能是根据其当前状态g和读入头从输入带上得到的符号a,来确定控制器的下一时刻的状态实现从状态q到状态q',实现从状态q到状态铲q'的转移,并将读入头右移一格。控制器另一功能是识别终止状态(它们构成Q的一个子集F),也可将该识别功能视为有限自动机的输出。 从数学上来定义,有限自动机是一个五元组: FA=(Q,S,δ,q0,F) 其中,Q是控制器的有限状态集、S是输入符号约有限集、δ是控制状态转移规律的Q×S到Q的映射(可用状态转移图或状态转移表表示),q0是初始状态、F是终止状态集。若δ是单值映射,则称M为确定性有限自动机;若δ是多值映射,则称M为非确定性有限自动机。

相关文档
最新文档