基于HLA的多次仿真运行机制研究
- 格式:doc
- 大小:72.00 KB
- 文档页数:7
基于HLA的多次仿真运行机制研究
摘要:随着基于HLA的分析仿真系统对问题分析的需求,对大量不同的方案进行多次、多样本的“批处理”运行已经成为目前仿真应用的重点。对此,在介绍战争分析仿真实验方法、仿真引擎基础上,针对样本仿真和参数化样本仿真运行模式给出基于HLA的多次仿真控制的解决方案,并针对多次仿真运行过程中的稳定性和可靠性进行了讨论,通过原型系统开发,对基于HLA的多次仿真运行机制进行了验证,证明了其合理性和可行性。
关键词:战争分析仿真实验;仿真引擎;多次仿真;参数化样本仿真
中图分类号: TP391. 9 文献标识码: A
1 引言
高层体系结构HLA(High Level Architecture)作为支持分布交互仿真技术的典型代表,能够支持不同类型、不同规模、不同复杂程度的仿真需求。由于HLA的应用日益广泛,基于HLA的仿真系统逐渐成为不同领域、不同层次广泛采用的分布式仿真系统。但是,由于目前支撑HLA的RTI(Run-Time Infrastructure)及其相关开发工具(例如PITCH公司的pRTI、AEgis公司的LabWorks、国防科技大学的KD-RTI、StarLink等)没有提供多次仿真运行控制管理的功能,因此,当前国内外HLA仿真系统在进行研究和开发时,多数用于训练仿真和武器装备仿真,即使有些用于分析仿真,仍然是尚未或很少进行过基于HLA的多次仿真机制研究,执行的依旧是单次仿真,对于多次重复仿真需要人工操作,其工作繁琐并且可能出错,没有一个很好的解决方案。
尤其是现在探索性分析方法[1]已成为仿真领域的一个研究热点。国防大学基于探索性分析策略而提出的战争分析仿真实验方法[2],强调在高度复杂和不确定条件下,按照自顶向下探索性建模的思路设计多维分析空间,并通过大量重复可控的计算实验,探索战争规律。它作为一种面向高层的特殊分析仿真,强调对分析人员在各种想定背景条件下设计规划的多种方案,以及各种方案的各种可能因素,进行多次重复的“批处理”实验,以便得出期望值、方差等多种统计结果或者进行多维数据分析得出启示性结论。对于这种多方案、多样本[3]的仿真,在一定程度上,更加强调人不在回路,以便较好地完成运行次数多、实验规模大、仿真系统复杂的运行过程,而这就需要一个合理的运行机制。
本文针对战争分析仿真实验对大量不同的方案进行多次、多样本的“批处理”运行的特点,着重研究基于HLA的多次仿真机制,在介绍仿真引擎基础上,针对样本仿真和参数化样本仿真运行模式给出基于HLA的多次仿真控制的解决方案,最后针对多次仿真运行过程中的稳定性和可靠性进行了讨论。 2 仿真引擎
国防大学在研的战争分析综合仿真实验环境[2]是以战争分析仿真实验为指导,立足于战争层面,针对战争问题进行仿真实验分析的一个开放式的公共平台。它包括仿真实验设计系统、仿真实验运行系统和仿真实验综合分析系统。
仿真实验运行系统(Simulation Experiment Run-Time System, 简称SE_RS)[3]是通过网络集成模型、数据等资源构建的虚拟环境,与其他两个系统是通过访问数据库或数据文件来实现松耦合关联,目的是实现数据的无关性,便于系统的独立开发和扩展。SE_RS由仿真引擎、各类模型/仿真系统和一些功能性工具组成。仿真引擎[3]是其核心,它依照模拟脚本[3]与模型/仿真系统的映射关系建立起各个模型的连接和运行,按照行动方案[3]仿真逻辑建立仿真推进机制,负责仿真实验运行过程中的时间推进、模型调度运行、仿真实验控制,并按照要求输出分析数据。而模型/仿真系统主要包括组件模型、独立仿真系统、基于HLA的仿真系统和基于Agent的模拟系统等[4]。
分析仿真是面向实际决策问题的,其分析结论通常建立在反复分析的结果基础上,因此具有对仿真数据进行多次仿真运行的特点,以便通过对多次输出的数据进行统计分析和比较得出统计意义上的分析结论。对此,仿真引擎主要采用蒙特卡洛仿真试验,对模拟脚本进行多次重复仿真。对于仿真中的随机数种子,是由仿真引擎生成而发布给SE_RS的,目的是为了在新的仿真中,仿真模型中能够产生新的随机数。由于仿真实验设计系统支持参数化想定[3]的生成,并根据分析策略(如单一分析、敏感性分析和探索性分析),仿真引擎支持三种仿真运行模式[3]:单次仿真、样本仿真、参数化样本仿真。
对于样本仿真、参数化样本仿真而言,SE_RS不仅仅强调对同一个模拟脚本的多次仿真,也强调对多个模拟脚本的仿真以及多个模拟脚本的多次仿真,因此,研究仿真引擎对模型/仿真系统的多次仿真的机制是实现这两种运行模式的基本要求。
对于组件模型而言,多次仿真程序实现相对比较容易,但是对于HLA仿真系统、Agent仿真系统实现则存在一定难度;而对于独立仿真系统则需要人为地干预,通过人工组织、手动反复运行来实现。下面对HLA仿真系统的多次仿真运行机制进行研究。
3 基于HLA的多次仿真实现机制
基于HLA的多次仿真实现困难在于:RTI及相关工具集不提供多次仿真管理机制,这就需要开发相应的仿真引擎来控制仿真系统的反复运行;同时,仿真成员为应对成员中模型的反复运行,也需要进行结构改造以便配合仿真引擎的控制和调用。另外,由于仿真的重复运行,则表明想定时间运行至结束时,需要再次进行复位,将想定时间设置为初始时间,以便支持想定时间的重新推进,因此,存在一个问题,即在已构建的联邦仿真系统中,因为所有成员没有退出联邦,而RTI不支持时间的回滚,也就是说,各个成员只能够向前推进时间,而不能随意后退时间,如果此时重新仿真,强制修改RTI逻辑时间,就会导致系统错误,使得基于RTI的仿真成员无法进行想定时间的复位完成多次仿真。因此,保证想定时间推进的反复是多次仿真必须解决的问题。对此,这里提出两种方法:
3.1使用相对时间表示想定时间
RTI中的时间是逻辑时间,表示非真实的时间概念。时间t可以表示任何真实时间。那么可用t表示任何时刻的想定时间,即使t时间不同,但仍可以表示同一个想定时间。例如,第一次仿真时,将t_start = 100表示想定时间的早上8:00,而想定时间步长可以用逻辑时间推进步长dt表示,如果推进到t_end = 1000,表示仿真结束时间即想定时间为早上10:00;在第二次仿真开始前,由仿真引擎来判断并设置第n个dt后,命令开始第二次仿真,此时的仿真时间即t = t_end + n*dt表示第二次仿真中的想定开始时间的早上8:00。通过该方法,即使仿真系统中成员都没有退出联邦,仿真成员仍然能够实现想定时间的重新装载并进行推进,直至仿真停止。该方法的关键是仿真引擎需要在检测到仿真结束后,采用一定的算法重新设置想定开始时间,建立逻辑时间和想定时间的映射关系,保证时间推进的一致性,并确定仿真引擎需要在推进多少个dt后才开始新的仿真。
3.2采用重新构建联邦的方法
采用该方法,不必像第一种方法关心各仿真成员内部的时间推进是如何进行设置的,只需关心仿真引擎和仿真成员之间的交互关系,保证联邦的建立和仿真的重新执行。在一定程度上,该方法易理解且易实现,在应用实验中,仿真引擎就是采用该方法较好地完成多次仿真的任务。其运行控制过程见图1。
图1表明多次仿真的运行控制是需要仿真引擎和仿真成员进行交互的。仿真引擎通过记录仿真成员发送的状态来监测和控制成员的运行。基于重新构建联邦的方法描述如下:
Step1:仿真引擎创建联邦,各成员加入联邦,仿真引擎记录各成员“已加入联邦”状态;
Step2:仿真引擎读取想定数据、行动方案初始化成员中的实例并推进仿真,仿真成员开始时间推进后,发送“已进入仿真”状态给仿真引擎;
Step3:仿真引擎判断“仿真结束”,发送该命令给各成员,此时成员停止仿真推进,并进行删除实例、变量复位等一系列的程序操作,然后发送“××成员仿真结束”;
Step4:只有当仿真引擎判断所有成员都处于“××成员仿真结束”状态时,相应地,进行部分变量复位操作,并将样本标识加1,设置新的随机数种子,然后发布命令“退出联邦”; 图1 仿真引擎运行控制过程 Step5:各成员在退出联邦之前,发送“××成员退出联邦”状态,然后退出联邦,并开始计时,等待Federate_Wait_T;
Step6:只有当判断所有成员都处于“××成员退出联邦”状态后,仿真引擎才能退出联邦并删除该联邦,然后重新建立并加入该联邦,然后等待WASE_Wait_T;
Step7:各成员经过Federate_Wait_T后,加入联邦并发送“已加入联邦”,而仿真引擎经过WASE_Wait_T后,此时各成员已重新加入联邦,仿真引擎记录各成员“已加入联邦”状态;
Step8:返回Step2,直至样本结束。
其中,Federate_Wait_T为仿真成员等待时间,WASE_Wait_T为仿真引擎等待时间。根据多次实验运行的测试,规定:
WASE_Wait_T≥2×Federate_Wait_T,且,Federate_Wait_T≥5秒;
该方法的关键是设置WASE_Wait_T和Federate_Wait_T,因为当成员退出联邦后,是无法与仿真引擎进行通信的,所以需达成协议,规定仿真成员加入联邦前,仿真引擎必须建立联邦,否则出错,这时就需调整它们的等待时间。设定5秒是在多次实验过程中得到的较为折中的等待时间值;不过,随着仿真规模的扩大、成员的增多,可以设置Federate_Wait_T>5秒。但在仿真实验运行时,仍需要测试,以保证仿真引擎与仿真成员正常加入联邦。
仿真引擎与仿真成员的交互是通过FOM(Federation Object Model)中的交互类实现的。由于各个成员进行多次仿真操作是一致的,需采用通用的仿真应答来应对仿真引擎的控制。因此,通过建立标准的仿真运行控制接口,仿真引擎可以统一管理和控制各个仿真成员完成多次、多样本的大规模运行。其主要接口包括:
1)SimInitScenario(初始化想定交互类):发送仿真运行的基本参数,如想定时间、想定标识、行动方案标识、运行标识等,完成仿真系统的仿真数据准备;
2)SimSetState (状态控制交互类):发送仿真过程控制等信息,如仿真开始、暂停、继续和结束等,并发送每次仿真的运行参数,如样本标识、样本运行时间、随机数种子等;
3)SimAck (仿真应答交互类):接收来自仿真成员应答信息,如初始化成功、已进入仿真、仿真结束、退出联邦、错误报告等,便于仿真引擎采取相应的控制措施。
4 多次仿真的运行稳定性、可靠性
为支持对大量不确定战争空间的探索计算,SE_RS通常采用参数化样本仿真运行模式,强调多种方案、多个样本的仿真,在一定程度上,更加强调人不在回路。但是,对于仿真次数多、实验规模大、仿真系统复杂的SE_RS而言,由于模型计算、网络传输、内存驻留等不可控问题,都可能导致整个实验的崩溃、或者下一次仿真的中断,对于基于HLA的分布式仿真系统,更有此可能。而如何保证多次仿真的运行稳定性、可靠性以便高效地完成实验,就和仿真系统、管理控制密不可分。
4.1 分布式仿真系统中的容错机制