一、什麼是細胞自動機(Celluar Automata , CA)
細胞自動機,簡稱 CA,在1940年代由Stainslaw Ulam 和 John Von Neumann 所提出,是一種網格狀態的規則。
- 在一個由許多網格組成的環境中
- 網格只有兩種狀態 : 生或死(0或1)
- 每個網格在下一刻的狀態是由自己鄰居數有關
- 鄰居是指九宮格內除了自己以外的8個網格
二、Conway由細胞自動機衍化的生命遊戲(Game of Life)
1970年代,數學家康維(Conway)基於細胞自動機的基礎衍化出生命遊戲。生命遊戲的規則是周圍鄰居數太多或太少,自己的下個狀態都會死,詳細規則如下。
- 對於活的網格,周圍活的網格數大於等於1,且小於等於4(1 <= 活的鄰居數 <= 4),則自己仍為活的網格,否則下一個狀態會是死的網格。
- 對於死的網格,周圍活的網格數剛好等於3(3 = 活的鄰居數),則自己會變為活的網格,否則不變。
三、netlogo模擬生命遊戲
將netlogo的patches(網格)作為生命遊戲模擬中的網格,每個網格位有一個變數來代表目前是生是死,生的網格以紅色表示,死的網格以黑色表示。
(一)netlogo介面
setup按鈕:用來初始化環境設定
go按鈕:循環執行(forever),主程式
(二)netlogo完整程式碼
patches-own [ live-cell value ] to setup ca ask n-of 100 patches [birth] end to birth set value 1 set pcolor red end to death set value 0 set pcolor black end to go ask patches [ set live-cell count neighbors with [ value = 1 ] ] ask patches [ifelse ( value = 0 ) and ( live-cell = 3 ) [ birth ] [ifelse ( ( value = 1 ) and ( live-cell >= 2 ) ) and ( ( value = 1 ) and ( live-cell <= 3 ) ) [ birth ] [ death ] ] ] end
(二)netlogo程式碼-分段說明
1. 宣告變數
value:每個網格的狀態,生=1,死=0
live-cell:用來計算周圍8個鄰居有多少活的網格(value = 1)
patches-own [ live-cell value ]
patches-own語法:宣告幾個只屬於patch可以用的變數。
patches-own [ 變數1 變數2 ... 變數n ]
2. setup初始化
先用ca清空所有設定,然後隨機讓100個網格的狀態為生。
to setup ca ask n-of 100 patches [birth] end
ca語法:清除所有agent的各種設定。是clear-all的簡寫
ca clear-all
3. 讓網格狀態為生的function : birth
將網格的value設為1,代表狀態為生,顏色設為紅色做區隔。
to birth set value 1 set pcolor red end
4. 讓網格狀態為生的function : death
將網格的value設為0,代表狀態為死,顏色設為黑色(預設顏色)。
to death set value 0 set pcolor black end
5. go主程式
(1) 將網格的live-cell設為周圍活的鄰居數量(count neighbors with [ value = 1 ])
(2) 如果目前狀態為生,且1 <= 活的鄰居數 <= 4,則自己的下個狀態會是活的網格;否則為死的網格。
(3) 如果目前狀態為死,且3 = 活的鄰居數,則自己的下個狀態會是活的網格;否則為死的網格。
to go ask patches [ set live-cell count neighbors with [ value = 1 ] ] ask patches [ifelse ( value = 0 ) and ( live-cell = 3 ) [ birth ] [ifelse ( ( value = 1 ) and ( live-cell >= 2 ) ) and ( ( value = 1 ) and ( live-cell <= 3 ) ) [ birth ] [ death ] ] ] end
with語法:回傳符合條件的agents
agents with [ 條件 ]
neighbors語法:取得patch周圍8個patch (不含自己)
neighbors
count語法:計算符合條件的agent的數量
count 符合某條件的agent
ifelse語法:當條件判斷的結果為真(true)則執行第一段程式,否則執行第二段
ifelse 條件判斷 [ 執行程式1 ] ( 當條件判斷的結果為真(true)的時候會執行這裡 ) [ 執行程式2 ] ( 當條件判斷的結果為假(false)的時候會執行這裡 )
更多netlogo教學系列
上一篇:【netlogo教學】第6章:用crt(create turtles)產生turtle。
下一篇:【netlogo教學】第8章:用random產生隨機亂數。
若有教學或其他合作需求,歡迎來信 nbablissfully@hotmail.com 詳談
小額支持鍾肯尼
如果我的文章有幫助到你,歡迎你點這裡開啟只要40元的小額贊助連結,可以贊助我一杯咖啡錢;我會更有動力繼續寫作,幫助大家解決更多問題。