一群平地山羊在獵人數代的圍剿之下跑到山頂生活,逐漸進化成山地山羊。海灘上五角星形狀的貝殼總是被人揀去,經過十數萬代的演化後,幾乎所有的貝殼都變成了圓形。

生物和進化的力量是強大的。這兩個故事表明了,只要有足夠有趣的篩選法則,生物會進化成很奇妙的樣子。

真正將山羊或者貝殼繁殖數十萬代需要很長很長時間,而使用電腦中飼養的電子生物進行模擬可以大大縮短進化時間。

為了求函數sin(10 * x) * x + cos(2 * x) * x在區間[0,5]上的極大值,便可以先養一群紫色的點,讓這群點生活在這段函數圖像之中,不斷向著高處進化。

要通過100個三角形來生成firefox或者chrome的圖標,也可以養一群由100個三角形構成的圖片,讓這群圖片向著目標進化。

在動畫片《瑞克和莫迪》中,瑞克通過創造一個微宇宙,讓整個微宇宙中的所有人不斷踏腳踏板來產生能量為自己的汽車電池供電。這聽起來挺混蛋的,但是遺傳演算法差不多在干同樣的事情——在電腦中創造一個種群,讓他們互相交配、變異、優勝劣汰,繁衍數萬代。這些種群中的個體死也不會知道,自己豐富多彩充滿了交配和變異的一生只是為了解決某個數值優化問題而存在的,並且得到的解還不是最優解。

唯有趙忠祥老師才能為二進位數字構成的小動物們的一生附上生命的意義:

數百年以來,紫斑山羊群落一直生活在sin(10 * x) * x + cos(2 * x) * x山谷。現在正是山谷的春季,羊群遍布在區間[0,5]的每一個角落,四處尋找食物。羊寶寶0110010110誕生在去年冬天,現在正好奇地打量著家門外剛剛孵化和蘇醒的世界。它在出生時只有十個位元組長度,由4個0和6個1組成。有了溫暖的陽光和充足的乾草,它就可以快快長大,迎來自己的變異與交換,獲得新的性狀。

羊爸爸0111100110爬上坐標2處的山峰,尋找一家人每日所需。黃花苜蓿是一種多年生的草本植物,也是小羊的最愛。這些植物廣泛分布於山坡的頂部和朝陽面,倒卵形或長倒卵形的葉子富含蛋白質,可以為小羊一家提供一天的養分。然而今天,羊爸爸的運氣不好,僅僅找到了被啃食過的草根和三葉草種子。

小羊在半歲左右便可以性成熟,每年的夏天都是交配的季節。公羊和母羊交換彼此的DNA片段,組合出新的、適合生存的性狀。不適合生存的羊將會被大自然無情地淘汰。

變異是羊群中偶爾會發生的現象。小羊的哥哥0101111101在去年的秋天發生了變異,其中的0001序列變成了1101。因此,他獲得了更加強健的腿部肌肉和更加有攻擊力的羊角。正是這樣的變異,讓他在去年的秋天逃過了獵人的圍捕。

區間[0,1]坡度平緩,食物豐富,很適合羊群嬉戲。小羊0110010110第一次出遊需要媽媽的陪伴。在小羊躺在地上打滾兒的同時,羊媽媽警惕地注視著周圍。儘管陽光明媚,春光燦爛,但是一頭不懷好意的長角成年公羊仍會成為未成年小羊們的威脅。

然而,真正的威脅並不源於其他羊群,而是來自於山下的獵人。生活在山腳下的亞美利加人是世代的獵人,孩童十歲後便要跟著成年人去捕獵。亞美利加人的腳趾和跖骨比其他人種要長,更加適合在平原上奔跑追逐羊群。每年秋季是捕獵的季節,山谷中的羊群要麼爬過陡峭的山坡躲到山頂,要麼被勤勞的獵人捕捉回家成為過冬的食物。久而久之,經過數年的進化,羊群們更加傾向於生活在海拔更高的地方。

人與羊的故事年年在發生,年年在重複。幾百年後,上帝降臨山谷,抓去了生活在最高處的羊,記錄了棲息地的海拔高度,得到了函數在區間上的極大值。得到數據之後,上帝隨手扔顆隕石,摧毀了紫斑山羊、摧毀了亞美利加獵人、摧毀了整個山谷。

The end.


推薦閱讀:
查看原文 >>
相关文章