第一部分:適應性計算

恆常月發表於2013-08-20

現代製造業開始於人類意識到零件的可替換性,這可以追溯到十五世紀約翰內斯•谷登堡活字印刷術的發明[1]。十八世紀,製造商們變得更加關注零件部分的精確性,當時伊萊•惠特尼發明的步槍可更換零件精確到了1毫米的誤差[2]。如今常規的機械公差在10微米左右,精確度比惠特尼的提高了100倍;光學公差控制在了奈米尺度,比惠特尼精確了1百萬倍。現代的每一個設計者都有機會為手頭的任務構造極為精細的機器。

主流的計算科學建立在演算法的基石之上。演算法是一種能夠確保用特定的效能正確地響應一連串刺激的方法。如果把演算法比喻為食譜,它上面記錄瞭如何根據給定的烹調原料、以推薦的操作次序烹飪出一道預期的佳餚。回到演算法上,比如歸併排序將集合中的每一項排序,而不考慮每一項代表哪一類物件[3]。

儘管演算法在計算中經常扮演著核心的角色,但有些問題壓根沒法通過傳統演算法實現。考慮下面這麼一個問題:你要在南極生存,且保證裝置在任何溫度包括低至負60攝氏度(負76華氏度)的情況下都能正常運作。你知道你的庇護所和衣服可能遭遇各種不測,那麼你要怎麼樣做才能讓你和你的裝置倖免於難?一個基於演算法的計算科學家會抱怨這樣的問題幾乎是不可解的:如果來個巨大的災難要存活下來幾乎不可能。但如果讓你設計一個在大部分情況下能夠存活下來的解決方案呢?這時候你就需要在設計中考慮到適應性或者它的遠親——進化。

早在1954年,在普林斯頓高等研究院工作的數學家尼爾斯•奧勒•貝呂舍裡 利用計算機模擬了一個進化的簡單模型[4]。15年後,德國數學家英戈•呂陳伯格和漢斯 - 保羅•施韋費爾利用進化提高了解決複雜工程問題的設計效果[5]。

在自然世界,進化作用於物種;而在計算世界,進化應用於設計。這兩方面進化都產生了美妙的產物,且在沒有得益於有意識的設計者的情況下。1975年,密歇根大學的約翰•霍蘭寫出了一本里程碑的著作:《自然和人工系統的適應》[6]。在這本書中它提示了不同進化設計的共性,並在統一的數學框架下使他們得到提高。霍蘭的框架成為了現代遺傳演算法(有時也被稱為進化演算法)的理論基礎。它反覆執行下面的流程:

  1. 選擇一些可能的設計方案作為候選群體;

  2. 評估每一個個體的適應值,比如基於成本或者能耗;

  3. 記錄具有最高適應值的設計;

  4. 選擇最適應的候選設計生成新的群體,採取一種隨機的方式輕微地調整這些設計,或者組合不同的候選設計產生大的改變。

假設你使用這種方法設計一輛汽車。如果一個好的設計包括一個複合底盤和六缸引擎,另一個好的設計包含鋁製的底盤和電動引擎,那麼組合的設計可能會是一個複合底盤和電動引擎。作為親本的設計使得子代能組合得到它們的一部分優良特性[7]。

儘管進化可以導向更好的設計,但微小的適應只需要很小的改動。比如你可以在不經過進化的情況下學會騎自行車和變戲法。在這個層次適應反倒可能會招致困難和錯誤,但個體這時候就沒必要改變自己。羅德尼 - 布魯克斯[8]將適應性應用在了運動之中。從二十世紀八十年代開始,他使用“適應性”設計了能夠智慧移動的機器人。自從開始從事這項開創性的工作,他從昆蟲、大象和壁虎身上得到了許多靈感。在這過程中, 他提煉出怎樣讓機器人變得“聰明”起來的精髓。

又假設你要設計一個軟體控制在另一個星球表面駕駛的機器人。除了知道地面是崎嶇不平的,你不知道它具體的任務;你知道它所處的環境非常不利,但又不知道任何具體的資訊。事實上,你所面對的不僅僅是未知,還有被NASA噴氣推進實驗室的格倫•裡夫斯稱為一無所知的未知——你甚至不知道將如何去歸類它們[9]。設計一個漫遊者傳送上去,然後抱著僥倖心理希望它一切順利這是不可行的。事實上,在當前狀態設計的藝術是在百萬裡外為它做出診斷。為了做到這點,裡夫斯設計出了這樣的飛船裝置,它就像一個健談的病人,時刻告知自己目前的狀況,並在感覺良好時及時報告。當這類裝置“生病”時,他的團隊會通過補丁的方式傳送電子修復方案,或者對軟體做出小的改動。這種裝置通過補丁代替錯誤的程式碼,就像病人使用假肢代替它癱瘓了的肢體。

也在噴氣推進實驗室工作的阿德里安•斯多葛想象未來的航天器能治癒自己[10]。考慮這樣的挑戰:星球表面的晝夜溫差可能會非常巨大:從極度嚴寒的負133攝氏度(負207華氏度)到暖和的27攝氏度(80華氏度)。人可以根據不同溫度更換衣服,電路沒法給自己“添衣加被”,但它可以改變自己的電流。斯多葛設計了可以進化出解決方案的電路。斯多葛夢想著有一天通過進化適應裝備可以生存100年以上。

有些人會爭論進化演算法稱不上真正的演算法,因為它不能保證效能和正確性。確實如此。遺傳演算法並沒有給出這些擔保,但經常會給出意想不到的優良設計解決用常規演算法無能為力的問題。路易斯•奎爾斯使用它設計出了為極端環境和空間而定製的核電廠[11]。他探訪了一些專家瞭解諸如此類的特性——核電廠要產生多少能量、為太空船供能需要多少負荷,然後實現這樣一種設計——為特定的需求在這些優先考慮的特性中選擇一個折中方案。為做到這點,他必須在數萬億設計方案中進行候選。通過手工計算他只能在他的查詢中探索部分可能良好的設計。而且他知道出於日漸增長的情感上的偏好,他經常會回到之前的設計中。相反,當他使用遺傳演算法進行程式設計時,程式有時會發現他從未考慮到的但花費更少或者效能更佳的設計。另外當特性需求改變時,他可以讓計算機進行另一種設計,而不會受到任何情感偏好的影響。在未來很有可能大部分複雜的工程製品會以這種方式設計。

傑克•勒沃爾和阿姆魯特•巴哈拉勃將這個相似的理念應用於金融[12],並用遺傳演算法設計規則幫助他們交易國庫債券。工程師使用複雜的物理規則定義適應性,勒沃爾和巴哈拉勃則使用了最基本的金融措施:在保證相對低風險的情況下獲得高利潤。他們使用了歷史記錄判斷哪個規則是良好的。搜尋空間(即可能規則的數目)規模巨大無比,雖然他們不理解遺傳演算法所產生的規則,但這個方法卻相當可行。

南希•勒菲森也和自然計算親密接觸,在使用高新技術後它變得更加人性化。她考慮了工程上的一系列鬼斧神工之作——發電廠,導彈防禦和宇宙飛船,嘗試讓它們變得更加安全。她以從事計算開始她的生涯,但離開前往了新幾內亞島的叢林,後來又對認知心理學產生了濃厚的興趣,直到重新回到計算科學的一個全新領域。她相信系統安全需要依賴於適應性:一旦錯誤發生,系統必須可以補償過失。在勒菲森看來,系統不像特定軟體一樣有明確的邊界,它貫穿了人類的整個管理鏈條。當計算元素與生命危急之下的人類高度結合,適應性可以被視為多層次的反饋和修飾系統。在底層發生的錯誤應當能被人類或者系統高層得到彌補。她的方法試圖確保系統的每一層次都能檢測它下一層次的問題並做出適當的響應。基於這個淺顯的理念,這個方法已經用於防止導彈發射意外和空運事故。

[1] ]約翰內斯•谷登堡(Johannes Gensfleisch zur Laden zum Gutenberg,1398-1468),德國發明家,第一位發明活字印刷術的歐洲人。

[2]伊萊•惠特尼(Eli Whitney,1765-1825)是活躍於美國18世紀末至19世紀初的一位發明家、機械工程師和機械製造商。

[3] 歸併(Merge)排序法將兩個(或兩個以上)有序表合併成一個新的有序表,即把待排序序列分為若干個子序列,每個子序列是有序的。然後再把有序子序列合併為整體有序序列。

[4] 尼爾斯•奧勒•貝呂舍裡(Nils Aall Barricelli, 1912-1993),挪威和義大利數學家。他早期在合成和進化上的計算輔助實驗被認為是人工生命研究的開創性工作。

[5] 英戈•呂陳伯格(Ingo Rechenberg, 1934-)漢斯 - 保羅•施韋費爾(Hans-Paul Schwefel,1940-)他們倆都是德國計算科學家,被認為是進化計算和人工進化的先驅。

[6] 約翰•霍蘭(John Holland,1929–),進化演算法的奠基人之一;

[7] 在生物體中,雙親的雜交一代自交得到發生染色體交換的子代,每個子代隨機組合了雙親的一部分染色體;在遺傳演算法中,可以把每種設計的各種特徵值的線性排列視作一條染色體,在重組時得到不同組合的子代。

[8] 羅德尼 - 布魯克斯(Rodney Brooks,1954-)澳大利亞機器人專家,將行動主義者的方法廣泛應用於機器人而知名。

[9] 噴氣推進實驗室 (Jet Propulsion Laboratory, JPL)是美國一個以無人飛行器探索太陽系的中心,其飛船已經到過全部已知的大行星,是位於加利福尼亞州帕薩迪那美國國家航空航天局的一個下屬機構,負責為美國國家航空航天局(NASA)開發和管理無人空間探測任務,行政上屬於加州理工學院管理,始建於1936年。格倫•裡夫斯(Glenn Reeves),JPL軟體工程師。

[10] 阿德里安•斯多葛(Adrian Stoica),JPL工程師,領導了為未來空間技術進行機器人技術研發的團隊。 個人網址是http://adrianstoica.com/。

[11] 路易斯•奎爾斯(Louis Qualls),從事“自然計算”的科學家。

[12] 傑克•勒沃爾(Jake Loveless)和阿姆魯特•巴哈拉勃(Amrut Bharambe),金融分析師。

[13] 南希•勒菲森(Nancy Leveson),航天航空教授,個人網址是http://sunnyday.mit.edu/。

相關文章