电进化机案例
2020年7月13日 lee公子 摘自《失控》:汤姆·雷的电进化机
这是《失控》一书中非常有趣的一个实验,一个生物学家利用自学的编程知识,设计了一段程序代码,在电脑当中模拟生物的进化,结果看到了不可思议的现象。
特把这一段摘录出来。
***
汤姆·雷 刚把编写好的小玩意儿放进计算机,它就迅速繁殖起来,直到几百个副本占满了可用的存储空间。雷的小玩意儿勉强算是个试验性的计算机病毒,因为一旦离开他的计算机便不能再复制,所以它没什么危险。他只是想看看,如果病毒必须在一个有限空间里互相竞争,会有什么结果。
雷的世界设计得很巧妙,在病毒老祖宗数以千计的克隆品中,有大约10%在自我复制时发生了微小变异。最初那个家伙是一个“80”——叫这个名字是因为它的编码长度为80个字节。有些80发生了一点随机的变异,成了79或81。这些新病毒中的一些变种不久就接管了雷的虚拟世界。它们进而再变异出更多种类。病毒80几乎被这迅速增长的新“物种”大军逼到濒临灭绝的地步。不过,它挺了过来,在79、51和45这些新面孔出现并达到数量峰值一段时间以后,80又死灰复燃了。
不过区区几个小时,汤姆·雷的电进化机已经进化出了“一锅培养液”,近百种计算机病毒为了在这个与世隔绝的世界中生存而大打出手。在花了几个月的时间编写代码后,雷在他的首次尝试中就孕育出了人工进化。
雷的电进化机方案是从简单的复制体开始,给它们一个舒适的栖息地,以及大量能源和有待填补的空间。和这些家伙最接近的实物是自复制的核糖核酸碎片。这个艰巨任务看上去是可行的。他打算调制一份计算机病毒的培养液。
当时正值1989年,新闻杂志上铺天盖地都是计算机病毒比瘟疫还糟、是技术所能到达的邪恶之极的封面报道。但雷却从计算机病毒的简单代码中窥见了一个新科学的诞生:实验进化与生态学。
为保护外部世界(和保证自己的计算机不会崩溃),雷用一台虚拟计算机来运行他的实验。虚拟计算机是一种在真实计算机的潜意识深处模拟特定计算机的智能软件。通过将那些可自我复制的小家伙们限制在这个影子计算机中,雷把它们与外界隔离,使自己在不危及主机的情况下,能够对计算机内存这样的重要功能胡乱折腾。“看了一年计算机手册之后,我坐下来写代码。两个月后,这小玩意儿跑起来了。在程序运行的头两分钟里,我就已经获得了可以进化的生物。”
雷在他称为“地球”的世界里种下了他编写的一个小玩意儿——80字节的程序代码,并把它放入他的虚拟计算机的内存中。这个小家伙先是找到一块80字节大小的空白内存空间,然后用一份自己的复制品占据这块地盘,从而实现了自我复制。不消几分钟,内存里就满是80的复制品了。
雷增加了两个重要功能,将这台施乐复印机般的复制机改造成一台进化机:他的程序在复制中偶尔会搞乱几位代码,他还赋予这些“生物”中的刽子手以优先权。简言之,他引入了变异和死亡。
计算机科学家告诉过他,如果随意改变计算机代码(他的所有生物实际上都是代码),改变后的程序可能无法正常运行,甚而使计算机崩溃。他们认为通过向编码中随机引入漏洞来获得可运行的程序的概率太低了,他的方案无异于浪费时间。雷其实也知道,维持计算机运行所需的完美实在是太弱不禁风了——漏洞会杀死进程。不过,由于他的造物程序在他的影子计算机中运行,一旦变异产生一个严重“畸形”的东西,他的刽子手程序——他将其命名为“收割机”——就会将它杀死,而他的“地球”的其余部分则继续运转。“地球”实际上是找出不能复制的漏洞程序,将其从虚拟计算机中拖将出去。
然而“收割机”会放过极少数有效变种,也就是说,那些碰巧形成一个真正的替代程序的变种。这些合法的变种能够复制并产生其他变种。如果你像雷那样将“地球”运行10亿个计算机周期,在这10亿次的机会中,将出现数量惊人的随机产生的东西。为了让系统更有活力,雷还为造出来的小东西们打上了年龄戳记,这样一来,老一些的家伙就会死亡。“收割机既杀死最老的家伙,也杀死最捣蛋的家伙。”雷笑着说。
在“地球”的首轮运行中,随机变异、死亡和自然选择都起了作用。没几分钟,雷就见证了一个生态系统的诞生——这个系统由那些新的生物组成,它们为抢夺计算机周期而竞争。竞争奖励个头小的家伙,因为它们需要的周期更少,而残酷的达尔文进化论淘汰的则是贪婪的消耗者、体弱多病的物种和老家伙。物种79(比80少一个字节)是幸运的。它的工作卓有成效,很快就超过了80。
雷还发现了非常奇怪的东西——一种只有45个字节的变种。它的代码效率极高,数量上也超过了所有其他变种。“这个系统自我优化的速度之快令我震惊,”雷回忆说,“系统中的存活者有着越来越短的基因,我可以用图把这个速度描绘出来。”
在对45的代码做进一步考察时,雷惊奇地发现它是一只寄生虫。它只包含了生存所需的代码。为了繁殖,它“借用”了80的繁殖代码来复制自己。只要周围有足够的80宿主,45就会兴盛起来。但是,如果在有限的范围内45太多了,就不会有足够的80提供复制源。随着80的减少,45也减少了。这对舞伴跳着共同进化的探戈,进进退退,就像北部森林中的狐狸和兔子一样。
“所有成功的系统都会吸引寄生虫,这似乎是生命的普遍属性。”雷提醒我说。在自然界寄生虫如此常见,以至于宿主很快就共同进化出针对它们的免疫力。寄生虫随之进化出骗过那种免疫力的策略。结果宿主再共同进化出抵制它们的防御能力。实际上这些行动并不是交替出现的,而是两股持续相互作用的力量。
雷学会了用寄生虫在“地球”中进行生态实验。他把79装到他的“培养液”里,因为他觉得79可能对寄生虫45免疫。的确如此。不过随着79的兴旺,第二种能够捕食它们的寄生虫进化出来。这一种有51字节长。当雷为它的基因排序时,他发现,45之所以能变成51,正是由一个“基因事件”所引起的:“7个出处已无从考究的指令取代了45中间段某处的一个指令,”把一个丧失能力的寄生虫变成了强有力的新物种。但这还不算完——一个对51具有免疫力的新物种进化了出来,而这样的过程还在继续。
在运行了很长时间的“培养液”中,雷发现了以其他寄生虫为宿主的超寄生虫:“超寄生虫就像是从你家的电线上偷电的邻居。他们用你的电,你付电费,而你还蒙在鼓里。”在“地球”里,像45这样的有机体发现自己无需“携带”大量代码来复制自己,因为它们周围有足够的代码。雷俏皮地说:“这就像我们利用其他动物的氨基酸一样(在我们吃它们的时候)。”在进一步检查中,雷发现超-超寄生虫兴旺起来,寄生升级到了第三重。他发现了“社交骗子”——这种生物利用两个合作的超寄生虫的代码(“合作”的超寄生虫彼此还相互偷窃!)。社会骗子需要相当发达的生态环境。至于超-超-超寄生虫,虽然还没看到,不过也许已经有了。在他的世界里,这种不劳而获的游戏也许永无止境。
雷所发现的“生物”是人类程序员无法编写出来的。
“我从编写80字节的东西开始,”雷回忆说,“因为那是我能拿出来的最佳设计了。我猜想或许进化能把它降到75字节左右,于是就让程序运行了一整夜。结果第二天早上就出现了一个新东西——不是寄生虫,而是某种能完全自我复制的东西——它只有22字节!令我大惑不解的是,在没有像寄生虫那样盗用别人指令的情况下,一个电脑病毒是怎样仅通过22个指令就做到自行复制的呢?为了和他人分享这个新发现,我把它的基本算法发到网上。麻省理工学院一位计算机专业的学生看到了我的解释,但不知怎么却没有得到病毒22的代码。他试图手工重新创造它,但是他的最好成绩也需要31条指令。当他得知我是在睡觉时得到22条指令的时候,他沮丧极了。”
人类力所不逮的,进化却能做到。雷在一台显示器上展示了22在培养液中繁殖倍增的踪迹,以作为他的陈述的最佳诠释:“想想看,随机地改动程序竟然能胜过精雕细琢的手工编程,这听上去挺荒谬的,可这就是一个活生生的例子。”这位旁观者突然明了了,这些“没脑子”的黑客具有的创造力是永无止境的。
因为病毒要消耗计算机周期,所以较小(指令集更短)的病毒就有一定的优势。雷重写了“地球”的代码,使系统根据病毒大小按比例为其分配计算机资源,大病毒得到更多周期。在这种模式下,雷的病毒们所栖息的是一个不偏不倚的世界。正因为这个世界对大小病毒一视同仁,因此长期运行也许会更有意义些。有一次雷将它运行了150亿个计算机周期。在大约第110亿个周期左右,诞生了一种长度为36字节的病毒,它可是聪明得近乎狡诈了。它计算自己的真实尺寸,然后在“尾部”(我们姑且用这样的称谓吧)将长度值向左移了一位,在二进制中,这就相当于翻倍。靠着谎报自己的尺寸,病毒36神不知鬼不觉地窃取了病毒72的资源,这就意味着它得到了两倍于实际所需的中央处理器时间。这个变种自然横扫了整个系统。
也许汤姆·雷的电进化机最惊人的事情是它创造了性。没人告诉它什么是性,然而它还是发现了它。在一次实验中,为了看看关闭变异功能会产生什么结果,雷让“培养液”在没有外加错误的情况下运行。结果让他大吃一惊,即便没有程序变异,进化仍然发生了。
在真实的自然生活中,性是远比变异更重要的变化来源。性,从概念上讲,是遗传重组——一些来自父亲的基因和一些来自母亲的基因结合成为后代的全新基因组。在“地球”中,寄生虫有时会在无性繁殖中“借用”其他病毒的复制功能,而“收割机”有可能在这个过程中碰巧杀死了宿主,宿主原有的空间被新病毒占用。发生这种情况的时候,寄生虫就会使用新病毒的部分代码,以及“死去”病毒被打断了的部分复制功能。由此产生的后代是个未经刻意变异而产生的天然的新组合。(雷还说这种古怪的繁殖“相当于和死人发生性关系!”)在雷的“培养液”里,这种中断式交配其实一直都在发生,但只有当他关闭变异功能时,他才注意到这点。原来,不经意的重组本身就足以推动进化。死亡时生物所栖息的内存空间中就会有足够的不规则性,而这种复杂性提供了进化所需的多样性。从某种意义上说,系统进化出了变异。
对科学家而言,雷的人造进化机最令人欣喜之处在于,他的小世界展示的似乎是间断平衡。在相对较长的时期里,种群比例保持着一个相对稳定的局面,只是偶尔有物种灭绝或新物种诞生。接着,几乎是一眨眼功夫,这种平衡就立刻被一阵翻江倒海般的新老物种交替给打断了。对一个较短的时间来说,变化是狂暴而不受约束的。接着事情解决了,静止和平衡再次成为主宰。化石研究显示,这种形式在地球上的自然界中占压倒优势。静止是常态;而变化总是突如其来。在进化的其他计算机模型中也能看到同样的间断平衡方式,比如克里斯蒂安·林格伦的囚徒困境式的共同进化世界。如果人为进化反映了生物进化,你肯定想知道,如果雷让他的世界永远运行下去,会出现什么状况?他的病毒怪物会创造出多细胞吗?
遗憾的是,雷从来没有将他的世界以马拉松的方式运行过,去看看几个月或者几年之后会发生些什么。他还在不停地摆弄着他的程序,对其进行改进,以使之能够收集长期运行所产生的海量数据(每天50兆字节)。他承认:“有时,我们就像一群有一辆车的男孩子。我们总是在车库里打开发动机罩,把引擎零件拿出来摆弄,但是我们几乎从不开车,因为我们太执着于加大马力了。”
事实上,雷正专注于开发一种事实上,雷正专注于开发一种新硬件,那应该是一种新技术。雷认为他可以将虚拟计算机和为它编写的基本语言“烧制”进一块计算机芯片——一块进化用的硅片。这个现成的达尔文进化芯片就成了可以插进任何计算机的模块,它会为你迅速繁殖东西。你可以演化出代码,或子程序,或许甚至可能是整个软件程序。“我发现这相当奇怪,”雷吐露道,“作为一个热带植物生态学家,我竟然搞起了计算机设计。”