元胞自動機(CA)是一種新的研究復雜系統的模型,主要將連續系統離散化,方便研究具有相互作用系統的動力學及其時空演化過程。如雪花以及湍流等復雜現象的形成過程。
CA的關鍵在于規則的制定,在仿真模擬中,規則越趨近于現實,得到的結論一般來說越符合現實。但是越是趨近于實際的規則越是復雜。所以需要平衡規則與仿真實際之間的度。
生命游戲的構成及規則:
(1)元胞分布在規則劃分的網格上
(2)元胞具有0,1兩種狀態,0代表"死",1代表"生"
(3)元胞以相鄰的8個元胞為鄰居。即Moore鄰居形式;
實現:
先假設有30*30的棋盤,每個格子有50%的概率為“生”和50%概率為“死”。
m=30;n=30;p=0.5;
for x=1:m
for y=1:n
r=rand(1);
if r>p
a(x,y)=1;
else a(x,y)=0;
end
end
end
for x=1:m
for y=1:n
if a(x,y)==1
fx=[x-1,x-1,x,x];fy=[y-1,y,y,y-1];fill(fx,fy,'g'),hold on
else
end
end
end
然后開始進行生命游戲,設按規則進行100次。
h=100;
for k=1:h
fx=[0,m,m,0];fy=[0,0,n,n];fill(fx,fy,'k'),hold on%把畫面弄成全黑的0.5秒,體現出變化
for x=2:m-1
for y=2:n-1
b(x,y)=a(x-1,y-1)+a(x-1,y)+a(x-1,y+1)+a(x,y-1)+a(x,y+1)+a(x+1,y-1)+a(x+1,y)+a(x+1,y+1);
if b(x,y)==2,c(x,y)=a(x,y);%如果一個細胞周圍有2個細胞為生,則該細胞的生死狀態保持不變
elseif b(x,y)==3,c(x,y)=1;% 如果一個細胞周圍有3個細胞為生,該細胞若原先為死,則轉為生,若原先為生,則保持不變
else c(x,y)=0;%否則為死
end
end
end
c(1:m,1)=a(1:m,1);c(1:m,n)=a(1:m,n);%邊緣保持不變
for x=1:m
for y=1:n
if c(x,y)==1
fx=[x-1,x-1,x,x];fy=[y-1,y,y,y-1];fill(fx,fy,'g'),hold on
else
end
end
end
pause(0.05)
a=c;
end
匯總一下:
m=30;n=30;p=0.7;h=100;
for x=1:m
for y=1:n
r=rand(1);
if r>p
a(x,y)=1;
else a(x,y)=0;
end
end
end
for x=1:m
for y=1:n
if a(x,y)==1
fx=[x-1,x-1,x,x];fy=[y-1,y,y,y-1];fill(fx,fy,'g'),hold on
else
end
end
end
for k=1:h
fx=[0,m,m,0];fy=[0,0,n,n];fill(fx,fy,'k'),hold on%把畫面弄成全黑的0.5秒,體現出變化
for x=2:m-1
for y=2:n-1
b(x,y)=a(x-1,y-1)+a(x-1,y)+a(x-1,y+1)+a(x,y-1)+a(x,y+1)+a(x+1,y-1)+a(x+1,y)+a(x+1,y+1);
if b(x,y)==2,c(x,y)=a(x,y);%如果一個細胞周圍有2個細胞為生,則該細胞的生死狀態保持不變
elseif b(x,y)==3,c(x,y)=1;% 如果一個細胞周圍有3個細胞為生,該細胞若原先為死,則轉為生,若原先為生,則保持不變
else c(x,y)=0;%否則為死
end
end
end
c(1:m,1)=a(1:m,1);c(1:m,n)=a(1:m,n);%邊緣保持不變
for x=1:m
for y=1:n
if c(x,y)==1
fx=[x-1,x-1,x,x];fy=[y-1,y,y,y-1];fill(fx,fy,'g'),hold on
else
end
end
end
pause(0.05)
a=c;
end
效果如下: