一种基于行动规则的仿真推演引擎设计与实现*
2022-03-17闫强强
闫强强 何 伟
(陆军炮兵防空兵学院 合肥 230031)
1 引言
行动方案推演系统(以下简称“推演系统”)中的行动方案,由若干基本行动按时序组合而成。各个行动在时间上具有因果关系,前一行动的结果是后一行动的基础。因此,高效拟制行动方案、合理控制行动序列运行,是推演系统不可或缺的核心功能,影响着推演系统的适用性和扩展性。
一般推演仿真引擎,只能解析演练方案中“任务”这一层次,除了通过任务参数影响任务执行以外,不能进一步定制任务,进而难以反映要素演练中个别任务的特殊性。为了实现行动任务可定制、体现要素演练中行动任务的特殊性,本文以任务状态机为基础,综合运用时间步长法和事件高度法,设计一种基于行动规则控制仿真实体行动仿真的引擎。
1)规则配置灵活。把序列化的任务,分解为相对独立的原子行动。每个规则由一个条件和若干个行动组成。根据仿真需要,操作人员从条件库中选择规则触发条件、从行动库中选择适当的行动,绘制任务状态图。
2)行动模型可重用性强。各行动模型之间相对独立,是完成相应行动的封装。对各模型的修改,影响范围主要限制在当前行动中,不会对其它行动效应带来不良影响。
3)构建方法通用性好。规则中条件和行动的粒度小,都是通用的最小单位,可适用于不同的仿真场景。当出现特别的仿真需求,总体构建方法仍然保持稳定,不需要调整,可通过扩展条件库和行动库的方式加以适配。
2 推演方案表示
为了使推演系统正确识别推演方案,必须将其进行形式化描述。
2.1 推演方案模型
推演方案,由若干实体行动方案在时间维度上协调聚合而成(如图1)。
图1 推演方案模型
任务控制是使实体按照既定的任务流程,执行相应的行动模型,并进行临机调整。任务流程直接表现为任务流程图。为了使任务流程图具备良好的可配置性特点,将任务划分为若干个阶段,每一个任务阶段对应一个任务状态。在某个状态,实体受若干规则的约束。
每一条规则由条件和一系列行动组成。从而,以条件和行动为最小可配置单位,建立起全生命期的任务模型,并可把任务状态图作为形式表现。
就单个实体而言,实体行动方案,由若干有序的实体任务(简称“任务”)组合而成。
2.2 实体任务的形式化描述
任务具有三个层次视图:任务状态、规则和行动。
用有限状态机描述任务,一个任务具有多个状态,但在某一时刻,只能处于其中一个状态[1]。执行某任务的过程,即任务自初始状态,在不同状态之间转换直至推进到结束状态的过程;而且,任务结束状态可以是任务执行成功的状态,也可以任务执行失败的状态。任务可表示为
其中S为任务状态集合,Ttrans为状态集内不同状态之间的转移集,s0为起初状态(任务启动后,以此状态开始任务执行,用于完成任务准备),Sfinal为任务结束状态集(当任务进行到该集合中任一状态,则表示任务结束,而且可反映任务完成的水平)。另外,s0∈S,Sfinal⊂S。
一个任务状态内,存在一条或多条行动规则,具体运行哪条规则取决于相应条件是否成立。任务状态表示为
每个任务状态由若干规则ri(ri∈R,R为规则集)有序组合而成。
在某任务状态内,实体执行满足条件的规则。规则表示为
其中c为规则条件,A为若干原子行动(a1,a2,…,an)的有序组合,strans为此规则执行成功后转移到的任务状态。转移集Ttrans={<r,strans>|r∈R,strans∈S}与中Ttrans一致。如果规则条件成立,则按次序执行规则内的若干行动。若存在多条规则的条件成立,则优先运行排序靠前的规则。
以上涉及的规则条件和原子行动,是描述实体任务的基础,与采用面向对象思想建立的实体模型紧密相关。
3 仿真引擎的设计
基于任务状态图控制任务流程,其核心思想是以状态图为蓝本、以任务当前状态为基础,结合实体状态、战场态势和环境等影响因素,选择规则、执行相应行动,并根据其结果处理任务状态跳转。一方面,状态图中的状态数量、状态规则和规则到状态的跳转关系均可定制,使任务具有良好的扩展性和可配置性;另一方面,任务状态图千变万化,但任务的基本模型相对稳定,对基于状态图控制任务流程无影响。
基于以上抽象,控制多个实体协调一致地仿真推演方案,其关键是控制单个实体正解地判断规则和执行原子行动(图2)。
图2 实体行动控制
规则条件的判断,是规则执行的前提条件,可区分为原子条件和复合条件。
原子条件,从应用需求可分类六类:一是基于时间的条件(T型规则条件)。以事件发生时间为实体行为发生的充要条件。如到指定时间内开通有线、无线通信网。二是基于命令的条件(C型规则条件)。以上级下达的命令为实体行为发生的充要条件。这是适应大多数实体的规则条件。如接到上级火力打击命令时,才对目标进行火力打击行动。三是基于地域的条件(S型规则条件)。以事件发生的地理特征为实体行为发生的充要条件[2]。如光学侦察需要满足现地与目标地的通视。四是基于信息的条件(I型规则条件)。以事件发展变化的标志性事件作为实体行为发生的充要条件。如前方发现我方兵力受损。五是基于请求的条件(Q型规则条件)。以下级实体发出的请求为实体行为发生的充要条件[3]。如侦察分队请求进行油料保障,炮兵连请求进行弹药补充。六是基于兵力的条件(F型规则条件)。以事件处置实体的兵力损耗为实体行为发生的充要条件。如根据兵力的毁伤程度判断出该兵力当前的状态。
复合条件由原子条件组合而成。
4 仿真引擎的实现
4.1 条件判断
分为值比较和逻辑判断两类,都由操作数和操作符组成,其中操作数可为常量、变量和运行时变量。原子条件的逻辑值为真或假,可通过与或非逻辑关系组合成为复合条件。
以装甲兵冲击任务为例,行动集由若干具有优先顺序的行动排列组成,每一个行动对应于实体模型中可执行的仿真行动模型(如图3)。
图3 装甲兵冲击任务
4.2 任务队列调度
实体任务队列,采用“先来先服务”模型,按照任务开始时间升序执行。当仿真时间已推进到下一任务的开始时刻,则停止上一任务、开启下一任务。其流程如图4所示。
图4 任务队列调试示意图
4.3 任务内部状态调度
整个作战过程,由若干断续的任务组成。每个任务由状态机驱动实体执行具体的行动完成,执行时间和顺序由规则确定。加载一个任务,实际是相应的任务状态机启动;任务的状态对应着状态机内的某个状态。状态机,从唯一确定的起始状态开始运行,经历若干中间状态,转入结束状态。在某一状态内,状态机自动按顺序测试状态中的所有规则条件,并优先执行排序靠前且条件成立的规则。若规则执行过程中条件发生变化(即当前规则条件不成立),则转入执行排序靠前且条件成立的规则。当某规则执行完毕且触发跳转,则任务状态发生变更、状态机转入相应状态。
状态机所执行的行动,即为实体的行动,因此,实体模型应包括状态机可能执行的所有行动。同时,由于某些行动执行过程中可能被中断,而且行动恢复还须从中断前的行动状态继续执行,所以实体还应该维护行动的执行状态。
5 仿真引擎关键实现
5.1 条件判断
条件判断是规则执行的前提,只有条件成立的规则才有被执行的可能。条件由基本操作符、操作数、逻辑组合操作符以及括号组成。基本操作符以比较操作为主,主要有“等于”、“小于”、“大于”、“不等于”、“不小于”、“不大于”、以及特殊的“点位于区域内”等。操作数是基本操作符比较的对象。只含有一个操作符的的条件,为原子条件。原子条件,通过“与”、“或”、“非”逻辑组合,形成复合条件。括号用于区分原子条例、改变逻辑组合优先级。原子条件和复合条件都可作为规则条件。
图5 任务内部状态调度示意图
条件中的操作数有三类,第一类是普通常量,当条件形成时就不再变化;第二类是任务常量,根据任务不同而不同,需要在任务初始时进行初始化;第三是实体变量,与实体的某个属性对应。在进行条件判断时,需要三个步骤:一是把条件解析成条件树,以便减小不必要的条件判断;二是统一同一操作符下多个操作数类型;三是按照深度优先原则,判定条件树的布尔值。具体到单个原子条件的判断,先取得各操作数的当前值,再进行操作比较,即得出单原子条件的布尔值。
5.2 规则选择
每一个任务状态,由多个有顺序的规则组成。规则越靠前,其执行优先级越高。一般情况下,当前任务状态的最后一个规则是其主规则,其它规则都是执行此主规则过程中可能会出现的、需要处理的意外情况。每一个规则由一个规则条件和若干行动构成。规则选择,即从任务状态中选择出第一个条件成立且未完成的规则。其中,判断条件是否成立如前所述;判定规则是否完成,由规则内是否存在未完成的行动决定。
5.3 行动执行
基于某种程序语言,实现与任务相关的每个行动,并与特定行动相识对应。利用反射机制,按照指定标识即可执行相应行动。以微软.Net平台为例,其反射机制,包含在System.Reflection命名空间中。通过反射,可以在运行时获得.Net中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件以及构造函数等[4]。还可以获得每个成员的名称、限定符和参数等。.Net中的程序集是自描述的,反射则提供了封装、模块和类的对象。使用反射动态地创建类的实例将类绑定到现有对象,或从现有对象中获取类,然后可以调用类的方法或访问其字段和属性。反射有很多对象,如 Assembly、FieldInfe、Propertylnfo、ParameterInfo等[5]。在仿真控制引擎实现中只用到了Propertylnfo对象,通过该对象可用来获取如下的类似信息,如属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,并获取或设置属性值。本系统是利用Propertylnfo对象来获取和设置相应对象的相关属性的。
5.4 参数映射
任务参数影响任务执行过程和效果,可以反映任务的特殊性。因此,在执行每个任务图之前,有必要把任务参数赋予相关实体。为了减少建模过程中的工作量,建立参数自动映射机制,其实施步骤有以下三节:一是编制任务图时,确定参数序列;二是下达任务时,按次序设定参数序列;三是任务初始化时,利用反射机制将参数序列赋予对应实体属性。
6 结语
推演仿真引擎,控制时间推进,管理实体成员,调用实体模型、规则模型和交互模型,是推演系统的核心部件。为了实现行动任务可定制、体现演练任务的特殊性,本文设计了基于行动规则的仿真推演引擎,根据判断规则条件、调用规则,使各实体按照任务状态图执行相应行动模型,同时以事件的形式进行交互,可以为方案推演提供技术支撑。