今次的問題涉及兩個概念,一個叫做 Ultimate Boeing 747 gambit ,另一個叫 weasel program 。
先講甚麼叫 Ultimate Boeing 747 gambit 。此言論是用以「證明」智能設計論。有人認為,生物起源於地球的機會率,等同於暴風吹襲垃圾站,垃圾合成了一架 Boeing 747 客機。聽上去好像很有理,地球本來只是有岩石和海,就像一個垃圾站。就算暴風吹襲這個垃坡站 46 億年,由暴風隨機地將垃圾分解、組合,也沒有可能將這些垃圾變成一架 747 客機吧?故此,一定是有個具智能的設計者 ((有些人會叫這個設計者做「神」)) ,根據某種藍圖,把垃圾分解和組合,才能製造出一架 747 客機。 ((之後的問題是誰人設計此設計者?))
但事實是否如此?演化理論是否等同於「暴風隨機地將垃圾分解、組合」?如果有如此想法,是對演化的誤解。原因是,演化有兩個重要的概念,在如此 Ultimate Boeing 747 gambit 中沒有呈現出來,分別是 error-prone replication 和 natural selection 。只要加入如此兩個概念,就知道演化理論並非「暴風隨機地將垃圾分解、組合」。
先要假設垃圾組成的東西,是會根據自己的樣子,複製出與自己一樣的後代,是一個 replicator 。 ((事實上已經有科學證據證明,由無機化合物,是可以經過化學反應變成 replicator 。)) 而每次複製,總有發生機會微少但隨機的錯誤。實制上生物基因會隨機地異變(mutate) ,異變後的結果。會經過複製傳給後代。此為 error-prone replication 。
而 natural selection ,並不是隨機的。例如細菌可被抗生素殺害,而細菌是一個 error-prone replicator 。在一個常用抗生素的環境,沒有抗藥性基因的細菌,會被抗生素殺害,繁衍後代的機會極低。但是,經過基因異變突然出現抗藥性基因的細菌,卻能在常用抗生素的環境繼續生存,繁衍後代的機會較高。如此選擇完全沒有外力的影響,純粹是環境使然。用一種比較親和但可能科學上不太準確的說法,是環境為每隻細菌打分數,較適合在該環境生存的生物,分數較高,亦較有機會繁衍後代。
以上兩點背後都無需智能設計者,亦與「暴風隨機地將垃圾分解、組合」相去甚遠。 Dawkins 曾經以一個名為 Weasel program 的 computer simulation 證明此一點。 ((原來的 Weasel program 與我的 Weasel program 有點不同。)) 假設有 17 個空位,以 underscore 代表
_________________
有一部電腦,隨機的在這些空格打入 A 至 Z 或 0 至 9 ,例如
AY8QJRZ1199ZUIASH
電腦隨機的在此 17 個空位打入 "ULTIMATEBOEING747" 的機會,是 3617 分之一。假設此電腦每秒可以打一百句。要隨機亂打 3617 次撞中所需時間,是要 9 x 1016 年。介紹一個新 unit ,叫做 gigayear 。即是 109 年,十億年。電腦要九千萬 gigayears 才可以撞中。由宇宙大爆炸至今才經歷了約 14 gigayears 。故此,我認同幾乎是沒有可能撞中的。故此,「暴風吹襲垃圾站,垃圾合成了一架 Boeing 747 客機」幾乎是沒有可能。
但是,此句的原意是「生物起源於地球的機會率,等同於暴風吹襲垃圾站,垃圾合成了一架 Boeing 747 客機」。只要加入 error-prone replication 和 natural selection 的概念,「生物起源於地球」和「暴風吹襲垃圾站,垃圾合成了一架 Boeing 747 客機」的機會率又是否等同?
假設同樣有 17 個空位。打入了一句話後,此句話會複製 100 個後代,而當中有 5% 機會出現複製錯誤 (replication error, mutation ) 。例如原句是 INTELLIGENTDESIGN ,它會複製成 100 個後代。在複製的時候,有 5% 機會出現 replication error 。故此 INTELLIGENTDESIGN 的 100 個後代當中,應有 95 個是和原句一樣,有 5 個可能變成如 7NTELLIGENTDESIGN 或 INYELLHGENTDESI0N 。此一百個後代,會計算它們與 ULTIMATEBOEING747 的相似程度評分,就好似上述環境為後代打分數。最高分數的後代存活下來,再生產第二代、第三代、... 如此方法,又是否沒可能產生 ULTIMATEBOEING747 一句?
以下的 R code 就是進行以上的模疑。昨天用過了 R 的 OOP ,今次用另一種 Programming paradigm ,是 functional programming 。 ((其實 target 和 origin 兩個 variable 也不是必要這樣儲在 memory 。)) 甚至用上了曾經好驚的 recursion 。
Source code: fxWeasel
以下是模疑的 output
GEN 1: INTILLIGENTDESIGN score: 0.118
GEN 2: UNTILLIGENTDESIGN score: 0.176
GEN 3: UNTILLIGENTDESIGN score: 0.176
GEN 4: ULTILLIGENTDESIGN score: 0.235
GEN 5: ULTILLIGENTDESIGN score: 0.235
GEN 6: ULTILLIGENTDESIGN score: 0.235
GEN 7: ULTILLIGENTDEGIGN score: 0.294
GEN 8: ULTILLIGEOTDEGIGN score: 0.353
GEN 9: ULTILLIGEOTDEG7GN score: 0.412
GEN 10: ULTILLIGBOTDEG7GN score: 0.471
GEN 11: ULTILLIGBOTDEG7GN score: 0.471
GEN 12: ULTILLIGBOT7EG7G7 score: 0.529
GEN 13: ULTILLTGBOT7EG7G7 score: 0.588
GEN 14: ULTILLTGBOE7EG7G7 score: 0.647
GEN 15: ULTILLTGBOE7EG7G7 score: 0.647
GEN 16: ULTILLTGBOE7EG7G7 score: 0.647
GEN 17: ULTILATGBOE7EG7G7 score: 0.706
GEN 18: ULTILATGBOE7NG7G7 score: 0.765
GEN 19: ULTILAT8BOE7NG7G7 score: 0.765
GEN 20: ULTILAT8BOE7NG7G7 score: 0.765
GEN 21: ULTILAT8BOE7NG7G7 score: 0.765
GEN 22: ULTILAT8BOE7NG7G7 score: 0.765
GEN 23: ULTILAT8BOE7NG7G7 score: 0.765
GEN 24: ULTINAT8BOEING7G7 score: 0.824
GEN 25: ULTINAT8BOEING7G7 score: 0.824
GEN 26: ULTINAT8BOEING7G7 score: 0.824
GEN 27: ULTINAT8BOEING7G7 score: 0.824
GEN 28: ULTINATQBOEING7G7 score: 0.824
GEN 29: ULTINATQBOEING7P7 score: 0.824
GEN 30: ULTINATQBOEING7P7 score: 0.824
GEN 31: ULTINATEBOEING7P7 score: 0.882
GEN 32: ULTINATEBOEING7P7 score: 0.882
GEN 33: ULTINATEBOEING7P7 score: 0.882
GEN 34: ULTINATEBOEING7P7 score: 0.882
GEN 35: ULTINATEBOEING7P7 score: 0.882
GEN 36: ULTIQATEBOEING7P7 score: 0.882
GEN 37: ULTIQATEBOEING7P7 score: 0.882
GEN 38: ULTIQATEBOEING7P7 score: 0.882
GEN 39: ULTIQATEBOEING7P7 score: 0.882
GEN 40: ULTIQATEBOEING7P7 score: 0.882
GEN 41: ULTIQATEBOEING7P7 score: 0.882
GEN 42: ULTIQATEBOEING7P7 score: 0.882
GEN 43: ULTIQATEBOEING7P7 score: 0.882
GEN 44: ULTIQATEBOEING7P7 score: 0.882
GEN 45: ULTIQATEBOEING7P7 score: 0.882
GEN 46: ULTIQATEBOEING7P7 score: 0.882
GEN 47: ULTIQATEBOEING797 score: 0.882
GEN 48: ULTIQATEBOEING797 score: 0.882
GEN 49: ULTIQATEBOEING797 score: 0.882
GEN 50: ULTIQATEBOEING797 score: 0.882
GEN 51: ULTIQATEBOEING797 score: 0.882
GEN 52: ULTIQATEBOEING797 score: 0.882
GEN 53: ULTIQATEBOEING797 score: 0.882
GEN 54: ULTIQATEBOEING797 score: 0.882
GEN 55: ULTIPATEBOEING797 score: 0.882
GEN 56: ULTIPATEBOEING797 score: 0.882
GEN 57: ULTIGATEBOEING797 score: 0.882
GEN 58: ULTIGATEBOEING797 score: 0.882
GEN 59: ULTIGATEBOEING797 score: 0.882
GEN 60: ULTIGATEBOEING797 score: 0.882
GEN 61: ULTIGATEBOEING797 score: 0.882
GEN 62: ULTIGATEBOEING797 score: 0.882
GEN 63: ULTIGATEBOEING797 score: 0.882
GEN 64: ULTI1ATEBOEING797 score: 0.882
GEN 65: ULTI1ATEBOEING797 score: 0.882
GEN 66: ULTI1ATEBOEING797 score: 0.882
GEN 67: ULTI1ATEBOEING797 score: 0.882
GEN 68: ULTI1ATEBOEING797 score: 0.882
GEN 69: ULTI1ATEBOEING797 score: 0.882
GEN 70: ULTI1ATEBOEING797 score: 0.882
GEN 71: ULTI1ATEBOEING797 score: 0.882
GEN 72: ULTI1ATEBOEING797 score: 0.882
GEN 73: ULTI1ATEBOEING797 score: 0.882
GEN 74: ULTI1ATEBOEING797 score: 0.882
GEN 75: ULTI1ATEBOEING797 score: 0.882
GEN 76: ULTI1ATEBOEING797 score: 0.882
GEN 77: ULTI1ATEBOEING797 score: 0.882
GEN 78: ULTI1ATEBOEING797 score: 0.882
GEN 79: ULTI1ATEBOEING797 score: 0.882
GEN 80: ULTI1ATEBOEING797 score: 0.882
GEN 81: ULTI1ATEBOEING797 score: 0.882
GEN 82: ULTI1ATEBOEING797 score: 0.882
GEN 83: ULTI1ATEBOEING7C7 score: 0.882
GEN 84: ULTI1ATEBOEING7C7 score: 0.882
GEN 85: ULTI1ATEBOEING7C7 score: 0.882
GEN 86: ULTI1ATEBOEING7C7 score: 0.882
GEN 87: ULTI1ATEBOEING7C7 score: 0.882
GEN 88: ULTI1ATEBOEING7C7 score: 0.882
GEN 89: ULTI1ATEBOEING7T7 score: 0.882
GEN 90: ULTI1ATEBOEING7T7 score: 0.882
GEN 91: ULTI1ATEBOEING7T7 score: 0.882
GEN 92: ULTI1ATEBOEING747 score: 0.941
GEN 93: ULTI1ATEBOEING747 score: 0.941
GEN 94: ULTI1ATEBOEING747 score: 0.941
GEN 95: ULTI1ATEBOEING747 score: 0.941
GEN 96: ULTI1ATEBOEING747 score: 0.941
GEN 97: ULTI1ATEBOEING747 score: 0.941
GEN 98: ULTI1ATEBOEING747 score: 0.941
GEN 99: ULTI1ATEBOEING747 score: 0.941
GEN 100: ULTI1ATEBOEING747 score: 0.941
GEN 101: ULTI1ATEBOEING747 score: 0.941
GEN 102: ULTI1ATEBOEING747 score: 0.941
GEN 103: ULTI1ATEBOEING747 score: 0.941
GEN 104: ULTI1ATEBOEING747 score: 0.941
GEN 105: ULTI1ATEBOEING747 score: 0.941
GEN 106: ULTI1ATEBOEING747 score: 0.941
GEN 107: ULTI1ATEBOEING747 score: 0.941
GEN 108: ULTI1ATEBOEING747 score: 0.941
GEN 109: ULTIMATEBOEING747 score: 1
Final: ULTIMATEBOEING747 No. of generations: 109
只需要幾秒就可以由 INTELLIGENTDESIGN 變成 ULTIMATEBOEING747 。調節 mutationRate 和 numOffspring 兩變量,甚至 origin 的文字,可作不同情況的模疑。但大多數的情況 (mutationRate >= 0.01, numOffspring >= 15) 也能在 1000 代之內產生出結果。
如此模疑可見: