3.4 效用函数无法以增量方式求值
理性模型的假定是,设计是对于设计树的搜索,并且在每个节点人们可以对若干下一级分支的效用函数求值。 事实上,除非探索到所有分支的所有叶节点的程度,否则人们就很难做到这一点,因为大量的效用指标(如性能、成本等)严重依赖于随后的设计细节。因此,虽然对效用函数的求值在原则上是可行的,但是在实践上,人们会在这里再次遭遇组合爆炸。 那么,设计师该怎么做?估算!理所当然,正式的也好,非正式的也罢,都要做估算。在求精的步骤中,人们必须对设计树进行剪枝。 经验。很多辅助信息都有助于该过程中的直觉判断。辅助信息之一是经验,无论是直接还是间接的:“OS/360的设计师们将OS/360操作系统的系统范围内共享的控制块的格式细节暴露出来,这导致了一场维护工程师的噩梦。我们会将其封装为对象。”“宝来B5000系列在很久以前就探讨过基于叙词的计算机体系结构。由于本质性能损失较大,我们不打算继续深入设计子树了。”当然,工艺方面的权衡早已日新月异,但是上面的例子仍然很好地说明了经验教训。研习设计史的最有力的原因是去了解怎么样的设计方案是行不通的以及为什么这些设计方案行不通。 简单估算量。设计师们经常在进行设计树探索的早期就例行地采用简单估算量。建筑师们在得知目标预算以后,会粗略地估算一下平均到每平方英尺的成本,得出一个每平方英尺的目标,并使用它进行设计树的剪枝。计算机架构设计师们则会根据指令组合来对计算机性能做粗略的初步估算。 当然,这样做的危险在于,粗略的估算有可能会将本来可行但由于某个特定的估算量所采用的估算方法将看上去不可行的分支剪掉。我见过一个建筑师,他以过高的成本为理由,把一个早已指定的房顶结构之下的一堵墙壁给取消了,纯粹基于例行的平方英尺估算量就作了这样的决定。而实际情况是,因增加的空间而付出的成本主要在房顶,但该成本已经计算在内,所以这样会造成边际成本非常低。 将欲免费取之,必先无偿予之。