软件灵活性设计:如何避免陷入编程困境
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 冗余和简并

生物系统已经进化出了强大的鲁棒性,一个显著特点是冗余(redundant)。像肝脏和肾脏这样的器官是高度冗余的:其能力远远超过完成工作所需的能力。因此,一个人缺少一个肾脏或部分肝脏,并不会明显丧失身体机能。生物系统也是高度简并(degenerate)的:通常有许多方法来满足一个特定的需求[13]。例如,如果一根手指受损,其他手指有办法相互配合拾起一个物体。我们可以从各种来源获得生命所需的能量:可以代谢碳水化合物、脂肪和蛋白质,尽管从这些资源中消化和提取能量的机制是完全不同的。

遗传密码本身是简并的,因为从编码子(核苷酸的三联体)到氨基酸的映射关系不是一对一的:有64个可能的编码子只能对应大约20个可能的氨基酸(见[54,86])。因此,许多点突变(单个核苷酸的变化)并不改变编码区所指定的蛋白质。此外,很多时候,一个氨基酸被一个类似的氨基酸取代并不会损害蛋白质的生物活性。这些简并为变异提供了途径且没有明显的表象后果。此外,如果一个基因被复制(这并不是一种罕见的情况),这些拷贝可能会悄悄地发生分歧,允许开发在未来可能变得有价值的变体,而不影响目前的生存能力。此外,这些拷贝可以被置于不同的转录控制之下。

简并是进化的产物,而且它肯定能促进进化。可能简并性本身就是被选择的,因为只有那些具有大量简并性的生物才有足够的适应性,以便在环境变化时能够生存[14]。例如,假设有一些生物(或工程系统)是简并的,那么有几种非常不同的依赖机制来实现某些基本功能。如果环境发生变化(或需求发生变化),使实现基本功能的其中一种方式变得不可行,该生物可以继续生存和繁殖(该系统可以继续满足其规格)。但是,已经失去功能的子系统这时可以进行突变(或修复),而不影响整个系统的生存能力(或当前的运作)。

物理学的理论结构是深度简并的。例如,经典的力学问题可以用多种方式来处理,例如牛顿向量力学公式、拉格朗日和哈密尔顿的变分力学公式。如果向量力学和变分力学的任何一种形式都适用,它们会产生等价的运动方程。对于分析具有耗散力(如摩擦力)的系统,向量力学是有效的,变分方法不太适合这种系统。拉格朗日力学在处理具有刚性约束的系统时远比向量力学有优势,而哈密尔顿力学则提供了典型变换的力量,有助于利用相空间的结构来理解系统。拉格朗日和哈密尔顿公式都有助于我们深入了解对称性和守恒量的作用。有三种重叠的方法可描述一个机械系统,当它们都适用的时候,它们是一致的,这一事实给了我们解决任何问题的多种途径(见[121])。

在故障成本极高的关键系统中,工程系统可能包含一些冗余设计。但它们几乎从未有意纳入生物系统中的那种简并现象,除非是作为非最佳设计的连带后果[15]

简并可以为系统增加价值,就像冗余一样,可以交叉检查简并计算的答案以提高系统鲁棒性。但简并计算不仅仅是冗余的,而且是彼此不同的,这意味着一个错误不太可能影响其他的功能。对于可靠性和安全性来说,这是一个积极的特征,因为一个成功的攻击必须损害多个简并部分。

当简并部分产生部分信息时,其组合的结果可能比任何单独的结果都好。一些导航系统利用这个想法将几个位置预估结果结合起来,产生一个高度精确的结果。本书将在第7章中探讨结合部分信息的想法。