17.2 生成图像的基元组

形成开放基因组的方法不止一种。1990年,卡尔·西姆斯利用二代连接机(CM2)的超级计算能力设计了一个由长度可变基因组成的新型人工世界,比他设计的植物图像世界更为先进。西姆斯的妙招是创造一个由小方程而非长串数码组成的基因组。他原来的基因库中每个固定长度的基因各控制着植物的一个视觉参数;这个新基因库则拥有长度不定且可自由扩展的方程,籍此绘制各种曲线、色彩和形状。

西姆斯的方程——或着说基因——是一种计算机语言(LISP)[1]的小型自包含逻辑单元。每一个模块都是一个算数指令,诸如加、减、乘、余弦、正弦。西姆斯把这些单元统称为「基元组」——它们构成了一个逻辑的字母表。只要有一张恰当的逻辑字母表在手,就可以建立任何方程,就像用适当多样的语音元素表就能合成任何语音句子一样。加、乘、余弦等的相互组合能产生任何我们想得出的数学方程。既然任何形状都可以用方程来表达,这一基元字母表也就可以画出任何一种图像。增加方程的复杂性也就神奇地扩大了所生成图像的复杂性。

广告:个人专属 VPN,独立 IP,流量大,速度快,连接稳定,多机房切换,每月最低仅 5 美元

方程基因库还有个意外的好处。在西姆斯的原版世界(以及在汤姆·雷的「地球」和丹尼·希利斯的共同进化的寄生虫世界中),有机体是一串串每次随机转换一个数字的数码,就像博尔赫斯图书馆里的书那样,一次改变一个字母。而在西姆斯的改良版世界里,有机体成了一串串每次随机转换一个基元的逻辑基元组。仍以博尔赫斯图书馆为例的话,这次被调换的是词而不是字母。每本书里每个词的拼写都正确,每本书的每一页由此就更有实际意义。但是,对于以词为原料的博尔赫斯图书馆来说,要煮这锅汤[2]至少需要数以万计的词,而西姆斯仅用一打左右的数学基元就能列出所有可能的方程。

对逻辑单元而不是数字位元做进化,最根本的优势还在于它能马上将系统引上通往开放宇宙的大道。逻辑单元本身就是功能,而不象数字位元那样仅仅是功能的数值。在任意一个地方增加或交换一个逻辑基元,程序的整体功能就会产生转变或得到扩展,从而在系统中涌现出新功能和新事物。

而这就是西姆斯的发现。他的方程进化出全新的图像,并把它们显示到计算机屏幕上。这个新的空间是如此之丰富,使西姆斯大为震惊。由于基元组只包含逻辑部件,西姆斯的LISP字母表确保了大部分方程所绘出的图像都具有某种模式。屏幕上不会再充斥着模糊灰暗的图像,无论西姆斯「漫步」到哪里,都能看到令人惊艳的风景。「艺术」仿佛成了信手拈来之物。一开始,屏幕上布满了狂野的红色和蓝色之字形线条。下一刻,屏幕的上部点缀着黄色的斑斑点点。之后,斑点下出现一条朦胧的水平线,再接着,是重笔墨的波浪伴着蓝色的海天一线。再然后,斑点洇成毛莨花般嫩黄的圆晕。几乎每一轮画面都展现出惊人的创意。一小时内,上千张美轮美奂的图像被从其藏身之所唤起,第一次也是最后一次展现在我们面前。这好比站在世上最伟大的画家身后,观看他创作从不重复主题和风格的速描。

当西姆斯选中一幅图画,繁衍出其变种,再从中选取另一幅时,他所进化的不只是图像。撇开表象,西姆斯进化的是逻辑。一个相对较小的逻辑方程能绘制出一幅让人眼花缭乱的复杂图画。西姆斯的系统曾经进化出下面这段逻辑代码:

(cos (round (atan (log (invert y) (+ (bump (+ (round x y) y) #(0.46 0.82 0.65) 0.02 #(0.1 0.06 0.1) #(0.99 0.06 0.41) 1.47 8.7 3.7) (color-grad (round (+ y y) (log (invert x) (+ (invert y) (round (+ y x) (bump (warped-ifs (round y y) y 0.08 0.06 7.4 1.65 6.1 0.54 3.1 0.26 0.73 15.8 5.7 8.9 0.49 7.2 15.6 0.98) #(0.46 0.82 0.65) 0.02 #(0.1 0.06 0.1) #(0.99 0.06 0.41) 0.83 8.7 2.6))))) 3.1 6.8 #(0.95 0.7 0.59) 0.57))) #(0.17 0.08 0.75) 0.37) (vector y 0.09 (cos (round y y)))))

这个方程在西姆斯的彩色屏幕上绘出了一幅引人注目的图画:北极的落日余辉映照在两根冰柱上,冰柱晶莹剔透;远方的地平线淡然而宁静。这可堪比一个业余画家的大作哩。西姆斯告诉我说:「这个方程的进化从头到尾仅用了几分钟时间——如果是人类有意为之的话,可比这个费功夫多了。」

但是西姆斯却无从解释方程背后的逻辑以及它为何会绘出一幅冰的图画。在这个方程面前,西姆斯和我们一样茫然无知。方程所隐藏的逻辑已经无法用简单明了的数学来破解。

LISP语言:LISP是List Processing的缩写,即表处理语言,诞生于二十世纪六十年代左右。表(list)是LISP语言中求值和运算的基本单位。由于LISP语言建立在递归逻辑的基础上,形式化程度很高,适合于符号运算和问题求解,至今仍是人工智能最常用的语言之一。

汤(Soup):在英语中有alphabet soup的用法,用于指一种用字母状面团作汤料的汤。可查的说法有二:一是说此汤是父母为鼓励儿童学字而做,喝汤的儿童可以把汤内的字母随意组合,从而能学到词汇;二是指在网上遇到的需要处理的一大堆杂乱字母戏称为「字母汤」。此外,在生命起源的问题上经常将产生生命的初始状态(科学家推测,生命起源于呈混合溶液状态的物质「汤」)称为汤。