posts - 176, comments - 240, trackbacks - 0, articles - 7

[导入]级列设计理论

Posted on 2005-11-14 17:03 canonical 阅读(504) 评论(0)  编辑  收藏 所属分类: 设计理论

     理论物理的优美在于从少量基本原理(如最小作用量原理)出发推导出整个理论大厦。而在软件设计领域却充斥着林林总总的"最佳实践". 太多的规则只会意味着没有规则。软件设计领域的现状说明这个领域还处于非常稚嫩的阶段,应该从其他领域借鉴更多的知识。在我前面的blog中已经说明了在 软件中的一些具体的分析技术。但如何有效的应用这些分析技术,我们还需要一些指导性的理论框架。如果把软件设计放在更加广泛的系统工程的背景下,一个合适 的支配性原理应该是最小复杂性原理。即在软件分析过程中我们所作的一切,无论是面向对象分析,基于工作流的分析等等,其目的都是尽量降低系统构建的复杂 性。只要能够有效降低系统构建的复杂性,那所采用的方法和所建立的模型就是好的。复杂性是唯一的度量,而不是是否符合某人的观点,是否采用流行的技术等 (当然,采用流行技术往往意味着降低了和其它系统交互的复杂性)。
     李小龙说:简单是美。但是否最简单的就是最好的?科学界对此却有着否定的结论。关于复杂性的一个很深刻的基本事实是,复杂性是分级的,不同复杂性层次的事 物有着本质的差异,不能期待一个较低复杂性的方法能够解决一个更高复杂性层次上的问题。所以Einstein说:make everything as simple as possible, but not simpler。复杂性级列的存在意味着,随着我们获取到更多的信息量或者因为系统自身的发展,当我们所建立的系统的模型沿着复杂性级列演化的时候,我们 所提出的解决问题的方案也必须作相应的演化。即我们提供的不是一些固定的解决方案(solution),  而必须是一个完整的策略(strategy)。这样我们就不是孤立的看待一个问题, 而是要看到它的过去,现在和未来。
     在作分析的时候,我们都知道"从一般到特殊,从特殊到一般",但如何科学的,有步骤的去做呢? 我从等离子体物理的BBGKY Hierarchy中学到了一个基本的分析框架: 级列理论.这个理论首先定义了一个最普适的模型:气体由N个完全相同的原子组成, 其动力学由N个互相耦合的Newton力学方程来描述。理论的第二步是从最极端的简化开始,假设所有的原子之间不存在相互作用,即假定原子之间是相互独立 的。则得到Vlasov方程。理论的第三步考虑系统的复杂性逐渐增加,当气体密度较高,必须考虑分子之间两两碰撞的时候,得到Boltzman方程。当需 要考虑更高阶的相互作用的时候,我们得到关联动理学方程,如此继续下去建立一个无穷级列。
抽象一些地说,该理论包含如下内容:
. 建立能够描述所有情况的最广泛的模型M0, 该模型定义系统的边界
. 建立一个包含最少假设的最简单的模型Mn,该模型作为求解的基础和基本的参照。
. 建立一个从Mn到M0的复杂性逐渐增加的模型级列,确保在每一个复杂性的层次上,都存在着对系统有效的建模,而且在求解高阶问题的时候,可以参考较低阶问题的解。
   如何从这种无穷级列中做出选择,必须根据具体应用情景而定,Vapnik在其统计学习理论中详细描述了这种求解策略:
 综合代价 = 训练数据与模型预测之间的偏差 + 模型自身的复杂性
    学习 = minimize[综合代价]
即在能够解决问题的方案中选择最简单的一个。


 建立级列理论,首先需要建立最广泛的模型。在量子力学中,确立了如下基本概念:
 1. 确定性的态。
 2. 所有态构成完备的态空间。
 3. 系综(即态的集合)的动力学。
   首先,状态的确定性非常重要。即使在量子力学中,量子态存在几率诠释,态函数本身在数学上仍然是确定性的,即在任一时刻,任一地点存在唯一的值。如果我们 的讨论没有一个确定性的基础,那所有的推演都将变得极为困难(模糊数学目前提供的帮助很少)。而且确定状态本身就是一个极为重要的简化过程。因为一般我们 可以建立Markov模型,使得系统的演化只与系统当前的状态有关,而与系统的历史状态无关,因此大大减少系统模型的参数。
   其次,状态演化的结果必须仍然处在态空间中,否则我们在该空间中建立的理论就存在着"盲点",存在着失效的可能。
   第三,我们研究的不是单个状态的演化,而是综合考虑相邻的状态。
   在软件世界,理论物理的这些真知灼见依然有效,只是在所有的概念前加上了"有限"这个修饰语。有限状态机(Finite State Machine)正是理论计算机科学研究的基本模型。所有的计算机都可以看作是有限状态的,因为所有的内存和硬盘能够表示的状态数是有限的。目前计算机科 学中几乎所有重要的理论成果都和有限自动机理论相关。在软件编制的过程中,我们第一步所要做的也是确定系统的状态。与物理系统所不同的是,我们认为物理系 统的状态及其演化规律是客观存在的,而软件系统中的规则是由开发者确立的,我们必须尽一切可能使得系统的状态能够被确定下来。例如,我们编制getXX ()和toString()等函数来暴露系统的状态,以确保系统状态的可观测性;使用assert断言来确保函数执行时的状态;尽量减少函数的副作用来避 免依赖函数调用历史。软件世界中态空间不完备的例子最著名的就是Y2K问题。所以很多人说,软件中最大的bug就是地址空间不足,因为这是任何技术手段都 无法解决的问题。


只有注册用户登录后才能发表评论。


网站导航: