1.3.2 面向对象的模型组合方法
20世纪90年代基于SIMULA发展起来的面向对象技术,促使基于模块化组合的仿真向面向对象的仿真组合方法发展。面向对象是一种有良好软件工程方法和程序设计语言支持的系统分析与设计的概念框架。面向对象技术已经是一种非常成熟的计算机技术,将面向对象的思想方法和支持技术引入仿真领域,便于仿真技术人员对领域知识进行抽象,使他们无论在建模概念还是在仿真软件设计中,对系统中实体、属性、行为和关系等,都能够进行更为自然的表达,而且有利于软件代码的修改、扩展和重用。
仿真研究的对象是系统。系统是由相互联系的各个组成部分构成的整体,它能在各组分的共同作用下完成某一特定的功能。进行系统分析时,可以在一定的准则下将系统分解为子系统,子系统还可继续分解为更低层次的子系统,直到不必或不可分解为止。通过这一递归分解过程得到的最小组分称为系统的元素。属性、行为和关系是系统/子系统的基本特性。因此,面向对象技术的应用有利于解决模型的工程化设计问题,即在面向对象方法的支持下形成类似于软件工程的“模型工程”技术。20 世纪90 年代发展起来的面向对象仿真研究,主要解决仿真模型和仿真软件设计的对象化问题。例如,CSIM发展库发展为C++SIM,JavaSim,SIMSCRIPT开发面向对象的版本SIMSCRIPT O-O等。
在面向对象基础上,基于公共模型库(Common Library Approach,CLA)的组合仿真方法依赖于一个公共的可重用模型库,模型库建立在公共的假设及数据传输协议之上。模型库包含多种形式的对象,如装备系统模型、想定等,它们都不是可以独立运行的仿真应用。CLA方法通常具有特定的仿真系统结构和仿真运行环境,可为上述组件提供各种服务、工具和接口,方便模型的集成并最终形成满足特定需求的仿真应用。
1991年,美军就针对工程层次的联合建模与仿真启动了JMASS(Joint Modeling and Simulation System)计划。JMASS本身并不是仿真应用,它只是一个仿真开发环境。JMASS由三个主要部分构成:仿真体系结构,主要由仿真引擎及相关服务构成;接口标准,用于定义模型与仿真环境之间的接口;开发模型组件及装配模型组件的集成开发环境。JMASS制定了一系列组件标准以及由C++语言描述的接口标准,用户开发的模型只要符合上述标准,即可通过JMASS集成开发环境加入仿真引擎调度,从而组合成单架构、多线程的仿真应用。JMASS允许在编译时指定模型参数,从而生成通用模型的不同用户定制版本,提高了模型的可重用性及可组合性。JMASS提供了“端口”机制允许特定格式的数据交换,但并不能保证交换数据的有效性。虽然JMASS提供了日志、持久化、空间、环境多种仿真对象接口,并通过Component、Player、Team等对象概念提供了一个很好的构建模型库的框架,但由于它开发和设计时间较早,还未使用当前很多最新的仿真方法和技术,因此,该系统本质上是一个封闭系统,而且不支持仿真模型的动态组合。
1995年,美国国防部实施了JWARS(Joint Warfare Simulation)项目的研究和开发计划。JWARS是一个“以C4ISR为中心”的闭环仿真系统。JWARS从作战概念出发,将现代体系对抗中的战场空间实体间在感知、信息处理、决策和行动过程中的关系模式在战役层次上进行抽象,形成了以空间管理、移动管理、事件管理、通讯管理和仲裁管理为组合基础,层次化的战场空间实体为组件的动态变结构的仿真系统,可以持续支持未来新型武器装备实体模型的组合和集成。JWARS仿真系统利用了20 世纪90 年代面向对象的软件工程方法,主要基于统一的软件框架开发和集成模型,没有从仿真模型的语义和概念出发管理和集成仿真模型,降低了仿真模型开发与集成的可组合性。
Swarm是圣菲研究所于1995 年开始研制的建模平台。SFI希望通过建立Swarm系统,给研究人员提供一套标准、灵活、可靠的软件工具。Swarm平台是一个基于Agent建模的标准软件工具集,它定义了通用的模拟框架,研究人员可以在这个框架中定义自己的应用。Swarm是使用Objective C语言开发的,在早期的版本中编写Swarm的应用程序也用Objective C,从Swarm 2.0版开始提供对Java语言的支持,将来可能支持JavaScript、C++、Python、Perl等语言。
仿真模型和仿真模块功能的对象化、类化和交互的消息化可以避免函数指针的使用,支持仿真公共对象库的建立,仿真模型框架和仿真软件体系结构也更加清晰,开发人员也易于理解和使用基于面向对象的仿真系统。但模型单元和仿真软件对象与仿真系统和应用之间耦合关系紧密,独立性和扩展性不强,缺乏仿真对象的语义信息,仿真系统模型和仿真系统对象不容易支持新的仿真应用开发,不利于多领域联合仿真系统的开发。为此,在面向对象的基础上,需要加强仿真对象的独立性和重用性,增加仿真对象的语义信息,支持基于组件的仿真组合方法。