(1)元胞分布在规则划分的网格上;
(2)元胞具有0,1两种状态,0代表"死",l代表"生";
(3)元胞以相邻的8个元胞为邻居。即Moore邻居形式;
(4)一个元胞的生死由其在该时刻本身的生死状态和周围八个邻居的状态 (确切讲是状态的和)决定:
·在当前时刻,如果一个元胞状态为"生",且八个相邻元胞中有两个或三个的状态为"生",则在下--时刻该元胞继续保持为"生",否则"死"去;
·在当前时刻。如果一个元胞状态为"死"。且八个相邻元胞中正好有三个为"生"。则该元胞在下一时刻 "复活"。否则保持为"死"。
尽管它的规则看上去很简单。但生命游戏是具有产生动态图案和动态结构能力的元胞自动机模型。它能产生丰富的、有趣的图案。生命游戏的优化与初始元胞状态值的分布有关,给定任意的初始状态分布。经过若干步的运算,有的图案会很快消失。而有的图案则固定不动,有的周而复始重复两个或几个图案,有的婉蜒而行。有的则保持图案定向移动,形似阅兵阵……,其中最为著名的是"滑翔机 (叫Glider)"的图案。
matlab程序如下:
% 其中黑点表示活着
% 白点表示死亡状态
|
function Game_of_Life(n) % 生命游戏 % Example: % Game_of_Life(100); if nargin==0; n=100; end B=round(rand(n+2)); Z=B(2:end-1,2:end-1); H=imshow(Z,[]); set(gcf,'position',[241 132 560 420]) set(gcf,'doublebuffer','on'); xlabel('Please press "space" key and stop this program!',... 'fontsize',12,'color','r'); k=1; title('Game of life','color','b'); while k; s=get(gcf,'currentkey'); if strcmp(s,'space'); clc;k=0; end A=sumfun(B); X=zeros(n); X(Z==1 & (A==2 | A==3))=1; X(Z==0 & A==3)=1; B(2:end-1,2:end-1)=X; Z=X; set(H,'CData',1-X); pause(0.5); end figure(gcf); function S=sumfun(B); % 周围8个位置的和 S=B(1:end-2,2:end-1)+... B(3:end,2:end-1)+... B(2:end-1,1:end-2)+... B(2:end-1,3:end)+... B(2:end-1,1:end-2)+... B(1:end-2,3:end)+... B(3:end,1:end-2)+... B(3:end,3:end); |

