而這就是西姆斯的發現。他的方程進化出全新的圖像,並把它們顯示到計算機屏幕上。這個新的空間是如此之豐富,使西姆斯大為震驚。由於基元組隻包含邏輯部件,西姆斯的LISP字母表確保了大部分方程所繪出的圖像都具有某種模式。屏幕上不會再充斥著模糊灰暗的圖像,無論西姆斯“漫步”到哪裏,都能看到令人驚豔的風景。“藝術”仿佛成了信手拈來之物。一開始,屏幕上布滿了狂野的紅色和藍色之字形線條。下一刻,屏幕的上部點綴著黃色的斑斑點點。之後,斑點下出現一條朦朧的水平線,再接著,是重筆墨的波浪伴著藍色的海天一線。再然後,斑點洇成毛莨花般嫩黃的圓暈。幾乎每一輪畫麵都展現出驚人的創意。一小時內,上千張美輪美奐的圖像被從其藏身之所喚起,第一次也是最後一次展現在我們麵前。這好比站在世上最偉大的畫家身後,觀看他創作從不重複主題和風格的速描。
當西姆斯選中一幅圖畫,繁衍出其變種,再從中選取另一幅時,他所進化的不隻是圖像。撇開表象,西姆斯進化的是邏輯。一個相對較小的邏輯方程能繪製出一幅讓人眼花繚亂的複雜圖畫。西姆斯的係統曾經進化出下麵這段邏輯代碼:
(cos (round (atan (log (i y) (+ (bump (+ (round x y) y) #(0.46 0.82 0.65) 0.02 #(0.1 0.06 0.1) #(0.99 0.06 0.41) 1.47 8.7 3.7) (crad (round (+ y y) (log (i x) (+ (i y) (round (+ y x) (bump (ed-ifs (round y y) y 0.08 0.06 7.4 1.65 6.1 0.54 3.1 0.26 0.73 15.8 5.7 8.9 0.49 7.2 15.6 0.98) #(0.46 0.82 0.65) 0.02 #(0.1 0.06 0.1) #(0.99 0.06 0.41) 0.83 8.7 2.6))))) 3.1 6.8 #(0.95 0.7 0.59) 0.57))) #(0.17 0.08 0.75) 0.37) (vector y 0.09 (cos (round y y)))))
這個方程在西姆斯的彩色屏幕上繪出了一幅引人注目的圖畫:北極的落日餘輝映照在兩根冰柱上,冰柱晶瑩剔透;遠方的地平線淡然而寧靜。這可堪比一個業餘畫家的大作哩。西姆斯告訴我說:“這個方程的進化從頭到尾僅用了幾分鍾時間——如果是人類有意為之的話,可比這個費功夫多了。”
但是西姆斯卻無從解釋方程背後的邏輯以及它為何會繪出一幅冰的圖畫。在這個方程麵前,西姆斯和我們一樣茫然無知。方程所隱藏的邏輯已經無法用簡單明了的數學來破解。
17.3 無心插柳柳成蔭
真正開始將邏輯程序的進化從理論付諸實踐的是約翰·柯紮。他是斯坦福大學計算機科學係的教授,約翰·霍蘭德的學生。他和霍蘭德的另外幾個學生一起使20世紀60~70年代一度被冷落的霍蘭德遺傳算法重放光芒,進入到80年代末並行算法的複興時期。
與“藝術家”西姆斯不同,柯紮並不滿足於單純地探索可能之方程的空間,他想進化出能夠解決特定問題的最佳方程。舉個牽強一點的例子,假設在所有可能的圖像中有一幅圖會吸引奶牛凝視它,並由此提高產奶量。柯紮的方法就可以進化出能繪製這一特定圖像的方程。在這個例子中,柯紮會對那些所繪圖像哪怕隻是輕微增加產奶量的方程給予賞獎,直至牛奶產量無法再得到提高。當然,柯紮所選的問題要比這實際得多,譬如,找出一個能操縱機器人移動的方程。
但從某種意義上來說,他的搜索方式與西姆斯以及其他研究者的相似。他也在由可能存在的計算機程序組成的博爾赫斯圖書館內搜尋——隻不過不是毫無目的地東瞧瞧西看看,而是去尋找解決特定實際問題的最佳方程。柯紮在《遺傳編程》(Geiming)一書中寫道:“這些問題的求解過程可以重新表述為在可能存在的計算機程序中搜索最合適的單個計算機程序。”
柯紮通過繁衍“找到”方程的想法之所以被認為有悖常理,和計算機專家對雷的進化方案嗤之以鼻的理由是一樣的。過去,人人都“知道”邏輯程序是脆弱的,不能容忍任何變動。計算機科學理論中,程序隻有兩種狀態:(1)無故障運行;(2)修改後運行失敗。第三種狀態——隨機修改後還能運行——是不可能的。程序輕度出軌被稱為程序漏洞,這是人們耗費大量財力試圖避免的。專家們過去認為,如果計算機方程漸進式改良(進化)真有可能的話,也肯定隻會出現在少數罕見領域或專門類型的程序中。
然而,人工進化的研究成果出乎意料地表明,傳統觀點大錯特錯了。西姆斯、雷和柯紮都有絕妙的證據來證明,邏輯程序是可以通過漸進式改良進化的。
柯紮的方法基於一種直觀判斷,即如果兩個數學方程在解決一個問題時多少有些效果,那麼它們的某些部分就是有價值的。如果這兩者有價值的部分能被重新整合成一個新程序,其結果可能比兩個母程序中的任何一個都更有效。柯紮數千次地隨機重組兩個母程序的各個部分,希望從概率上講,這些組合中能包含一個程序,對母程序中有價值的部分做了最優安排,因而能更好地解決問題。