1700255958
一个著名的例子是广为人知的旅行推销员问题(traveling salesman problem),这个数学谜题由爱尔兰数学家威廉·罗恩·哈密尔顿(William Rowan Hamilton)在19世纪中期提出。旅行推销员问题的预设条件并不复杂:一个推销员要出门拜访几个身处遥远城市的潜在客户,每个客户都住在不同的城市。推销员需要乘车或乘坐飞机前往,这意味着旅程中会耗费大量时间。而推销员是个恋家的人,他希望在保证造访客户数量的基础上,每趟出差的时间越短越好。旅行推销员问题讨论的是,找出一条经过所有城市的路线,让推销员能够以最快、最高效的方式完成出差。
1700255959
1700255960
这个数学问题的难度远远超出它的表象。如果城市的数量不多,几乎任何人都能轻松设计出最短的旅行线路。但是当需要考虑的城市数量超过十几个时,最优路线的制订就变得异常困难。旅行推销员问题属于计算机科学家口中典型的“非确定、多项式”的计算问题。这类命题是目前最困难的计算问题之一,困难的原因在于问题的解决方案将随着城市数量的增加呈指数级上升。
1700255961
1700255962
围绕旅行推销员问题已经有上千篇相关论文发表。关注这些论文的读者并不是推销员,而是计算机芯片的设计师。计算机芯片内包含了数以亿计的元件,电子元件之间通过连接进行数据交换。由于缩短元件之间的连接距离能够在节省电能的同时提升计算速度,所以制订电路元件(“城市”)之间的最短路线自然也就成了芯片设计师们的诉求。为百货公司运送货物的卡车司机、联邦快递以及到社区接送学生的校车对这个问题都不会感到陌生。甚至大黄蜂也需要解决这个问题:一只工蜂每次回巢前可能要“拜访”数百朵花,对它们而言,走太多的冤枉路就意味着负担不起的浪费。
1700255963
1700255964
如果考量的“城市”数量在数千座上下,那么以复杂的数学手段为推销员设计最佳路线依然是可行的。虽然这些数学理论复杂高深,但是从名字上却一点看不出来,比如“切割平面法”和“分支定界法”。当城市数量上升到百万级别时,这些方法依旧能够制订出接近完美的路线。不过严谨的数学算法并不是必需的,生物学家们愚钝而盲目的算法同样能够解决问题:首先让计算机随机生成一个路线方案——任何路线都可以,无论它多么低效。然后,由计算机程序对生成的路线进行修改,每次只改变其中几座城市(在不同的情景中也可以是停留的商铺、学校或花)之间的线路,继而查看新的路线是否比原来的更短。如果路线的确变短了,就选择继续改变后面的新路线。下一步再重复上述过程,再比较。而如果线路没有缩短就放弃新路线,回到原有的方案上。经过足够多的尝试,这种简单的算法同样能够让路线变得越来越短,最终找到的路线就算不是最优解,也是相对最理想的路线之一。
1700255965
1700255966
这种进化的算法还被应用在了一些你想不到的地方。比如军事作战计划制订员用这种方式设计无人机在敌方领空的最佳巡航路线,密码编译人员用这种方式为敏感信息加密,基金经理用这种算法预测金融市场的动向。汽车工程师也可以通过优化发动机内燃料注入的时间和压力,调整它的运作,而这种算法不负众望,的确能够提升发动机的燃料效率。需要注意的是,仅仅提高燃料效率并不足以推动发动机设计上的改革。
1700255967
1700255968
模拟生物进化的进化算法确实是一种强大的工具,但是似乎还缺点儿什么。它们欠缺生物进化的核心部分:组合优化。大自然是组合优化的一把好手,而原因非常简单:标准化。
1700255969
1700255970
我们在第2章中已经探讨过,类似通用能量载体三磷酸腺苷以及通用遗传密码等标准化物质的存在,是生命有着共同起源的最佳证据。而人类技术工程中缺少如此高度的标准化,往往只能通过不断创造新的标准推动技术进步,这又构成了组合优化难以实现的主要瓶颈。为了让空气压缩机、燃烧室和涡轮引擎组合到一起推动数吨钢铁飞上天,技术人员着实为不同的工业标准耗费了一番心力。现今汽车内燃机的发明也是一样,发动机的零件接口必须做到标准化,比如活塞、阀门与汽缸的尺寸必须相符。工业革命中许多标志性的发明也经历了类似的过程。第一台投入使用的蒸汽机实际上是2世纪亚历山大港的蒸汽动力玩具和17世纪德国真空泵的组合。钳工用台虎钳只不过是把两种古老的机械结合到了一起:杠杆手柄和螺纹装置。最早的自行车由三部分构成:轮胎、杠杆以及滑轮。除了创意,这些发明全都建立在统一的工业标准上。
1700255971
1700255972
如果说技术工业领域没有标准,那就有点言过其实了。技术发明依赖的通用标准不仅包括科学研究的自然规律,更重要的是测量方式的标准化,比如温度、质量以及电荷。不过大多数技术领域不像大自然,技术领域缺乏特定的标准化规范。自然界需要严格的标准化,因为它不像人类发明家,可以用额外的心力弥补工业标准上的不足。
1700255973
1700255974
功能不同的蛋白质,有的能催化反应,有的能推动分子转运,还有的能维持细胞存活。这些功能的结构基础都相同,都是由氨基酸以同样的连接方式组合而成的。氨基酸之间的标准化连接方式是“肽键”,由一个氨基酸分子的氮原子和相邻氨基酸的碳原子构成。尽管每种氨基酸自身的结构不同,但由于“接口”的标准化,它们依旧能以相同的方式连接到一起。正是不同生物体内的氨基酸连接的标准化造就了我们熟悉的自然界。没有标准化,就没有超宇宙级数量的基因型。自然图书馆如果不能畅通无阻,生物进化也就寸步难行。
1700255975
1700255976
让组合优化成为现实的标准化不仅仅是蛋白质的专利,RNA也以标准的化学键连接单位分子。生命储存遗传信息的标准规范DNA使得细菌间的基因转移和性状组合成为可能。调控环路也以标准化方式调节着基因的表达,调节因子蛋白都能够识别和结合特定的DNA片段,通过改变不同基因前的调节片段,同样的调节因子能发挥不同的作用。我们手头只有一些为数不多的小部件,只要我们能够制订一种标准化的连接方式,然后以所有可能的方式对它们进行组合,无论这种组合多么盲目,我们创造新事物的潜力都已经和大自然不相上下了。
1700255977
1700255978
这种标准化的过程对于人类的工程技术领域来说显然是力所能及的:流行的乐高积木就是很好的例子,此外,另一项古老得多的技术也是很好的例证。
1700255979
1700255980
16世纪的威尼斯人安德里亚·帕拉迪诺(Andrea Palladino)是西方历史上最具影响力的建筑师之一。在漫长而光辉的职业生涯里,他至少为16个威尼斯最富有的家族设计过豪宅,修建过30座乡间别墅,还设计过数座教堂。帕拉迪诺的平面设计图总是风格迥异,每张设计图之间有着天差地别。他设计的建筑在建筑面积、户型、朝向以及房间布局上都不尽相同。
1700255981
1700255982
即便如此,这些房子依旧带有帕拉迪诺独特的风格烙印,虽然多数人可能说不清这种烙印究竟是什么。20多年前,艺术史学家乔治·赫西(George Hersey)与计算机专家理查德·弗里德曼(Richard Freedman)试图通过合作研究解释这种独特的风格,寻找隐藏在帕拉迪诺平面设计图中的秘密。他们的想法是,如果帕拉迪诺的设计图背后当真有特定的规律,那么我们肯定能用相应的算法模拟一张帕拉迪诺风格的设计图。
1700255983
1700255984
为了提取出帕拉迪诺风格的必要元素,赫西和弗里德曼分析了数十座帕拉迪诺式别墅的结构:房间的朝向、墙壁的布局、相邻房间的长度是否有特定的比例等。最后,他们成功了。两人设计的计算机程序最终成功创造了一张帕拉迪诺风格的平面设计图。设计图里所有的细节都和已有的帕拉迪诺式建筑不同,无论是面积、朝向,还是房间布局,但是明眼人都能一眼认出这张新设计图里充斥着帕拉迪诺风格。
1700255985
1700255986
这个程序的算法在设计平面图时,会先勾出建筑的轮廓,这个轮廓往往呈矩形,然后算法会再用垂直或者水平的线贯穿矩形——这些直线代表墙壁,在建筑里分隔出不同的房间。一条直线可以把房子分隔成两个部分,而两条平行的直线则可以把房子分隔成三个部分,以此类推。每个房间继而以相同的方式被分隔,小房间再以这种方式继续分隔……直到房间的大小符合进一步设计的需要。对一个矩形用相互平行的垂直或水平线进行多次分割,每次用一条或多条直线,我们几乎可以绘制出无限多样的平面设计图。
1700255987
1700255988
帕拉迪诺的设计风格既不是刻意做作也不是随意而为,也没有听起来那么复杂高深。举例来说,如果一个房间被一条直线分隔成两个小房间,通常两个小房间的面积相同,或者其中一个是另一个的两倍大。而如果这个房间被两条平行线分割,通常中间的房间是两侧房间的两倍大。只要掌握这两点和其他几条规律并灵活运用,就算是计算机也可以模拟出这种最富盛名的文艺复兴时期的建筑风格。
1700255989
1700255990
自然界刻板的组合方式当然和计算机模拟帕拉迪诺风格的过程不完全相同。蛋白质是由更小的氨基酸组合而成的产物,而帕拉迪诺式建筑则是分割矩形建筑的结果。不过两者的共同点更值得关注:不管是蛋白质还是建筑学,都是用有限的基本元素和更有限的组织原则创造出种类庞杂的新产物。如果这个规律在工业革命前就已经存在于建筑学中,那么我们有理由推测,它也极有可能存在于工业革命之后的工程技术领域。
1700255991
1700255992
YaMoR就是一个很好的例子,它代表的领域正是现代数字技术。
1700255993
1700255994
控制机器人的电脑芯片上嵌有无数个晶体管,集成电路上的晶体管是一个只能对电压有无做出两种反应的简单电子元件:“0”代表没有电压,关闭开关;“1”则代表有电压,打开开关。所有的晶体管协同合作,对一串输入的数据流进行处理之后,再以一连串“0”和“1”的形式输出。每个晶体管相当于一个位,或者也叫二进制位。晶体管只有开和关两种状态,它们是计算机理解所有信息的基础。数学家对计算机工作原理的描述更精确,他们将计算机的工作状态描述为函数值的计算,即电路获得一个输入,经过演算和处理获得一个输出。电路演算所使用的函数,其名称出自英国数学家兼哲学家乔治·布尔(George Boole)1854年的著作《思维规律的研究》。布尔创立的学术分支是科学上一个巨大的进步,而世人口中的布尔函数,早已经成为现代计算机科学的核心。
1700255995
1700255996
布尔函数中最简单的逻辑之一是与(AND)函数,你的每次搜索几乎都离不开这个函数。举个例子,如果你想找某首乐曲的电子版散页乐谱,譬如莫扎特的《魔笛》(Magic Flute),搜索引擎会检索所有标题中含有“莫扎特”的曲谱,对于每个标题,返还的结果要么为“是”,要么为“否”,用一个位来表示也就是“1”或者“0”。接着,引擎对“魔”字也会进行相同的处理。于是,就每个标题而言,两个关键词分别有两种返还结果,组合之后一共有4种不同的可能情况。数字编码的0-1阵列可以用数学家们习惯的方式书写,来替代布尔函数的函数值,这种写法被称为真值表。与函数的真值表写法如图7-1中a表所示,对于函数的每个输入,两个关键的检索结果分别在表格的左侧沿着纵向标出,表格右侧则是4个最终的返还值,也就是函数的输出,还是用“1”和“0”的形式标记。最终得到的4种结果中只有一种返还值为“是”——只有当先前两个输出的结果均为“是”,才算作《魔笛》检索的一个可能值。
1700255997
1700255998
如果你想要找标题中有“莫扎特”或者“魔”(或者兼有两者)的曲谱,搜索引擎需要运行另一个布尔函数:或(OR)函数。或函数和与函数的数据输入过程相同,都是检索所有含有“莫扎特”和“魔”的标题,但是它们判定的规则却不同。在或的逻辑里,只要输入数据的两个结果有一个为“是”,那么最终的输出结果就为“是”(如图7-1b)。所以,或函数的输出中不仅会有《魔笛》,还将有莫扎特的其他626支曲目,此外还有桑塔纳(Santana)的《黑魔女》(Black Magic Woman),史蒂维·旺达(Stevie Wonder)的《如果这就是魔法》(If It’s Magic)等。布尔函数中还有一个更简单的逻辑函数,非(NOT)函数(如图7-1c)。非函数将输出所有返还值为“否”的结果,在这里,它可以帮你找到所有标题中不包含关键词“莫扎特”的曲谱。
1700255999
1700256000
1700256001
1700256002
1700256003
图7-1 真值表
1700256004
1700256005
与、或、非以及很多其他独特的布尔函数,比如XOR、XNOR、NAND以及NOR,帮助我们把自然语言中复杂的问题翻译成一串计算机能够理解的二进制数字。不仅如此,二进制数字与十进制一样,能够进行加减乘除运算。无论一台计算机有多么高端复杂,它的集成电路都在执行最基本的算数运算和简单的布尔函数,比如与函数。只需要两个最简单的数字,0和1,加上布尔函数,数字计算机就能够识别图片、对数据进行加密、发送语音邮件或是预测下周二的天气。如此看来,算数存在的意义远远不止是小学的数学考试而已。
1700256006
1700256007
布尔函数另一个非凡的特征是简单函数能够通过叠加组成复杂函数,在叠加的过程中,一个函数的输出可以作为下一个函数的输入。这就像一个乘法运算(4×3)可以用一个加法运算来代替:(4+4+4)。不仅如此,虽然理论上可以有无数种布尔函数,但每一种布尔函数都不过是与、或和非三个简单函数组合叠加的结果。这对于计算机来说非常重要,因为在集成电路中,晶体管往往通过串联形成计算单元以执行不同的布尔逻辑函数,这些晶体管单元因此被称为逻辑门。
[
上一页 ]
[ :1.700255958e+09 ]
[
下一页 ]