丑的

丑的
chouox.blog.tianya.cn   [复制]  [收藏]

To Be Or Not To Be,这不是个问题!
作者:丑的 提交日期:2009-6-22 15:43:00 正常| 访问量:851

二十世纪初,法国数学家博雷尔(Émile Borel)明确提出一个古已有之的思想实验,这个东西后来被称为无限猴子定理(Infinite monkey theorem),该定理在英语世界中通常是这样表述的:若给予无限时间,一只猴子就总能在打字机上随机敲出莎士比亚(William Shakespeare)的全部作品。由于现实中几乎不存在“无限”,打字的猴子就成为嘲笑不可能事件的专用名词,反进化论者自然也会拿来用。


二十世纪五十年代,人们开始研究关于进化论的计算机模拟,到了六十年代,作为研究成果之一,遗传算法(Genetic algorithm)已被正式提出。于是,英国著名科普作家道金斯(Richard Dawkins)在1986年出版的《盲眼钟表匠》(The Blind Watchmaker)中就介绍了一个有趣的程序。无独有偶,1984年美国的哈迪森(Richard Hardison)在其课堂上也讲授过一个有趣的程序,这个程序公布在其1985年出版的《巨人肩膀之上》(Upon the Shoulders of Giants)中。哈迪森的名气不算大,但他的朋友,《怀疑》(Skeptic)主编舍默(Michael Shermer)在其1997年出版的《人们为什么相信一些稀奇古怪的东西》(Why People Believe Weird Things)中引用了他的程序,而这又被《科学美国人》(Scientific American)主编伦尼(John Rennie)的一篇广为流传的文章引用,这个文章就是《科学美国人》2002年第7期上的《对创造论者屁话的15个回答》(15 Answers to Creationist Nonsense)。


既然是让猴子敲出莎士比亚的作品,道金斯和哈迪森各自引用了《哈姆雷特》(Hamlet)剧本中的一个短语做为程序处理的例子,前者是"METHINKS IT IS LIKE A WEASEL",后者是"TO BE OR NOT TO BE",除此之外,两人的做法几乎没有差别,下面不妨就以哈迪森的为例。


我根据算法描述写程序体验了一下,也为了直观起见,这里先列出某次“进化”的全貌:随机生成的序列"FKPZPQLUHEMSY",经过298次的“变异”,最终演变为序列"TOBEORNOTTOBE"。其中,第一列为累计的“变异”次数,这里将每一个字母发生一次随机变化称做一次“变异”。为了节省篇幅,每一行表示的可能是许多次“变异”,即当前序列中所有“不想要的”字母都“变异”了一次;第二列为“进化”出的随机序列;第三列为被“自然选择”保留下来的碎片。程序的C++语言代码也顺便列在了后面,稍加扩展即可做迭代次数的统计。为了排版规整,每行代码前面加了"//"作为行首占位符。

