王登科:生命游戲與遺傳編程
今天在一本書中讀到一個很神奇的故事,在九十年代,生物學家Thomas S. Ray寫過一個80條指令的病毒,并把這條病毒放在計算機里面『培養』,這些病毒不斷復制和變異,變化出了各種不可思議的變種,比如在幾十億次運行之后,出現了僅僅有22條指令卻有完善功能的病毒,當時麻省理工的科學家嘗試用最短的指令來寫一只病毒,卻還是用了31條指令。
指令的多少關系到對計算機資源的索取,所以45條指令的病毒比80條指令的病毒更具優勢,這位生物學家調整了計算機規則,給不同指令的病毒分配不同的資源,以達到某種『平等』,但是在一百五十億次『繁衍』之后,出現了一種36條指令的病毒,這個病毒很『狡猾』,他在末尾多占用了一個字節,以『騙取』了多一倍的運行資源,結果橫掃了整個系統。
作者還提出一種設想,讓計算機程序也在運行中做到生物那樣的自我進化,非人為的變得越來越人性化,比如Word,在你每次用完它之后就會默默的自我更新以達到更漂亮的外觀和更人性化的體驗,當然,前提是你應該為這些『程序生物』的繁衍設定一些規則。
看到這些神奇的東西,我感到我多年的計算機知識白學了。我立馬開始搜索這方面的資料,我的感受是,這個世界太奇妙了。
『讓計算機模擬生物進化』一直以來都是計算機科學和生物學的課題,事實上,早在1970年,美國數學家John Horton Conway就發明了一種『細胞自動機』,這也被稱之為『生命游戲』。
生命游戲是一個零玩家游戲。它包括一個二維矩形世界,這個世界中的每個方格居住著一個活著的或死了的細胞。一個細胞在下一個時刻生死取決于相鄰八個方格中活著的或死了的細胞的數量。如果相鄰方格活著的細胞數量過多,這個細胞會因為資源匱乏而在下一個時刻死去;相反,如果周圍活細胞過少,這個細胞會因太孤單而死去。實際中,玩家可以設定周圍活細胞的數目怎樣時才適宜該細胞的生存。如果這個數目設定過高,世界中的大部分細胞會因為找不到太多的活的鄰居而死去,直到整個世界都沒有生命;如果這個數目設定過低,世界中又會被生命充滿而沒有什么變化。
實際中,這個數目一般選取2或者3;這樣整個生命世界才不至于太過荒涼或擁擠,而是一種動態的平衡。這樣的話,游戲的規則就是:當一個方格周圍有2或3個活細胞時,方格中的活細胞在下一個時刻繼續存活;即使這個時刻方格中沒有活細胞,在下一個時刻也會“誕生”活細胞。
在這個游戲中,還可以設定一些更加復雜的規則,例如當前方格的狀況不僅由父一代決定,而且還考慮祖父一代的情況。玩家還可以作為這個世界的“上帝”,隨意設定某個方格細胞的死活,以觀察對世界的影響。
在游戲的進行中,雜亂無序的細胞會逐漸演化出各種精致、有形的結構;這些結構往往有很好的對稱性,而且每一代都在變化形狀。一些形狀已經鎖定,不會逐代變化。有時,一些已經成形的結構會因為一些無序細胞的“入侵”而被破壞。但是形狀和秩序經常能從雜亂中產生出來。
顯然Thomas S. Ray的『病毒生物』比生命游戲中的這些『細胞』更加強大,它們運行在計算機系統中而非軟件中,換言之,它們更加『高級一層』,所以這些病毒造成的變異更加神奇,而不僅僅是生命游戲中的形狀體現。很遺憾我沒有找到Thomas S. Ray的病毒樣本 Thomas S. Ray的項目主頁是:http://life.ou.edu/tierra/,有下載,有論文,自取。不過我找到了好幾款現在還可以運行的生命游戲,有興趣的不妨看看:http://simplesource.blog.163.com/blog/static/103414062010089838173/,還有個程序員在Conway的生命游戲的基礎上進行了更多的設置,使得其更加復雜有趣,這個『高級版』可以在這找到:http://www.cnblogs.com/conmajia/archive/2012/05/31/life-game-note.html
后來我知道,Thomas S. Ray的程序其實屬于遺傳編程(GP)的范疇,按照百科的解釋,遺傳編程是一種特殊的利用進化算法的機器學習技術, 它開始于一群由隨機生成的千百萬個計算機程序組成的"人群",然后根據一個程序完成給定的任務的能力來確定某個程序的適合度,應用達爾文的自然選擇(適者生存)確定勝出的程序,計算機程序間也模擬兩性組合,變異,基因復制,基因刪除等代代進化,直到達到預先確定的某個中止條件為止。
復雜的生命形式可以通過最簡單的規則來進行演化,生命之奇妙莫過于此。更直觀的感受可以通過以下一個五分鐘的小視頻來感受:http://v.youku.com/v_show/id_XNjczOTU3OTQw.html
算法是人寫的,可是演化卻是人所不能控制的,這種由簡單規律和大量個體智慧共同作用的結合讓我想到了分布式計算和大數據,我們炒的很火的新概念,其實早就根植于我們進化的基因當中,而擁有強大運算能力的現代計算機,則是潘多拉的魔盒,我們通過它來研究生命,但是里面也充滿著未知。
我們所有計算機老師都告訴我們計算機是最老實的,你讓它做什么它就做什么,可是計算機也有不老實的時候,某些時候,計算機的『失控』比『受控』更加令人興奮。
失控的計算機,帶來的是嶄新的世界,諸如人工智能,進化模擬等等領域,我們需要的正是出乎我們預料的結果。
其實我也一直好奇,是什么讓這些變異發生?讓這些進化開啟?讓人所寫的程序變得不被人理解?想來,這個原因應該和我們之所以從細胞進化到人,而又從石器時代走到信息時代的原因一樣,這個原因就是生命之與世界的奧秘。
能夠知道這些奇妙的東西真是太爽了。