本节书摘来自华章出版社《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》一书中的第1章,第1.3节,作者:[美]爱德华·阿什福德·李(Edward Ashford Lee),更多章节内容可以访问云栖社区“华章计算机”公众号查看
1.3 模型在设计中的作用
本书为在Ptolemy II中理解和建立模型提供了一个框架,更广泛地说,这是理解建模中的关键问题并对复杂异构系统进行仿真的一个框架。该主题如此广泛,使得单一的一本书难以涵盖所有对系统设计师有用的技术。在本书中,我们关注那些描述动态系统(dynamics)的模型,或者那些描述一个系统或子系统如何随时间变化的模型。我们并不关注那些主要侧重静态结构设计的技术(例如,软件模型或3D模型设计所用到的UML类图)。因此,本书中所有的模型都是可执行的。我们把模型的执行称为仿真(simulation)。
图1-2中展示了系统实现过程的三个主要部分:建模、设计和仿真。建模(modeling)是一个通过模拟而获得对系统更深入了解的过程。模型模拟了系统并反映系统的属性。动力学模型具体说明了系统需要做什么,即它对所处环境的变化做出怎样的反应,以及随时间发生怎样的演化。设计(design)是对工件(如软件组件)的结构化创建,用以实现特定的功能。它指定一个系统如何实现所需的功能。仿真(simulation)展示了模型在特定环境中的行为。仿真是进行设计分析的一种简单的形式,它的目标是使得我们可以观测设计的属性,并使设计可测试(testing)。在本书中,我们所讨论的模型可以经受更为详细复杂的分析形式,比如说形式验证(formal verification)。在其最一般的形式中,分析是一个可通过解剖或划分成更小、更容易分析的部件(piece)来获得对系统更深入了解的过程。它指明了为什么系统能做什么(或不能做什么)、模型应该做什么。这里,除了仿真,我们将其他的分析技术都留给其他的书籍来解释。
![407a874c21780a1a9f90a5f6ac973cced5f14c39](https://i-blog.csdnimg.cn/blog_migrate/3aa1bdffcd63860fa5fa3d2352341810.png)
如图1-2所示,设计过程中的三个部分是相互重叠、相互循环的过程。通常,设计过程始于建模,目的是为了理解问题及制订解决问题的策略。
建模在现代设计过程中扮演核心角色。基于模型的设计(model-based design)的主要原则是:最大限度地利用建模去构建更好的设计。模型必须相当准确,当然,它们也必须是可理解和可分析的,这样才是有效模型。一个模型必须具有一个明确的含义(清晰的语义),才能做到可理解和可分析。
模型用建模语言(modeling language)来表达。比如,有些程序是用Java或C语言编写的,所以这些编程语言实际上就是程序的建模语言。如果表述模型的语言具有清晰的、明确的意义,那么这个建模语言就有强语义(strong semantics)。例如,以下例子所示,Java的语义强于C。
例1.1 假设一个程序的参数是int型。在Java语言中,这个数据类型有良好的定义,但在C语言中就没有。例如,在C语言中,int型可能表示16位的整型也可能表示32位的整型。程序的行为可能完全不同,这取决于提供了哪种实现。特别是,16位整型比32位整型更容易发生溢出。
补充阅读:系统模型与系统实现
模型必须被谨慎地使用。Kopetz准则(以维也纳工业大学的Hermann Kopetz教授的名字命名)告诉我们:很多我们称为系统属性的性质(确定性、实时性、可靠性),实际上并不是已实现系统的属性,而是系统模型的属性。
Golomb (1971)强调理解模型和被建模事物之间的区别。他有一个著名的说法“你永远不会从地图上钻出石油来!”但是,这丝毫不能降低地图的价值!考虑确定性(determinism)即可。如果模型为每个特定的输入都只产生一个独立定义的输出,则模型是确定的(determinate)。如果对于任意特定的输入有多个可能的输出,则模型是非确定的(nondeterminate)。即使这看起来是一个简单的定义,但是这其中也有许多微妙之处。“特定输入”是什么意思?输入到达的时间重要吗?“唯一确定的输出”是什么意思?需要考虑当硬件执行失败时系统会做出怎样的行为吗?
任何有关物理上“已实现的”系统的确定性陈述,从根本上来说,是一个宗教或哲学论断,是不科学的。几乎可以断言的是,没有真正的物理系统是确定的。例如,当它被毁坏时是如何表现的?或者反过来断言,物质世界中的一切都是注定的,显然这是一个很牵强的却又难以反驳的、无用的概念。
然而,对于模型却可以明确断言其确定性。例如,由一种编程语言定义的程序可能是明确的,因为它的返回值仅仅取决于它的参数。甚至可以说,没有执行的程序实际上也是确定的(可能因硬件失效而无法产生返回值)。程序是一个定义在形式框架(formal framework)(语言的语义)下的模型(model)。它抽象地对机器的执行进行建模,省略了一些信息。对于这种模型来说在任何时间提供输入都无法区别,因此“时间”不属于“特定输入”的范围。输入/输出仅仅是数据,而程序定义了输入和输出之间的关系。Box和Draper(1987)支持这种模型的观点,他们表示,“本质上,所有的模型都是错的,但是有些是有用的”。模型的有用性取决于模型的保真度(fidelity),即模型模拟系统的准确程度。但模型永远只是一种逼近。
很多流行的建模语言都是基于弱语义(weak semantic)的框图。很多建模语言常采用框图符号而未对框图之间的连线给出精确的定义,对组件间的交互描述不够清晰(参看1.6节补充阅读:UML、SysML和MARTE中的角色)。弱语义的建模语言会更加难以分析。它们的价值反而在于利于人们在非形式化地交流设计概念时使用。