000     FKPZPQLUHEMSY   _____________
013     XPBVTKTQICLHZ   __B__________
025     BBBDLISYSTFWJ   __B______T___
036     GCBTLLYVPTZUX   __B______T___
047     HMBHYMVRFTENI   __B______T___
058     XLBCUNYJNTIVE   __B______T__E
068     HOBDYIHUITEVE   _OB______T__E
077     NOBUVLTQHTTVE   _OB______T__E
086     ZOBIXHYGCTANE   _OB______T__E
095     MOBQOKRXDTVTE   _OB_O____T__E
103     NOBLOLIHXTRSE   _OB_O____T__E
111     ZOBZOJULYTAME   _OB_O____T__E
119     XOBVOJBOHTPJE   _OB_O__O_T__E
126     SOBBOKZOTTXNE   _OB_O__OTT__E
132     OOBDOCUOTTPSE   _OB_O__OTT__E
138     KOBVOSROTTXVE   _OB_O__OTT__E
144     TOBDOTIOTTUBE   TOB_O__OTT_BE
148     TOBKOPSOTTRBE   TOB_O__OTT_BE
152     TOBFOUOOTTGBE   TOB_O__OTT_BE
156     TOBIOEHOTTHBE   TOB_O__OTT_BE
160     TOBSOLAOTTMBE   TOB_O__OTT_BE
164     TOBJORMOTTMBE   TOB_OR_OTT_BE
167     TOBIORUOTTFBE   TOB_OR_OTT_BE
170     TOBCORJOTTLBE   TOB_OR_OTT_BE
173     TOBCORIOTTMBE   TOB_OR_OTT_BE
176     TOBZOREOTTMBE   TOB_OR_OTT_BE
179     TOBKOROOTTJBE   TOB_OR_OTT_BE
182     TOBAORLOTTJBE   TOB_OR_OTT_BE
185     TOBAORZOTTMBE   TOB_OR_OTT_BE
188     TOBZORSOTTWBE   TOB_OR_OTT_BE
191     TOBWORPOTTHBE   TOB_OR_OTT_BE
194     TOBVORIOTTJBE   TOB_OR_OTT_BE
197     TOBEORBOTTYBE   TOBEOR_OTT_BE
199     TOBEORUOTTJBE   TOBEOR_OTT_BE
201     TOBEORQOTTABE   TOBEOR_OTT_BE
203     TOBEORXOTTMBE   TOBEOR_OTT_BE
205     TOBEORMOTTHBE   TOBEOR_OTT_BE
207     TOBEORMOTTZBE   TOBEOR_OTT_BE
209     TOBEORHOTTNBE   TOBEOR_OTT_BE
211     TOBEORROTTFBE   TOBEOR_OTT_BE
213     TOBEORSOTTCBE   TOBEOR_OTT_BE
215     TOBEORUOTTXBE   TOBEOR_OTT_BE
217     TOBEOREOTTQBE   TOBEOR_OTT_BE
219     TOBEORLOTTDBE   TOBEOR_OTT_BE
221     TOBEORQOTTWBE   TOBEOR_OTT_BE
223     TOBEORNOTTKBE   TOBEORNOTT_BE
224     TOBEORNOTTUBE   TOBEORNOTT_BE
225     TOBEORNOTTPBE   TOBEORNOTT_BE
226     TOBEORNOTTUBE   TOBEORNOTT_BE
227     TOBEORNOTTGBE   TOBEORNOTT_BE
228     TOBEORNOTTGBE   TOBEORNOTT_BE
229     TOBEORNOTTXBE   TOBEORNOTT_BE
230     TOBEORNOTTNBE   TOBEORNOTT_BE
231     TOBEORNOTTTBE   TOBEORNOTT_BE
232     TOBEORNOTTYBE   TOBEORNOTT_BE
233     TOBEORNOTTGBE   TOBEORNOTT_BE
234     TOBEORNOTTDBE   TOBEORNOTT_BE
235     TOBEORNOTTPBE   TOBEORNOTT_BE
236     TOBEORNOTTYBE   TOBEORNOTT_BE
237     TOBEORNOTTTBE   TOBEORNOTT_BE
238     TOBEORNOTTMBE   TOBEORNOTT_BE
239     TOBEORNOTTYBE   TOBEORNOTT_BE
240     TOBEORNOTTRBE   TOBEORNOTT_BE
241     TOBEORNOTTRBE   TOBEORNOTT_BE
242     TOBEORNOTTLBE   TOBEORNOTT_BE
243     TOBEORNOTTXBE   TOBEORNOTT_BE
244     TOBEORNOTTRBE   TOBEORNOTT_BE
245     TOBEORNOTTABE   TOBEORNOTT_BE
246     TOBEORNOTTLBE   TOBEORNOTT_BE
247     TOBEORNOTTLBE   TOBEORNOTT_BE
248     TOBEORNOTTNBE   TOBEORNOTT_BE
249     TOBEORNOTTJBE   TOBEORNOTT_BE
250     TOBEORNOTTIBE   TOBEORNOTT_BE
251     TOBEORNOTTBBE   TOBEORNOTT_BE
252     TOBEORNOTTZBE   TOBEORNOTT_BE
253     TOBEORNOTTSBE   TOBEORNOTT_BE
254     TOBEORNOTTBBE   TOBEORNOTT_BE
255     TOBEORNOTTXBE   TOBEORNOTT_BE
256     TOBEORNOTTKBE   TOBEORNOTT_BE
257     TOBEORNOTTWBE   TOBEORNOTT_BE
258     TOBEORNOTTQBE   TOBEORNOTT_BE
259     TOBEORNOTTIBE   TOBEORNOTT_BE
260     TOBEORNOTTMBE   TOBEORNOTT_BE
261     TOBEORNOTTHBE   TOBEORNOTT_BE
262     TOBEORNOTTHBE   TOBEORNOTT_BE
263     TOBEORNOTTRBE   TOBEORNOTT_BE
264     TOBEORNOTTDBE   TOBEORNOTT_BE
265     TOBEORNOTTKBE   TOBEORNOTT_BE
266     TOBEORNOTTYBE   TOBEORNOTT_BE
267     TOBEORNOTTGBE   TOBEORNOTT_BE
268     TOBEORNOTTLBE   TOBEORNOTT_BE
269     TOBEORNOTTEBE   TOBEORNOTT_BE
270     TOBEORNOTTRBE   TOBEORNOTT_BE
271     TOBEORNOTTVBE   TOBEORNOTT_BE
272     TOBEORNOTTTBE   TOBEORNOTT_BE
273     TOBEORNOTTEBE   TOBEORNOTT_BE
274     TOBEORNOTTUBE   TOBEORNOTT_BE
275     TOBEORNOTTABE   TOBEORNOTT_BE
276     TOBEORNOTTCBE   TOBEORNOTT_BE
277     TOBEORNOTTZBE   TOBEORNOTT_BE
278     TOBEORNOTTIBE   TOBEORNOTT_BE
279     TOBEORNOTTJBE   TOBEORNOTT_BE
280     TOBEORNOTTCBE   TOBEORNOTT_BE
281     TOBEORNOTTIBE   TOBEORNOTT_BE
282     TOBEORNOTTJBE   TOBEORNOTT_BE
283     TOBEORNOTTNBE   TOBEORNOTT_BE
284     TOBEORNOTTEBE   TOBEORNOTT_BE
285     TOBEORNOTTFBE   TOBEORNOTT_BE
286     TOBEORNOTTGBE   TOBEORNOTT_BE
287     TOBEORNOTTRBE   TOBEORNOTT_BE
288     TOBEORNOTTQBE   TOBEORNOTT_BE
289     TOBEORNOTTZBE   TOBEORNOTT_BE
290     TOBEORNOTTSBE   TOBEORNOTT_BE
291     TOBEORNOTTTBE   TOBEORNOTT_BE
292     TOBEORNOTTNBE   TOBEORNOTT_BE
293     TOBEORNOTTUBE   TOBEORNOTT_BE
294     TOBEORNOTTWBE   TOBEORNOTT_BE
295     TOBEORNOTTRBE   TOBEORNOTT_BE
296     TOBEORNOTTLBE   TOBEORNOTT_BE
297     TOBEORNOTTSBE   TOBEORNOTT_BE
298     TOBEORNOTTOBE   TOBEORNOTTOBE
//#include <time.h>
//#include <iostream>
//#include <string>
//
//using namespace std;
//
//void Mutate(const string &Target,const string &Preserved,string &Variant)
//{ 
// for(unsigned int i=0; i<Target.size(); ++i)
//  if(Preserved[i]!=Target[i])
//  {   
//   char Temp;
//   while(Preserved[i]==(Temp='A'+rand()%26));
//   Variant[i]=Temp;
//  }
//}
//
//int Select(const string &Target,string &Preserved,const string &Variant)
//{ 
// int Match=0;
// for(unsigned int i=0; i<Target.size(); ++i)
//  if(Preserved[i]!=Target[i] && Variant[i]==Target[i])
//  {
//   Preserved[i]=Target[i];
//   Match++;
//  }
// 
// return Match;
//}
//
//int main(int argc, char **argv)
//{
// srand((unsigned int)time(0));
//
// string Target("TOBEORNOTTOBE");
// string Preserved("_____________");
// string Variant(Preserved);
// 
// Mutate(Target,Preserved,Variant);
// int Match=Select(Target,Preserved,Variant);
// int Diff=Target.size()-Match;
// cout <<0 <<'\t' <<Variant <<"\t" <<Preserved <<endl;
// 
// int Iter=0; 
// while(Diff>0)
// {
//  Variant=Preserved;
//  Mutate(Target,Preserved,Variant);
//  Iter+=Diff; 
//  
//  Match=Select(Target,Preserved,Variant);   
//  Diff-=Match;
//
//  cout <<Iter <<'\t' <<Variant <<"\t" <<Preserved <<endl;
// }
//
// return 0;
//}

一目了然的东西实在无须进一步的详解,有了这直观的印象之后,再来看舍默的精彩原文:


8. Mathematically, it is inconceivable that anything as complex as a protein, let alone a living cell or a human, could spring up by chance.
Chance plays a part in evolution (for example, in the random mutations that can give rise to new traits), but evolution does not depend on chance to create organisms, proteins or other entities. Quite the opposite: natural selection, the principal known mechanism of evolution, harnesses nonrandom change by preserving "desirable" (adaptive) features and eliminating "undesirable" (nonadaptive) ones. As long as the forces of selection stay constant, natural selection can push evolution in one direction and produce sophisticated structures in surprisingly short times.
As an analogy, consider the 13-letter sequence "TOBEORNOTTOBE." Those hypothetical million monkeys, each pecking out one phrase a second, could take as long as 78,800 years to find it among the 26^13 sequences of that length. But in the 1980s Richard Hardison of Glendale College wrote a computer program that generated phrases randomly while preserving the positions of individual letters that happened to be correctly placed (in effect, selecting for phrases more like Hamlet's). On average, the program re-created the phrase in just 336 iterations, less than 90 seconds. Even more amazing, it could reconstruct Shakespeare's entire play in just four and a half days.


我整理的参考译文如下:


8. 除非钻数学牛角尖,否则人们无法相信复杂如蛋白质的东西能偶然地蹦出来,更不用说活细胞或者人了。
偶然性在进化中确实起作用(例如,随机突变可以产生新的特性),但是进化并非依赖偶然性来创造器官、蛋白质或者其它实体。恰恰相反的是:自然选择作为已知的主要进化机制,通过保留“想要的”(有适应性的)特征并消除“不想要的”(无适应性的)特征,会钳住非随机的改变。只要选择的推力维持不变,自然选择就能把进化朝某个方向推进,并且在出乎意料的短时间内创造出复杂的结构。
不妨以由13个字母构成的序列"TOBEORNOTTOBE"做个类比,假设有无数猴子,每只猴子每秒钟能弄出一条短语,那么最坏情况下需要78,800年才能从26的13次幂种可能中碰到这个序列。但是格伦代尔学院的哈迪森在二十世纪八十年代写了一个程序,它用于随机生成短语,但生成过程中,那些恰巧被放对了位置的字母就不再变动(如此选词,确实挺像哈姆雷特)。平均起来,此程序只需336次迭代就能重生这个短语,时间则短于90秒。更令人吃惊的是,它只需四天半时间就能把莎士比亚的这整个剧本重新生成一遍。


这个有趣的程序虽是类比,却足以形象地说明,只要自然选择的推力维持不变,进化出复杂结构所需的迭代次数并非天文数字,这也就是自然选择的棘轮效应(Ratchet effect)。但时至今日,反进化论者无视进化论一贯主张的可约复杂性(Reducible complexity)和累积选择(Cumulative selection),仍然热衷于把所谓的不可约复杂性(Irreducible complexity)作为预设的“事实”,结合其臆想中的纯粹随机选择(Random selection)来嘲笑进化论为打字的猴子,大玩堂吉诃德战风车。




#日志日期:2009-6-22 星期一(Monday) 晴 复制链接 举报
评论人:丑的 评论日期:2009-6-22 16:33
排版真不方便啊!

评论人:最傻最自由 评论日期:2009-7-5 17:39
你这篇博客也太耗人了吧。。。估计是理工科出身的。。发表在学术杂志上可能点击率会高些。。。
不过看在:1.英语翻译得很辛苦的份上;2.人气不是很HIGH的情况下,帮你评论一下增加一下人气。。。
你这个是扫描出来的吧,没见过这么有个性的背景。。。不错不错。。。

评论人:丑的 评论日期:2009-7-19 9:26
楼上,这个背景图片来自天涯博客提供的一个现成模版:)



登录 | 新人注册>>
输入您的评论:(不支持HTML标签)


验证码
本文所属博客:丑的
引用地址:


© 天涯社区