引言
群居性昆蟲是一個生命,魚群、鳥群是一個生命,社會、城市是一個有機體,人類的語言是活的,人類的集體行為也是活的。這些複雜系統是如何設計出來的?世界上最著名的遊戲之一,Game of Life生命遊戲,為這些最神秘的問題提出了可能的解釋——也許再複雜的生命,最初也不過是幾條最簡單的規則。本文從Game of Life的緣起說起,解釋了它這幾十年給予數學、計算機、哲學的啟發,最後把它作為Python編程的練習。
「匈牙利唯一的天才」——馮諾依曼
我們的故事從上世紀40年代說起。彼時,第一臺電子計算機的出現昭示了計算機領域風起雲湧的時代,同時也開啟了以信息控制技術為核心的人類第三次科技革命。馮諾依曼(John von Neumann)則是這段歷史中繞不開的開山鼻祖。
能夠作為電子計算機理論和博弈論的奠基者,用「天才」這個詞再去形容馮諾依曼顯得蒼白。他是一個精力智力都充沛的命運寵兒。在他博士論文答辯時,導師們唯一的問題是:你今天的西裝真挺括,是哪個裁縫做的?他喜歡在吵雜的環境裡工作,在辦公室裡放進行曲會吵到隔壁的愛因斯坦。普林斯頓研究拜佔庭歷史的教授說,馮諾依曼在拜佔庭史方面比自己更精通。
馮諾依曼以什麼著名?一個顯示屏可能都放不下(+68More)(來源:維基百科)
人工智慧之父——艾倫·圖靈
說到現代計算機科學的起源,除了馮·諾依曼,不得不提的是圖靈(Alan Turing). 如果說馮·諾依曼是電子計算機的完整呈現者,那圖靈則是「證明」了計算機本身。他給出了「用計算機模擬人類的思維過程」這個思路,而圖靈測試則是對於」計算機是否能展現等同於人的智力「的驗證標準。圖靈機(Turing Machine)[1]給出了計算機能力的邊界,而算法關心的是如何去逼近計算機的能力邊界。圖靈並沒有刻板印象中的四體不勤——他不僅智力超群,還是天賦異稟的長跑運動員。圖靈5公裡能跑進16分鐘,馬拉松最好成績2小時46分。馮諾依曼和圖靈的第一次在時空中的糾纏可以追溯到1931年,當圖靈還在劍橋大學國王學院讀本科的時候。他參加了某一個大獎賽,而獎品則是一本馮諾依曼的《量子力學的數學基礎》。圖靈還評價到:「很有意思,雖然有些應用數學家覺得不好讀,但我覺得還挺容易的。」
人是機器,還是機器是人
隨著人工智慧技術的發展,人與機器的邊界越來越模糊。可以說,人工智慧和對於生命邊界的探索,從有了計算機這個概念開始就存在。馮諾依曼曾給生命下了一個定義。他認為,生命是一個符合圖靈機的定義,同時可以複製自身的有機體。他的朋友,同樣是位家境殷實的高富帥,烏拉姆(Ulam)覺得這個問題非常有意思,提出了「細胞自動機(cellular automata,CA)」的概念,用程序來模擬生長機制[2]。任何程序或多或少都可以被當作一套規則;這套規則明確了每一步程序的行動。就像一個經典的程式設計師笑話:女朋友讓程式設計師男友「下班後,買一袋蘋果回家。如果看到賣西瓜的,就買一個」[3]。細胞自動機就是一個特定類別的簡單程序。它的規則制定在二維的格子(cell)平面上,每一個格子有兩個狀態黑/白;每一步指令都會明確地給出每一個格子如何按照它的八個近鄰的黑白而變色的規則。比如下圖就是一個有十個步驟的細胞自動機[4]。
後來馮·諾依曼和烏拉姆又各忙各的了,等到二十多年後,一生都在遊戲的數學家約翰·康威(John Conway),以一種更有趣的形式發揚了「細胞自動機」,並闡釋了馮·諾依曼的定義是正確的。這個模型就是風靡全球的「Game of Life」, 生命遊戲。
數學魔術師 ——約翰-康威
看《科學美國人》《環球科學》的朋友們看到這個名字一定會覺得很親切,很多人因為康威的「生命遊戲」與計算結下了不解之緣。數學家團體對他有這樣的評價,「他是一位多才多藝的數學家,他在構建和處理『非主流』代數結構方面,以完全出乎意料的方式闡明了各種問題。他在有限群理論、結子理論、數理邏輯和博弈論方面做出了傑出的貢獻。」不幸的是,在2020年4月11日,他因感染COVID-19與世長辭。而他創造的細胞生物就一直留在了二維方格的世界裡。
John Conway
生命遊戲 the Game of Life
生命遊戲算得上是現在流行的真實世界模擬遊戲的鼻祖(也在一定程度上啟發了分形數學)。它用特別簡單的規則產生出帶有真實感的複雜性。
生命遊戲開始於一張二維的方格紙。初始細胞(有機體)每個佔據一個方格。它們各自有活著或死去兩種狀態(live/dead). 每一個細胞是死是活只取決於周圍的環境資源,也就是圍繞著它的八個格子。根據規則,就像真實的細胞生長情況,在二維上的這些方格細胞如果太擠或者太稀疏就會死去;在最合適的群體密度時,它們生長地最好[5]。
康威想要通過這樣一個有趣,過程不受外界控制的遊戲,弄明白怎麼樣的結構可以保持穩定不消亡。生命遊戲是對於由有機體構成的社會起伏的簡化,就像現在全員在探討的「穿越周期性」。經過深思熟慮後,康威非常節制地僅給出了幾條最基礎的遊戲設定[6]。其餘,就看每一次遊戲開始後的「造化」。
By Saisundar.s - Own work
生命遊戲是一代計算機的記憶,就像21世紀的超級計算機的回憶一定有機器學習。生命遊戲是世界上被玩得最多的電腦遊戲之一。上世紀70年代正是微型計算機蓬勃發展的時候,不過當時的計算機還是不擅長圖像處理和儲存,於是生命遊戲席捲了全球的計算機。在美國因為在工作時間偷偷盯著生命遊戲發呆的總損失高達數百萬美金。
不難想像為什麼這個遊戲那麼受人歡迎,正如同變幻莫測的恆星軌跡讓那麼多《三體》書裡書外的人驚心動魄:
1.如此簡單的初始條件卻可以出現驚人的複雜行為;
2.達到平衡的結構中有些非常有趣,有些甚至呈現周期性[7];
3.對於計算機專業的人來說,生命遊戲的價值在於它是圖靈完備(Turing complete)的,也就是說,任何在計算機上可以由算法做到的,都可以在生命遊戲裡實現。
史蒂芬·霍金的《大設計》
為什麼是我們?宇宙的存在有意義嗎?智慧的起源為何?「大設計」曾是一個神學概念,指的是宇宙規律的背後有造物主式的安排。霍金的《大設計》在討論了這些問題用了生命遊戲的模型,「像生命遊戲這樣規則簡單的東西能夠創造出高度複雜的特徵,智慧甚至可能從中誕生。而我們的腦中就有數千億的細胞」。科學界的Google創始人Wolfram更是認為宇宙的本質就是計算,是一套簡單的規則生成的複雜現象。更有意義的是,就算了解了一切規則,我們也無法提前得知這些規則可以演化成怎樣的系統。這對我們有關鍵的啟發,即使在完全絕對論的世界裡,我們依然擁有自由意志。
credit to:Mike Zeng
代碼實現
生命遊戲的思想上和圖像上都有深入淺出特性,我們可以把它當作很好的編程入門問題。像Google這樣的企業也會把它作為試題。我們接下來將如何用Python實現這個遊戲。
下圖是每一個細胞的生死規則。
入門級:
引入Convolution和Kernel:
SciPy中有一個對於諸如人臉識別等圖像處理很重要的功能Convolution(卷積)[8]. Convolution作用在一個細胞和它的鄰居上。
這九個方格的狀態(location/weight)用kernel(核)來表示。
比如這個kernel表示了在0的周圍8個臨近的權重都是1。
在生命遊戲中,neighborhood指的是細胞周圍相鄰的8個格子(這種neighborhood也稱為Moore Neighborhood)
可以用以下代碼替代上述代碼:
「滑翔機」Glider
很多人把滑翔機這個圖案作為生命遊戲的標示。滑翔機是一種處在穩定的振蕩狀態,同時會移動的結構。它在1970年被英國數學家Richard Guy發現。與英特網和Unix同時期的誕生使得Glider在一代黑客心裡有著重要的地位。到現在它還會被當做這個團體的圖騰。
我們得到如下的圖像,這就是一個glider:
By Xerol at en.wikipedia
Father, give us courage to change what must be altered;
serenity to accept what cannot be helped;
and the insight to know the one from the other.
惠我以安寧,忍所當忍;
賜我以勇毅,為所當為;
更賜我以智慧,將兩者區分。
雷茵霍爾德·尼布爾(Reinhold Niebuhr)
THE SUN NEWS SYNDICATION
注釋
[1]圖靈機(Turing Machine)
圖靈機是一個真實計算機的模型。圖靈機可以完成所有計算機可以完成的任務。
[2]細胞自動機(CA)是一種用來思考複雜系統的極簡化計算模型。人類對於智慧生物的好奇與仿真的熱情源源不斷地推動著科學技術的發展,不論是細胞自動機,還是飛機,人工智慧,都是從真實的複雜系統中抽象出最核心的要素,再通過一定的邏輯重構。
[3]程式設計師買了一個蘋果回家——因為路上遇到了一個賣西瓜的。
[4]這個CA的具體規則是:第一步,第一行中間的格子是黑色,除此之外均為白色。在緊接著的步驟中,與上一步驟或者任一步驟黑色格子相鄰的格子成黑色。
[5]遊戲設定
1.避免爆發式的總數上漲
2.存在小的初始狀態以達到混沌的、不可預測的結果
3.需要以能在細胞自動機環境裡模擬出馮諾依曼的自複製結構(Von Neumann’s Universal Constructor)
4.具體的演變規則在滿足1-3的情況下越簡單越好
[6]具體程序(演變規則)
1.「總數過少」:任何活細胞如果活鄰居少於2個,則死掉。
2.「正常」:任何活細胞如果活鄰居為2個或3個,則保持活的狀態。
3.「總數過多」:任何活細胞如果活鄰居大於3個,則死掉。
4.「繁殖」:任何死細胞如果活鄰居正好是3個,則活過來。
[7]有三種穩定態:靜止態(Still Life),震蕩態(Oscillator)和以Glider為代表的移動震蕩態
[8] 比如知名的卷積神經網絡(Convolutional Neural Network, CNN)的核心概念就是它的人工神經元可以響應一部分覆蓋範圍內的周圍單元(neighborhood),對於大型圖像處理有出色表現。
參考文獻和衍生閱讀
1.這個遊戲沒有玩家,為何在學術圈火了半個世紀?時間: 2017年01月06日 | 作者: 徐寒易 | 來源: 環球科學
https://huanqiukexue.com/a/qianyan/xinxi__nenyuan/2017/0106/26910.html
2.Introduction to the Theory of Computation 3rd - Michael Sipser
3.https://web.stanford.edu/class/sts145/Library/life.pdf
4. https://commons.wikimedia.org/w/index.php?curid=73877448
5.https://www.csail.mit.edu/event/von-neumann-and-origin-life
Von Neumann and the Origin of Life SPEAKER Hyman Hartman
6.史蒂芬·沃爾夫勒姆(Wolfram):宇宙的本質是計算
https://m.guokr.com/article/126181
7. Wikipedia:詞條-Game of Life; Glider
8. Turing and von Neumann, Professor Raymond Flood
9. A New Kind of Science - Stephen Wolfram
9 : 老胡談話錄
10. The Lives of a Cell - Lewis Thomas,李紹明翻譯
11. 這些是史上最有意思的GoL Patterns?:
https://conwaylife.com/forums/viewtopic.php?t=1067
代碼參考:
https://github.com/madison-python/think-complexity/blob/master/game-of-life.ipynb
https://github.com/madison-python/think-complexity/blob/master/thinkcomplexity/game_of_life.py
https://github.com/madison-python/think-complexity/blob/master/game-of-life.ipynb
https://leetcode-cn.com/problems/game-of-life/
By Lucas Vieira - Own work,CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=101736