焦思涵
摘要:分布式仿真是研究分布式系统或者通过分布式计算对大规模复杂系统进行仿真的一项非常重要的技术。在分布式仿真中,仿真成员之间需要进行频繁的数据通信,因此数据通信的性能对整个仿真的运行速度和性能将产生重要影响。在HLA的仿真系统中,联邦是用来达到某一特定仿真目的的分布仿真系统。文章对分布式仿真技术进行了研究。
关键词:分布式仿真技术;RTI;XML;仿真成员;数据通信 文献标识码:A
中图分类号:TP391 文章编号:1009-2374(2015)18-0028-03 DOI:10.13535/j.cnki.11-4406/n.2015.18.015
1 分布式仿真概述
分布式仿真是研究分布式系统或者通过分布式计算对大规模复杂系统进行仿真的一种非常重要的技术。一方面,把分布在不同地理位置的仿真模型连接起来,组成一个仿真联邦,共同完成仿真任务;另一方面,也可以把复杂的仿真计算分布在不同的计算机上并行地运行。分布式仿真主要应用于军事、制造、娱乐、人员培训等方面。由于供应链往往涉及不同地域的多个企业,分布式仿真也广泛应用于供应链的建模和仿真。
我们使用基于HLA/RTI的分布式仿真的高层体系结构来实现仿真。在HLA的仿真系统中,联邦是用来达到某一特定仿真目的的分布仿真系统,它由若干相互作用的联邦成员构成,从而使跨平台仿真变得更加容易。在跨平台的仿真中,我们面对需要传输大量的带有标识的数据的问题。为解决这个问题,我们提出了采用以DOM树方式的XML文档的方案来实现表现、保存和传输我们需要的仿真数据的解决方法。使用微软的MSXML的DOM Parser的解决方案,通过Visual C++来进行XML的编程,主要使用了其中的Document接口,并将其与仿真系统的仿真前端结合在一起,完成仿真系统内大量的数据传输。采用了这种方式后,使得数据的格式和表达具有跨平台的灵活性和独立性。
在分布式仿真中,仿真成员之间需要进行频繁的数据通信,因此数据的通信效率对整个仿真的运行速度和性能将产生重要影响。分布式仿真是研究分布式系统或者通过分布式计算对大规模复杂系统进行仿真的一种非常重要的技术。一方面,把分布在不同地理位置的仿真模型连接起来,组成一个仿真联邦,共同完成仿真任务;另一方面,也可以把复杂的仿真计算分布在不同的计算机上并行运行。分布式仿真主要应用于军事、制造、娱乐、人员培训等方面。
仿真克隆是近几年刚刚出现的一个新的仿真优化技术,目的是避免或减少仿真中的重复计算,从而提高仿真的执行效率和效能,提高仿真软件的健壮性及仿真优化能力。其基本思想是,在仿真运行过程中,当系统的状态达到某种条件,或者系统到达某个决策点而面临决策的时候,仿真过程“克隆”自己,从而产生新的仿真,原有仿真及其克隆分别沿着不同的路径同时继续运行,探索和试验不同的选择、策略和情形(Scenarios)。本课题以分布式供应链为研究背景,在PETRI网矩阵模型的基础上,研究基于HLA的分布式仿真的克隆技术,在HLA的分布仿真中采用XML文档格式来实现带标记数据的传输。取得的结果也是初步的,尚存在以下问题:
1.1 仿真成员的“克隆”
仿真成员通常是仿真程序,如何在需要克隆的时候,仿真成员复制自己,并使各个情形沿着不同的路径运行,尚没有一个较通用的解决方法。在这个成员的复制的过程中,需要获取成员的全部的状态数据,从而复制出相同的成员。在建立这种结构化的可标识的数据时如何采用XML的文档格式。
1.2 仿真代码的可重用性
仿真成员的互操作性和仿真代码的可重用性是HLA的两个重要目标,如何使现有仿真代码不经修改即可支持克隆技术,其中的仿真成员的互操作需要大量的可标识的数据文档,而仿真代码的重用需要对仿真代码的结构使用XML文档进行标记等,尚需进一步研究。
1.3 计算量平衡问题
在分布式仿真中,如果参与仿真的计算机之间实现计算量平衡,可以有效减少等待时间。如何在不同的计算资源之间重新分配计算任务,如何用XML表示计算机的计算状态等,也是一个非常重要的问题。
在分布式仿真中,仿真成员之间需要进行频繁的数据通信,因此数据通信的质量和效率对整个仿真的运行效果和性能将产生重要的影响。笔者在本课题中采用XML实现基于HLA的分布式仿真中的数据交换。就是要解决在上面的仿真成员的“克隆”、仿真代码的可重用性以及计算量平衡问题中的仿真数据的跨平台传输,从而实现在分布式仿真中的数据交换。
2 分支仿真中的数据传输
2.1 仿真分支方法
仿真克隆是近几年刚刚出现的一个新的仿真优化技术,目的是避免或减少仿真中的重复计算,从而提高仿真的执行效率和效能,提高仿真软件的健壮性及仿真优化能力。其基本思想是,在仿真运行过程中,当系统的状态达到某种条件,或者系统到达某个决策点而面临决策的时候,仿真过程“克隆”自己,从而产生新的仿真,原有仿真及其克隆分别沿着不同的路径同时继续运行,探索和试验不同的选择、策略和情形(Scenarios)。采用这种技术具有下列优点:(1)在克隆之后,多个情形同时运行,有助于提高仿真软件的健壮性。在仿真结束的时候,将会同时得到多个仿真结果。在多CPU的场合,由于各个情形独立运行,从而增加仿真的并行度,提高仿真运行速度;(2)在克隆之前的计算量被克隆之后的所有情形所继承和共有,从而避免或减少了重复计算;(3)在分布式环境下,并非组成仿真联邦的所有成员均同时克隆自己,那些参与克隆的成员可以共享那些没有克隆的成员,从而减少了计算量。初步的试验结果显示,该技术可以显著减少仿真运行时间。
2.2 在仿真中的RTI服务
如图1所示,本设计中创建了一个包含两个成员的联邦。一个成员是对制造业流水线的四种加工策略(FIFO、EDD、SPT、SLK)进行仿真的应用程序(称为Simulation),另一个成员是用于监控仿真运行的可视化人机交互界面(称为Monitor)。
其中,交互类Control有两个参数,ConCode表示控制命令的编号,ConData表示控制命令的参数。同样,交互类Report也有两个参数,RepCode表示报告的状态编号,RepData表示状态参数。
如图2所示,描述了本设计的基本交互过程和在该过程中主要用到的RTI服务。
2.2.1 声明管理服务。
第一,publishInteractionClass()。联邦成员使用publishInteractionClass()服务来公布指定的交互类,表明联邦成员可以生成指定交互类的交换实例。在本设计中,Simulation联邦公布交互类Control,Monitor联邦公布交互类Report。
第二,subscribeInteractionClass()。联邦成员利用subscribeInteractionClass()服务来订购指定的交互类。RTI将随后出现的指定交互类的交互实例传给此联邦成员。订购一个交互类就订购了其所有的参数。在本设计中,Simulation联邦公布交互类Report,Monitor联邦公布交互类Control。
2.2.2 对象管理服务。
第一,sendInteraction()。联邦成员使用sendInteraction()服务来向联邦发送交换实例。在联邦中,交互实例用于表示瞬间的事件或任何其他不适合用持久的属性状态来表示的信息。
第二,receiveInteraction()。receiveInteraction()是在FederateAmbassador中定义的回调函数,用来通知联邦成员所订购的交互实例已被发送。
2.3 仿真中的数据传输
整个分布式仿真的数据传输可以分为从仿真前端到仿真程序和从仿真程序到仿真前端两个部分。
2.3.1 从仿真前端到仿真程序。包括配置文件和监控命令两部分组成。如图3所示:
第一,配置文件。为用户提供了自定义仿真参数的功能,增强了仿真软件的可用性,同时也提高了用户操作的效率。仿真配置模块是由三个部分组成的,包括新建配置文件、打开原有的配置文件和保存当前的配置文件。如果用户需要定义一个全新的仿真模型,那么可以新建配置文件,将仿真参数逐个填入其中;如果用户只想在原有仿真模型的基础上稍作修改,那么可以选择打开原有的配置文件;如果用户新建或修改完后,需要对当前配置进行保存,以备下次使用,那么可以选择保存当前的配置文件。在采用XML标准时,数据文件的树状结构如图4所示:
第二,监控命令。向远端仿真程序发布命令以高层体系结构HLA作为数据传输的桥梁。仿真前端向远端仿真程序发布的命令包括发送配置文件,命令仿真开始,暂停或中止某个仿真成员的运行、向远端仿真程序请求提供仿真运行数据以及修改仿真的某个参数等。在采用XML标准时,数据文件的树状结构如图5所示。
2.3.2 从仿真程序到仿真前端。包括系统状态分支运行状态两部分组成。如图6所示:
仿真前端从远端程序接收返回的数据包括仿真在某个分支触发条件下的分支情况、应仿真前端请求发送的仿真运行数据以及某个仿真成员退出仿真时返回的数据等。包括系统状态和分支运行状态的仿真状态数据。
在采用XML时,数据文件的树状结构如图7所示。
本课题的研究基于仿真“克隆”的思想,主要应用的是并行和分支技术。分支过程监视界面为用户提供了观察仿真“克隆”过程的窗口,将远端仿真程序的运行情况直观地显示在仿真前端,用图形代替了数据,形象地展示了仿真“克隆”这一思想。若想更加深入地了解仿真运行的情况,必须根据远端仿真程序返回的数据进行分析。返回数据显示界面将远端程序返回的数据显示在仿真前端的人机界面上,方便用户观察并加以判断做出决策。
2.4 小结
本文主要介绍了基于RTI服务的仿真分支方法,从RTI的服务和仿真数据的XML文档结构两个方面介绍。在仿真分支基于RTI的数据传输中,采用XML文档来实现数据的结构化表示,实现数据的可标记的识别,同时也可以体现数据的层次化结构。
参考文献
[1] 肖田元,张燕云,陈加栋.系统仿真导论[M].北京:清华大学出版社,2002.
[2] 熊光楞,肖田元.连续系统仿真与离散事件系统仿真[M].北京:清华大学出版社,2000.
[3] Averill M.Law,W.David Kelton.Simulation Modeling and Analysis(Third Edition).McGraw Hill,2000.
[4] Steven Holzner.XML完全探索[M].北京:中国青年出版社,2001.
[5] 邵敏,李力鸿,郑震坤,何川,等.XML编程实践[M].北京:清华大学出版社,2002.
[6] 但正刚,李顺,等.XML高级网络应用[M].北京:清华大学出版社,2002.
[7] Fabio Arciniegas.C++XML高级编程指南[M].北京:中国科学出版社,2002.
[8] Frederick Kuhi,Richard Weatherly,Judith Dahmann.计算机仿真中的HLA技术[M].北京:国防工业出版社,2003.
[9] 卫军胡.半导体制造系统的仿真调度方法及其应用研究[D].西安交通大学,2001.
[10] 姚益平,时向泉,李国宽,王勇军.新一代分布交互仿真体系HLA[A].1999全国仿真技术学术会议论文集[C].1999.
[11] 周智洪,肖璋,刘荣辉.基于C++的XML使能技术原理及应用[J].暨南大学学报(自然科学版),2004,25(5).
[12] 李勇军,冀汶莉,马光思.用DOM解析XML文档
[J].计算机应用,2001,21(8).
[13] 王芳,李正凡.用SAX解析XML文档的实现方法
[J].华东交通大学学报,2004,21(1).
[14] 须文波,徐悦.解析XML文档[J].电子计算机,2001,(150).
[15] 朱前飞,高芒.XML解析技术研究[J].电脑开发与应用,2004,17(11).
(责任编辑:周 琼)