元胞自动机简单理解
元胞自動機(jī)
元胞自動機(jī)( Cellular Automata) 是 20 世紀(jì) 50 年代初由計算機(jī)之父馮·諾依曼為了模擬生命系統(tǒng)所具有的自復(fù)制功能而提出來的網(wǎng)格動力學(xué)模型。
概念
元胞自動機(jī)采用離散的空間布局和離散的時間間隔,將元胞分成有限種狀態(tài),元胞個體狀態(tài)的演變僅與其當(dāng)前狀態(tài)以及其某個局部鄰域的狀態(tài)有關(guān)。
將所有元胞自動機(jī)的動力學(xué)行為歸納為四大類(Wolfram. S.,1986):
⑴ 平穩(wěn)型:自任何初始狀態(tài)開始,經(jīng)過一定時間運(yùn)行后,元胞空間趨于一個空間平穩(wěn)的構(gòu)形,這里空間平穩(wěn)即指每一個元胞處于固定狀態(tài)。不隨時間變化而變化。
⑵ 周期型:經(jīng)過一定時間運(yùn)行后,元胞空間趨于一系列簡單的固定結(jié)構(gòu)(Stable Patterns)或周期結(jié)構(gòu)(Perlodical Patterns)。由于這些結(jié)構(gòu)可看作是一種濾波器(Filter),故可應(yīng)用到圖像處理的研究中。
⑶ 混沌型:自任何初始狀態(tài)開始,經(jīng)過一定時間運(yùn)行后,元胞自動機(jī)表現(xiàn)出混沌的非周期行為,所生成的結(jié)構(gòu)的統(tǒng)計特征不再變止,通常表現(xiàn)為分形分維特征。
⑷ 復(fù)雜型:出現(xiàn)復(fù)雜的局部結(jié)構(gòu),或者說是局部的混沌,其中有些會不斷地傳播。
初等元胞自動機(jī)( Elementary Cellular Automata, ECA)的基本要素如下:
- 元胞空間:元胞在空間分布的空間格點(diǎn)的集合,如一維直線上等間距的點(diǎn)。可為某區(qū)間上的整數(shù)點(diǎn)的集合。二維的元胞自動機(jī)通常有三種劃分方式(三角形、正方形、正六邊形)
| 三角形 | 擁有相對較少的鄰居數(shù)目,易于處理復(fù)雜邊界 | 在計算機(jī)的表達(dá)與顯示不方便,需要轉(zhuǎn)換為四方網(wǎng)格 |
| 正方形 | 直觀簡單,而且適合于在現(xiàn)有計算機(jī)環(huán)境下進(jìn)行表達(dá)顯示 | 不能較好地模擬各向同性的現(xiàn)象 |
| 正六邊形 | 能夠較好地模擬各向同性的現(xiàn)象,因此,模型更更加自然而真實(shí) | 在表達(dá)顯示上較為困難、復(fù)雜 |
元胞空間的邊界條件
理論上,元胞空間是無限的,實(shí)際應(yīng)用中無法達(dá)到這一理想條件。常用的邊界條件有以下幾種:周期型、定值型、絕熱型、反射型
周期型邊界條件(Periodic Boundary)
是指相對邊界連接起來的元胞空間,對于一維空間,首尾相接形成一個圓環(huán);
對于二維空間,上下相接、左右相接,形成一個拓?fù)鋱A環(huán)面,形似車胎
定值型邊界條件(Constant Boundary)
所有邊界外元胞均取某一固定常量
絕熱型邊界條件(Adiabatic Boundary)
在指邊界外鄰居元胞的狀態(tài)始終和邊界元胞的狀態(tài)保持一致,即具有狀態(tài)的零梯度。
反射型邊界條件(Constant Boundary)
在邊界外鄰居的元胞狀態(tài)是以邊界元胞為軸的鏡面反射
- 狀態(tài)集:S={s1,s2} 即只有兩種不同的狀態(tài)。這兩種不同的狀態(tài)可將其分別編碼為0 與 1;若用圖形表示,則可對應(yīng)“黑”與“白” 或者其他兩種不同的顏色。
- 鄰居:若一維鄰居半徑r=1,即每個元胞最多只有“左鄰右舍”兩個鄰居。
鄰居數(shù)目=2d
2. 摩爾型
鄰居數(shù)目=3^d-1
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-zK0qkYQ5-1604564226207)(https://i.loli.net/2020/10/26/IO2TqoRk316LJpH.png)]
3. 擴(kuò)展摩爾型
鄰居數(shù)目=(2r+1)^d-1
4. 馬格勒斯型(Margolus)
主要區(qū)別:以2*2的元胞塊為單元進(jìn)行處理,而不是單獨(dú)處理
主要應(yīng)用領(lǐng)域:格子氣流體、顆粒流
- 演化規(guī)則:任意設(shè)定, 最多2^8=256種不同的設(shè)定方式。元胞以相鄰的8個元胞為鄰居。即Moore鄰居;一個元胞的生死由其在該時刻本身的生死狀態(tài)和周圍八個鄰居的狀態(tài)決定。根據(jù)元胞及其鄰居元胞的狀態(tài),決定下一時刻該元胞狀態(tài)的動力學(xué)函數(shù),也可以是狀態(tài)轉(zhuǎn)移方程或局部映射。
從數(shù)學(xué)上來定義,有限自動機(jī)是一個五元組:
FA=(Q,S,δ,q0,F)
其中,Q是控制器的有限狀態(tài)集、S是輸入符號約有限集、δ是控制狀態(tài)轉(zhuǎn)移規(guī)律的Q×S到Q的映射 (可用狀態(tài)轉(zhuǎn)移圖或狀態(tài)轉(zhuǎn)移表表示),q0是初始狀態(tài)、F是終止?fàn)顟B(tài)集。若δ是單值映射,則稱M為確定性有限自動機(jī);若δ是多值映射,則稱M為非確定性 有限自動機(jī)。特征
(1)同質(zhì)性、齊性:同質(zhì)性反映在元胞空間內(nèi)的每個元胞都服從相同的規(guī)則;齊性指的是元胞的分布方式相同,大小形狀相同,空間分布整齊。
(2)空間離散:元胞分布在按一定規(guī)則劃分的離散的元胞空間上。
(3)時間離散:系統(tǒng)的演化是按等時間間隔分步進(jìn)行的。t時刻的狀態(tài)只對t+1時刻的狀態(tài)產(chǎn)生影響。
(4)狀態(tài)離散、有限:元胞自動機(jī)的狀態(tài)參量只能取有限個離散值。
(5)同步計算(并行性):元胞自動機(jī)的處理是同步進(jìn)行的。
(6)時空局域性:每個元胞在t+1時刻的狀態(tài),取決于其鄰居的元胞在t時刻的狀態(tài)。
(7)維數(shù)高:動力系統(tǒng)中一般將變量的個數(shù)成為維數(shù)。任何完備元胞自動機(jī)的元胞空間是在空間上的無窮集,每個元胞的狀態(tài)是這個動力學(xué)系統(tǒng)的變量,因此元胞自動機(jī)是一類無窮維動力系統(tǒng)。
應(yīng)用:
生物學(xué)領(lǐng)域
腫瘤細(xì)胞的增長機(jī)理和過程模擬
人類大腦的機(jī)理探索
艾滋病病毒HIV的感染過程
自組織、自繁殖等生命現(xiàn)象的研究
克隆技術(shù)
模擬植物的生長
貝殼上色素的沉積圖案
生態(tài)學(xué)領(lǐng)域
生態(tài)系統(tǒng)動態(tài)變化過程的模擬
螞蟻的行走路線,大雁、魚類洄游動物的群體行為的模擬
生物群落的擴(kuò)散模擬
物理學(xué)模擬
LGA 格子氣自動機(jī)
LBM格子-玻爾茲曼法
流體領(lǐng)域,在多孔介質(zhì)、多相流、微小尺寸具有獨(dú)特的優(yōu)越性
LBM同樣被成功用于磁場、電場、熱擴(kuò)散、熱傳導(dǎo)的模擬
雪花等枝晶的形成
液態(tài)金屬材料的凝固結(jié)晶過程
顆粒材料的垮塌現(xiàn)象
交通科學(xué)領(lǐng)域
兩條主線:
1)Nagel-Schreckenberg模型
對城市道路交通流的研究
2)BML模型
對城市交通網(wǎng)絡(luò)的研究
計算機(jī)科學(xué)與信息學(xué)領(lǐng)域
研究信息的保存、傳遞、擴(kuò)散
圖像處理和模式識別
184號模型
- 道路被劃分為等距格子,每個格點(diǎn)表示一個元胞;
- 某個時刻,元胞或者是空的,或者被一輛車占據(jù);
- 所有車輛的行進(jìn)方向都是一致的(如向右);
- 在每一個時間步內(nèi):若第n輛車的前方元胞是空的,則該車可以向前行駛一步;
- 若前面的元胞被另一輛車n+1所占據(jù),即使第n+1輛車在本時間步內(nèi)離開此元胞,第n輛車也停在原地不動;
- 整個系統(tǒng)采用周期性邊界條件以確保車輛數(shù)守恒。
NaSch模型
NaSch模型是對184號模型的推廣,1992年Nagle和Schreckenberg提出了著名的NaSch模型
Python 實(shí)現(xiàn)最簡單的元胞自動機(jī)
選取的元胞狀態(tài)只有兩種,分別為 0 和 1。每一層由 64 個元胞組成,若元胞狀態(tài)為 1,那么控制臺將打印星號(*);如果元胞狀態(tài)為 0,那么控制臺將打印連字符(-)。也就是說,每一行由 64 個混合星號與連字符的圖案組成。
狀態(tài)更新規(guī)則:若當(dāng)前元胞的前一個元胞的狀態(tài)為 1,或者前一個元胞的左右兩邊的元胞的狀態(tài)有且只有一個值為 1, 那么該元胞的狀態(tài)就為 1。反之,元胞的狀態(tài)設(shè)為 0。對于第一列和最后一列,我們只需分別考慮右元胞和左元胞即可。對于中間部分的元胞來說,若其領(lǐng)域元胞的狀態(tài)為[0,1,0]、[0,0,1]、[1,0,0]、[1,1,0]等狀態(tài)時,當(dāng)前元胞的狀態(tài)就為 1。
import time def print_seq(seq, speed=0.5):for item in seq:if item:print('*', end='')else:print('-', end='')print('')time.sleep(speed)class Cell:def __init__(self, deepth=31):self.ca = [0 if i != 31 else 1 for i in range(64)]self.ca_new = []self.deepth = deepthdef process(self):print_seq(self.ca)for i in range(self.deepth):self._rule()print_seq(self.ca_new)self.ca = self.ca_newself.ca_new = []def _rule(self):for i in range(64):if 0 < i < 63:if self.ca[i - 1] == self.ca[i + 1]:self.ca_new.append(0)else:self.ca_new.append(1)elif i == 0:if self.ca[1]:self.ca_new.append(1)else:self.ca_new.append(0)else:if self.ca[62]:self.ca_new.append(1)else:self.ca_new.append(0)def main():cell = Cell()cell.process()if __name__ == '__main__':main()參考文章:
總結(jié)
- 上一篇: WCF和webservice的区别
- 下一篇: 什么是同轴电缆