c#元胞自动机_元胞自动机+生命游戏
元胞自動(dòng)機(jī)
元胞自動(dòng)機(jī)(Cellular Automaton,復(fù)數(shù)為Cellular Automata,簡稱CA,也有人譯為細(xì)胞自動(dòng)機(jī)、點(diǎn)格自動(dòng)機(jī)、分子自動(dòng)機(jī)或單元自動(dòng)機(jī))。是一時(shí)間和空間都離散的動(dòng)力系統(tǒng)。散布在規(guī)則格網(wǎng) (Lattice Grid)中的每一元胞(Cell)取有限的離散狀態(tài),遵循同樣的作用規(guī)則,依據(jù)確定的局部規(guī)則作同步更新。大量元胞通過簡單的相互作用而構(gòu)成動(dòng)態(tài)系統(tǒng)的演化。
不同于一般的動(dòng)力學(xué)模型,元胞自動(dòng)機(jī)不是由嚴(yán)格定義的物理方程或函數(shù)確定,而是用一系列模型構(gòu)造的規(guī)則構(gòu)成。凡是滿足這些規(guī)則的模型都可以算作是元胞自動(dòng)機(jī)模型。因此,元胞自動(dòng)機(jī)是一類模型的總稱,或者說是一個(gè)方法框架。其特點(diǎn)是時(shí)間、空間、狀態(tài)都離散,每個(gè)變量只取有限多個(gè)狀態(tài),且其狀態(tài)改變的規(guī)則在時(shí)間和空間上都是局部的。
元胞自動(dòng)機(jī)的構(gòu)建沒有固定的數(shù)學(xué)公式,構(gòu)成方式繁雜,變種很多,行為復(fù)雜。故其分類難度也較大,自元胞自動(dòng)機(jī)產(chǎn)生以來,對于元胞自動(dòng)機(jī)分類的研究就是元胞自動(dòng)機(jī)的一個(gè)重要的研究課題和核心理論,在基于不同的出發(fā)點(diǎn),元胞自動(dòng)機(jī)可有多種分類,其中,最具影響力的當(dāng)屬S. Wolfram在80年代初做的基于動(dòng)力學(xué)行為的元胞自動(dòng)機(jī)分類,而基于維數(shù)的元胞自動(dòng)機(jī)分類也是最簡單和最常用的劃分。除此之外,在1990年,Howard A.Gutowitz提出了基于元胞自動(dòng)機(jī)行為的馬爾科夫概率量測的層次化、參量化的分類體系(Gutowitz,H. A.,1990)。下面就上述的前兩種分類作進(jìn)一步的介紹。同時(shí)就幾種特殊類型的元胞自動(dòng)機(jī)進(jìn)行介紹和探討S. Wolfrarm在詳細(xì)分析研究了一維元胞自動(dòng)機(jī)的演化行為,并在大量的計(jì)算機(jī)實(shí)驗(yàn)的基礎(chǔ)上,將所有元胞自動(dòng)機(jī)的動(dòng)力學(xué)行為歸納為四大類(Wolfram. S.,1986):
⑴平穩(wěn)型:自任何初始狀態(tài)開始,經(jīng)過一定時(shí)間運(yùn)行后,元胞空間趨于一個(gè)空間平穩(wěn)的構(gòu)形,這里空間平穩(wěn)即指每一個(gè)元胞處于固定狀態(tài)。不隨時(shí)間變化而變化。
⑵周期型:經(jīng)過一定時(shí)間運(yùn)行后,元胞空間趨于一系列簡單的固定結(jié)構(gòu)(Stable Patterns)或周期結(jié)構(gòu)(Perlodical Patterns)。由于這些結(jié)構(gòu)可看作是一種濾波器(Filter),故可應(yīng)用到圖像處理的研究中。
⑶混沌型:自任何初始狀態(tài)開始,經(jīng)過一定時(shí)間運(yùn)行后,元胞自動(dòng)機(jī)表現(xiàn)出混沌的非周期行為,所生成的結(jié)構(gòu)的統(tǒng)計(jì)特征不再變止,通常表現(xiàn)為分形分維特征。
⑷復(fù)雜型:出現(xiàn)復(fù)雜的局部結(jié)構(gòu),或者說是局部的混沌,其中有些會(huì)不斷地傳播。
分別描述
從另一角度,元胞自動(dòng)機(jī)可視為動(dòng)力系統(tǒng),因而可將初試點(diǎn)、軌道、不動(dòng)點(diǎn)、周期軌和終極軌等一系列概念用到元胞自動(dòng)機(jī)的研究中,上述分類,又可以分別描述為(譚躍進(jìn),1996;謝惠民,1994;李才偉、1997);
⑴均勻狀態(tài),即點(diǎn)態(tài)吸引子,或稱不動(dòng)點(diǎn);
⑵簡單的周期結(jié)構(gòu),即周期性吸引子,或稱周期軌;
⑶混沌的非周期性模式,即混沌吸引子;
⑷這第四類行為可以與生命系統(tǒng)等復(fù)雜系統(tǒng)中的自組織現(xiàn)象相比擬,但在連續(xù)系統(tǒng)中沒有相對應(yīng)的模式。但從研究元胞自動(dòng)機(jī)的角度講,最具研究價(jià)值的具有第四類行為的元胞自動(dòng)機(jī),因?yàn)檫@類元胞自動(dòng)機(jī)被認(rèn)為具有"突現(xiàn)計(jì)算"(Emergent Computation)功能,研究表明,可以用作廣義計(jì)算機(jī)(Universal Computer)以仿真任意復(fù)雜的計(jì)算過程。另外,此類元胞自動(dòng)機(jī)在發(fā)展過程中還表現(xiàn)出很強(qiáng)的不可逆(lrreversibility)特征,而且,這種元胞自動(dòng)機(jī)在若干有限循環(huán)后,有可能會(huì) "死"掉,即所有元胞的狀態(tài)變?yōu)榱恪?/p>
應(yīng)用
元胞自動(dòng)機(jī)可用來研究很多一般現(xiàn)象。其中包括通信、信息傳遞(Communicahon)、計(jì)算(Compulation)、構(gòu)造 (Construction)、生長 (Growth)、復(fù)制 (Reproduction)、競爭(Competition)與進(jìn)化(Evolutio,])等(Smith A.,1969;Perrier,J.Y.,1996)。同時(shí)。它為動(dòng)力學(xué)系統(tǒng)理論中有關(guān)秩序 (Ordering)、紊動(dòng) (Turbulence)、混沌 (Chaos)、非對稱(Symmetry-Breaking)、分形(Fractality)等系統(tǒng)整體行為與復(fù)雜現(xiàn)象的研究提供了一個(gè)有效的模型工具 (Vichhac。G,1984; Bennett,C,1985)。
元胞自動(dòng)機(jī)自產(chǎn)生以來,被廣泛地應(yīng)用到社會(huì)、經(jīng)濟(jì)、軍事和科學(xué)研究的各個(gè)領(lǐng)域。應(yīng)用領(lǐng)域涉及社會(huì)學(xué)、生物學(xué)、生態(tài)學(xué)、信息科學(xué)、計(jì)算機(jī)科學(xué)、數(shù)學(xué)、物理學(xué)、化學(xué)、地理、環(huán)境、軍事學(xué)等。
在社會(huì)學(xué)中
元胞自動(dòng)機(jī)用于研究經(jīng)濟(jì)危機(jī)的形成與爆發(fā)過程、個(gè)人行為的社會(huì)性,流行現(xiàn)象,如服裝流行色的形成等。在生物學(xué)中,元胞自動(dòng)機(jī)的設(shè)計(jì)思想本身就來源于生物學(xué)自繁殖的思想,因而它在生物學(xué)上的應(yīng)用更為自然而廣泛。例如元胞自動(dòng)機(jī)用于腫瘤細(xì)胞的增長機(jī)理和過程模擬、人類大腦的機(jī)理探索(Victor.Jonathan.D.,1990)、艾滋病病毒HIV的感染過程(Sieburg,H.B.. 1990)、自組織、自繁殖等生命現(xiàn)象的研究以及最新流行的克隆 (Clone)技術(shù)的研究等 (ErmentroutG。B。,1993)。
在生態(tài)學(xué)中
元胞自動(dòng)機(jī)用于兔子-草,鯊魚-小魚等生態(tài)動(dòng)態(tài)變化過程的模擬,展示出令人滿意的動(dòng)態(tài)效果;元胞自動(dòng)機(jī)還成功地應(yīng)用于螞蟻、大雁、魚類洄游等動(dòng)物的群體行為的模擬;另外,基于元胞自動(dòng)機(jī)模型的生物群落的擴(kuò)散模擬也是當(dāng)前的一個(gè)應(yīng)用熱點(diǎn)。在信息學(xué)中。元胞自動(dòng)機(jī)用于研究信息的保存、傳遞、擴(kuò)散的過程。另外。Deutsch(1972)、Sternberg(1980)和Rosenfeld(1979)等人還將二維元胞自動(dòng)機(jī)應(yīng)用到圖像處理和模式識別中 (WoIfram.S.,1983)。
在計(jì)算機(jī)科學(xué)中
元胞自動(dòng)機(jī)可以被看作是并行計(jì)算機(jī)而用于并行計(jì)算的研究(Wolfram.S.1983)。另外。元胞自動(dòng)機(jī)還應(yīng)用于計(jì)算機(jī)圖形學(xué)的研究中。
在數(shù)學(xué)中,元胞自動(dòng)機(jī)可用來研究數(shù)論和并行計(jì)算。例如Fischer(1965)設(shè)計(jì)的素?cái)?shù)過濾器(Prime Number Sieves)(Wolfram,S.1983)。
在物理學(xué)中
除了格子氣元胞自動(dòng)機(jī)在流體力學(xué)上的成功應(yīng)用。元胞自動(dòng)機(jī)還應(yīng)用于磁場、電場等場的模擬,以及熱擴(kuò)散、熱傳導(dǎo)和機(jī)械波的模擬。另外。元胞自動(dòng)機(jī)還用來模擬雪花等枝晶的形成。
在化學(xué)中
元胞自動(dòng)機(jī)可用來通過模擬原子、分子等各種微觀粒子在化學(xué)反應(yīng)中的相互作用,而研究化學(xué)反應(yīng)的過程。例如李才偉 (1997)應(yīng)用元胞自動(dòng)機(jī)模型成功模擬了由耗散結(jié)構(gòu)創(chuàng)始人I·Prgogine所領(lǐng)導(dǎo)的Brussel學(xué)派提出的自催化模型---Brusselator模型,又稱為三分子模型。Y·BarYam等人利用元胞自動(dòng)機(jī)模型構(gòu)造了高分子的聚合過程模擬模型,在環(huán)境科學(xué)上,有人應(yīng)用元胞自動(dòng)機(jī)來模擬海上石油泄露后的油污擴(kuò)散、工廠周圍廢水、廢氣的擴(kuò)散等過程的模擬。
在軍事科學(xué)中
元胞自動(dòng)機(jī)模型可用來進(jìn)行戰(zhàn)場的軍事作戰(zhàn)模擬"提供對戰(zhàn)爭過程的aq理解(譚躍進(jìn)等,1996)。
其他
元胞自動(dòng)機(jī)作為一種動(dòng)態(tài)模型,更多的是作為一種通用性建模的方法,其應(yīng)用幾乎涉及社會(huì)和自然科學(xué)的各個(gè)領(lǐng)域
生命游戲
生命游戲是英國數(shù)學(xué)家約翰·何頓·康威在1970年發(fā)明的細(xì)胞自動(dòng)機(jī)。它最初于1970年10月在《科學(xué)美國人》雜志中馬丁·葛登能(Martin Gardner,1914年11月21日-2010年5月22日。又譯:馬丁·加德納)的“數(shù)學(xué)游戲”專欄出現(xiàn)。
概述
生命游戲其實(shí)是一個(gè)零玩家游戲,它包括一個(gè)二維矩形世界,這個(gè)世界中的每個(gè)方格居住著一個(gè)活著的或死了的細(xì)胞。一個(gè)細(xì)胞在下一個(gè)時(shí)刻生死取決于相鄰八個(gè)方格中活著的或死了的細(xì)胞的數(shù)量。如果相鄰方格活著的細(xì)胞數(shù)量過多,這個(gè)細(xì)胞會(huì)因?yàn)橘Y源匱乏而在下一個(gè)時(shí)刻死去;相反,如果周圍活細(xì)胞過少,這個(gè)細(xì)胞會(huì)因太孤單而死去。實(shí)際中,你可以設(shè)定周圍活細(xì)胞的數(shù)目怎樣時(shí)才適宜該細(xì)胞的生存。如果這個(gè)數(shù)目設(shè)定過高,世界中的大部分細(xì)胞會(huì)因?yàn)檎也坏教嗟幕畹泥従佣廊?#xff0c;直到整個(gè)世界都沒有生命;如果這個(gè)數(shù)目設(shè)定過低,世界中又會(huì)被生命充滿而沒有什么變化。實(shí)際中,這個(gè)數(shù)目一般選取2或者3;這樣整個(gè)生命世界才不至于太過荒涼或擁擠,而是一種動(dòng)態(tài)的平衡。這樣的話,游戲的規(guī)則就是:當(dāng)一個(gè)方格周圍有2或3個(gè)活細(xì)胞時(shí),方格中的活細(xì)胞在下一個(gè)時(shí)刻繼續(xù)存活;即使這個(gè)時(shí)刻方格中沒有活細(xì)胞,在下一個(gè)時(shí)刻也會(huì)“誕生”活細(xì)胞。在這個(gè)游戲中,還可以設(shè)定一些更加復(fù)雜的規(guī)則,例如當(dāng)前方格的狀況不僅由父一代決定,而且還考慮祖父一代的情況。你還可以作為這個(gè)世界的上帝,隨意設(shè)定某個(gè)方格細(xì)胞的死活,以觀察對世界的影響。
在游戲的進(jìn)行中,雜亂無序的細(xì)胞會(huì)逐漸演化出各種精致、有形的結(jié)構(gòu);這些結(jié)構(gòu)往往有很好的對稱性,而且每一代都在變化形狀。一些形狀已經(jīng)鎖定,不會(huì)逐代變化。有時(shí),一些已經(jīng)成形的結(jié)構(gòu)會(huì)因?yàn)橐恍o序細(xì)胞的“入侵”而被破壞。但是形狀和秩序經(jīng)常能從雜亂中產(chǎn)生出來。
這個(gè)游戲被許多計(jì)算機(jī)程序?qū)崿F(xiàn)了。Unix世界中的許多Hacker喜歡玩這個(gè)游戲,他們用字符代表一個(gè)細(xì)胞,在一個(gè)計(jì)算機(jī)屏幕上進(jìn)行演化。著名的GNU Emacs編輯器中就包括這樣一個(gè)小游戲。
細(xì)胞自動(dòng)機(jī)(又稱元胞自動(dòng)機(jī)),名字雖然很深?yuàn)W,但是它的行為卻是非常美妙的。所有這些怎樣實(shí)現(xiàn)的呢?我們可以把計(jì)算機(jī)中的宇宙想象成是一堆方格子構(gòu)成的封閉空間,尺寸為N的空間就有N*N個(gè)格子。而每一個(gè)格子都可以看成是一個(gè)生命體,每個(gè)生命都有生和死兩種狀態(tài),如果該格子生就顯示藍(lán)色,死則顯示白色。每一個(gè)格子旁邊都有鄰居格子存在,如果我們把3*3的9個(gè)格子構(gòu)成的正方形看成一個(gè)基本單位的話,那么這個(gè)正方形中心的格子的鄰居就是它旁邊的8個(gè)格子。
每個(gè)格子的生死遵循下面的原則:
1. 如果一個(gè)細(xì)胞周圍有3個(gè)細(xì)胞為生(一個(gè)細(xì)胞周圍共有8個(gè)細(xì)胞),則該細(xì)胞為生(即該細(xì)胞若原先為死,則轉(zhuǎn)為生,若原先為生,則保持不變) 。
2. 如果一個(gè)細(xì)胞周圍有2個(gè)細(xì)胞為生,則該細(xì)胞的生死狀態(tài)保持不變;
3. 在其它情況下,該細(xì)胞為死(即該細(xì)胞若原先為生,則轉(zhuǎn)為死,若原先為死,則保持不變)
設(shè)定圖像中每個(gè)像素的初始狀態(tài)后依據(jù)上述的游戲規(guī)則演繹生命的變化,由于初始狀態(tài)和迭代次數(shù)不同,將會(huì)得到令人嘆服的優(yōu)美圖案。
這樣就把這些若干個(gè)格子(生命體)構(gòu)成了一個(gè)復(fù)雜的動(dòng)態(tài)世界。運(yùn)用簡單的3條作用規(guī)則構(gòu)成的群體會(huì)涌現(xiàn)出很多意想不到的復(fù)雜性為,這就是復(fù)雜性科學(xué)的研究焦點(diǎn)。
細(xì)胞自動(dòng)機(jī)有一個(gè)通用的形式化的模型,每個(gè)格子(或細(xì)胞)的狀態(tài)可以在一個(gè)有限的狀態(tài)集合S中取值,格子的鄰居范圍是一個(gè)半徑r,也就是以這個(gè)格子為中心,在距離它r遠(yuǎn)的所有格子構(gòu)成了這個(gè)格子的鄰居集合,還要有一套演化規(guī)則,可以看成是一個(gè)與該格子當(dāng)前狀態(tài)以及鄰居狀態(tài)相關(guān)的一個(gè)函數(shù),可以寫成f:S*S^((2r)^N-1)->S。這就是細(xì)胞自動(dòng)機(jī)的一般數(shù)學(xué)模型。
最早研究細(xì)胞自動(dòng)機(jī)的科學(xué)家是馮·諾伊曼,后來康韋發(fā)明了上面展示的這個(gè)最有趣的細(xì)胞自動(dòng)機(jī)程序:《生命游戲》,而wolfram則詳盡的討論了一維世界中的細(xì)胞自動(dòng)機(jī)的所有情況,認(rèn)為可以就演化規(guī)則f進(jìn)行自動(dòng)機(jī)的分類,而只有當(dāng)f滿足一定條件的時(shí)候,系統(tǒng)演化出來的情況才是有活力的,否則不是因?yàn)檠莼?guī)則太死板而導(dǎo)致生命的死亡,就是因?yàn)檠莼?guī)則太復(fù)雜而使得隨機(jī)性無法克服,系統(tǒng)亂成一鍋粥,沒有秩序。后來人工生命之父克里斯·朗頓進(jìn)一步發(fā)展了元胞自動(dòng)機(jī)理論。并認(rèn)為具有8個(gè)有限狀態(tài)集合的自動(dòng)機(jī)就能夠涌現(xiàn)出生命體的自復(fù)制功能。他根據(jù)不同系統(tǒng)的演化函數(shù)f,找到了一個(gè)參數(shù)lamda用以描述f的復(fù)雜性,得出了結(jié)論只有當(dāng)lamda比混沌狀態(tài)的lamda相差很小的時(shí)候,復(fù)雜的生命活系統(tǒng)才會(huì)誕生,因此,朗頓稱生命誕生于“混沌的邊緣”!并從此開辟了“人工生命”這一新興的交叉學(xué)科!
如今細(xì)胞自動(dòng)機(jī)已經(jīng)在地理學(xué)、經(jīng)濟(jì)學(xué)、計(jì)算機(jī)科學(xué)等領(lǐng)域得到了非常廣泛的應(yīng)用!
代碼:
以下是生命游戲的Mathematica代碼。 在圓環(huán)面地圖上共有100×100個(gè)格子。每個(gè)格子的生死遵循下面的原則:
1. 如果一個(gè)細(xì)胞周圍有3個(gè)細(xì)胞為生(一個(gè)細(xì)胞周圍共有8個(gè)細(xì)胞),則該細(xì)胞為生(即該細(xì)胞若原先為死,則轉(zhuǎn)為生,若原先為生,則保持不變) 。
2. 如果一個(gè)細(xì)胞周圍有2個(gè)細(xì)胞為生,則該細(xì)胞的生死狀態(tài)保持不變;
3. 在其它情況下,該細(xì)胞為死(即該細(xì)胞若原先為生,則轉(zhuǎn)為死,若原先為死,則保持不變)。
Checkboard = RandomInteger[1, {100, 100}];
update[1, 2] := 1;
update[_,3] := 1;
update[_, _] := 0;
SetAttributes[update, Listable];
Dynamic[ArrayPlot[
Checkboard=update[Checkboard,
Plus @@ Map[
RotateRight[Checkboard, #]&, {{-1, -1}, {-1, 0}, {-1,1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1}}]]]]
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)==1fx=[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-1for y=2:n-1b(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)==1fx=[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
總結(jié)
以上是生活随笔為你收集整理的c#元胞自动机_元胞自动机+生命游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Multisim14.0的安装步骤
- 下一篇: 一步一步跟着杨中科.net视频学c#基础