【競賽02-b】元胞自動機

0 引入

我們在介紹或者瞭解一個東西之前,我個人認爲比較好的方法就是知道這個東西的具體應用場景如何。在我個人的理解內,元胞自動機像一個模擬器。可以用來模擬一個系統的變化情況。事實上,最初,元胞自動機也是被設計來模擬生物發育中細胞的自我複製。我們可以粗略的認爲,元胞自動機是對於一個動態系統的模擬。至於經常使用的方向與系統類型,我將在本文的末尾進行介紹。

1 元胞自動機概念/定義

標準元胞自動機是一個由「元胞、元胞狀態、鄰域和狀態更新規則」構成的四元組,用數學符號可以表示爲A=(L,d,S,N,f)

A代表一個元胞自動機系統
L表示元胞空間
d表示元胞自動機內元胞空間的維數,是一正整數
S是元胞有限的、離散的狀態集合
N表示某個鄰域內所有元胞的集合
f表示局部映射或局部規則。

解釋:

  • (1)元胞空間:元胞是構成元胞自動機的最基本單元,事實上,筆者在理解上,將元胞一個一個理解爲一張棋盤上的棋子,不同的是,也許圍棋或者五子棋之類的,落在兩根線的交界處,而元胞則在格子中活動。這整張棋盤就是元胞空間。

  • (2)元胞狀態:元胞只能有一種元胞狀態,而且該狀態取自一個有限集合。比如{0,1},{生,死}

  • (3)鄰域:空間位置上與元胞相鄰的細胞稱爲它的鄰元,由所有鄰元組成的區域稱爲它的鄰域。領域通常分爲一維鄰域和二維鄰域以及高維鄰域。我們可以簡單的認爲,如果是一維鄰域,就是整張棋盤只有一行。而二維就是我們常見的棋盤。

  • (4)根據定義的不同,二維鄰域常見的鄰域類型有:馮·諾依曼(vonNeumanNeighborhoods)、摩爾型(MooreNeighborhoods)、馬哥勒斯型(MargolusNeighborhoods)

    在這裏插入圖片描述
    by the way:一般來說,鄰域由r(半徑)來決定

  • 狀態更新規則:
    是指根據元胞當前狀態及其鄰域中元胞的狀態決定下一時刻該元胞狀態的狀態轉移函數
    簡而言之,就是一個元胞下一步要自己自己的狀態是什麼的一個依據。

2 性質

離散性:元胞自動機的空間、時間及狀態都是離散的。
同質性:元胞空間中每個單元格可能具有的狀態集合相同,並且決定各個元胞狀態變化的規則也是相同的。
並行性:元胞空間中各個元胞按狀態更新規則變化是同步進行的,特別適合於並行計算,且各個元胞的狀態變化是獨立行爲,互相沒有任何影響。
局部性:一個元胞在t+1時刻的狀態由其周圍半徑爲r的鄰域中的元胞的當前時刻t的狀態決定,因此,在時間、空間上都存在着局部性。
維數高:元胞自動機是一類無窮維動力系統。

3 實例-生命遊戲

遊戲規則說明:在一個二維矩形世界,這個世界中的每個方格居住着一個活着的或死了的細胞。一個細胞在下一個時刻生死取決於相鄰八個方格中活着的或死了的細胞的數量。如果相鄰方格活着的細胞數量過多,這個細胞會因爲資源匱乏而在下一個時刻死去;相反,如果周圍活細胞過少,這個細胞會因太孤單而死去。

思考!爲何元胞自動機可以模擬它?

答:我們不妨從元胞自動機的幾個組成要素來看:

A代表一個元胞自動機系統-------對應生命遊戲系統
L表示元胞空間-----------對應這個遊戲的二維矩形世界
d表示元胞自動機內元胞空間的維數,是一正整數---二維矩形世界
S是元胞有限的、離散的狀態集合----------活着的或死了
N表示某個鄰域內所有元胞的集合----------周圍的細胞
f表示局部映射或局部規則。-------生死取決於相鄰八個方格中活着的或死了的細胞的數量

我們不妨設置取決於周圍的細胞的數量爲2或者3。試試看這個遊戲會如何。
在正式進行這個遊戲之前,我們再來熟悉一遍遊戲規則:

  1. 如果一個細胞周圍有3個細胞爲生(一個細胞周圍共有8個細胞),則該細胞爲生(即該細胞若原先爲死,則轉爲生,若原先爲生,則保持不變)
  2. 如果一個細胞周圍有2個細胞爲生,則該細胞的生死狀態保持不變;
  3. 在其它情況下,該細胞爲死(即該細胞若原先爲生,則轉爲死,若原先爲死,則保持不變)

下面是matlab代碼

function ca
m=30;n=30;p=.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
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);
elseif b(x,y)==3,c(x,y)=1;
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(.05)
a=c;
end

4 應用

引用自維基百科中文站
在社會學中,元胞自動機用於研究政治組織的突現、個人行爲的社會性、流言的傳播等。
在生物學中,用於腫瘤細胞的增長機理和過程模擬、人類大腦的機理探索、艾滋病病毒HIV的感染過程、自組織、自繁殖等生命現象的研究以及克隆技術的研究。
在計算機科學中,元胞自動機被視爲並行計算機而用於並行計算的研究。
在物理學中,除了格子氣元胞自動機在流體力學上的成功應用,元胞自動機還應用於磁場、電場等場的模擬,以及熱擴散、熱傳導和機械波的模擬。
在軍事科學中,元胞自動機用於模擬軍事作戰,理解戰爭過程。
在管理領域,國內外學者開始應用元胞自動機來解釋分析各種管理現象,對各種管理現象進行演化模擬。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章