基于“墨子”的空中拦截任务程序二次开发与仿真

2023-03-02 02:16高哲晟祝世兴
兵器装备工程学报 2023年2期
关键词:触发器敌方墨子

高哲晟,祝世兴

(中国民航大学 航空工程学院,天津 300300)

1 引言

2015年2月,美国国防部副部长罗伯特·沃克提出将投入更多资源开发作战仿真软件。2016年10月,美国空中机动司令部、海军战争学院以及其他多个国家军事学院采纳了Matrix公司开发的Command:Modern Air/Naval Operations Pro(指挥:现代海空行动专业版),作为模拟推演训练工具[1]。之后Matrix公司增加了地面、空天等作战域的模型,2019年推出了更加全面的Command:Modern Operations。

墨子联合作战推演系统由北京华戍防务开发,涵盖了CMO的大部分模型和内容,简称“墨子”。它针对现代陆海空天电多军种联合作战行动设计,仿真颗粒度达到了战役级、任务级。系统模型丰富、功能完备、可扩展性强,能够用于作战概念开发和验证、作战方案评估、指挥员训练、武器装备论证、军事人工智能研究等[2]。

使用墨子模拟大规模的空中拦截作战仿真时,有手动建立任务和通过事件功能激活预设的拦截任务2种方法:手动指挥虽然可以达到较高的逼真度,但操作繁琐,容易错漏,缺乏可重复性;而使用通过事件功能激活预设的拦截任务时,无法控制任务的详细指控规则。如敌方目标出现时,我方会不加判断地预设战斗机前往拦截。若目标实为诱饵,则会浪费我方兵力资源;若目标为性能远超己方的战斗机,则可能造成兵力的无效牺牲,所以真实度较差。

墨子使用了多分辨率建模技术[3],兼顾推演系统大而全的功能,具备良好的接口和二次开发潜力,可根据用户需求定制提高局部的仿真颗粒度。使用墨子中的事件功能并结合LUA脚本,能够实现大部分作战单位的行为控制。

2 仿真的作战规则假设

空中拦截任务规划程序基于以下假设:

1) 在战争期间,当我方发现不明空中目标,但无法确定其具体型号和敌我属性,为谨慎起见,会立刻从拦截时间最短的基地,优先派出先进的战斗机前往侦察,准备进行空中拦截。未确定目标为敌方作战目标前,禁止开火。

2) 战斗机起飞需要一段时间,在这段时间内,若发现目标没有威胁,则取消战斗机升空计划和拦截任务;若发现目标为高价值目标,则保持之前的任务;若发现目标为低价值目标,则换用低成本战斗机执行任务,节省兵力。

3) 当目标被摧毁后,取消战斗机的作战任务,执行任务的战斗机进入“未分配”状态,可自动支援其他作战单位,直到其满足返航的油量或弹药消耗条件。

3 空中拦截任务规划程序设计

空中拦截任务规划程序,首先通过对比数据库和实时情报的差异,确定拦截对象,并获取该对象的属性。然后基于预设的拦截规则,选择我方拦截时间最短的基地,并调派相应型号的战斗机执行任务。

程序的难点在于情报数据库与实际情报的同步和识别。因为在一个仿真时步内,可能同时出现或减少多个目标,而触发器无法触发多次,导致在情报分析和识别目标时,发生错乱。

为解决该问题,设计了一种延迟触发方法,首先用检测情报变化的触发器激活1 s的延迟触发器,然后用1 s的延迟触发器激活情报分析模块,在情报发生变化后的下1 s进行情报分析,情报分析模块通过对比之前储存的情报数据与现有数据,得出结论,兼顾了程序的效率和稳定性。空中拦截任务规划程序事件表如表1所示。

表1 空中拦截任务规划程序事件表

Table 1 Air interception task planning table

由表1可知,设计了5个触发器和7个事件分别为:敌方飞机被摧毁(U_Des)、发现新情报(U_Det)、想定开始(Start)、每秒触发一次(T1s)和一个不会触发的触发器(Void),LUA脚本动作有初始化模块(Ini)、建立T1s和U_Det关联(C_T1s-Det)、建立T1s和U_Des关联(C_T1s-Des)、重复判断模块(Repeat)、情报增加修正(Det_Cor)和情报减少修正(Des_Cor)。

如表1所示,想定开始后,Start触发Ini模块,实现数据和函数的初始化。Void触发器不会触发,仅用来占位,使事件触发器列表不为空。

当发现新情报时,U_Det触发C_T1s-Det,建立T1s与 Det_Cor的关联,1 s后,T1s触发Det_Cor,进行新增情报分析,Det_Cor执行后断开T1s与Det_Cor的关联,如目前分析到的新增目标数据不足以做出决策,则建立T1s与Repeat之间关联,对其进行监视。

类似的,当敌方目标被摧毁时,U_Des触发C_T1s-Des动作,建立T1s与 Des_Cor的关联,1s后,T1s触发Des_Cor动作,对战损进行分析,Des_Cor动作执行后,断开T1s与Des_Cor的关联。

3.1 情报数据库结构

墨子中关于探测情报的数据储存在Contacts表中,包括地面、海面、空中、水下、空天等所有非我方作战单位的探测信息。并且当其中一个探测对象的信息(Contact)发生多次变化后,该数据在Contacts中的序号会发生不规律变化,所以要将Contacts表经过识别、筛选和重新排序后才能作为任务规划的输入和基础。

墨子中每个对象唯一确定的标识码是guid,所以将guid作为调用、任务控制的基础,并按照推演的时间顺序,建立情报数据库,如表2所示。

表2 探测信息数据库Table 2 Data base of detection information

探测信息表储存了探测信息,只含有探测目标的guid。临时探测表直接从Contacts表拷贝而来,用于与探测信息表对比分析,由jn个不变的元素(如地面目标)和cn个新增元素组成,共有bn(bn=cn+jn)个元素,每个元素中储存了该作战单位作为我方探测对象的guid、名称(name)、航向(heading)、经纬高度、速度、类型(type)等。

有效性表记录是否有必要对该探测对象进行反复判断(true表示需要判断)。Repeat模块会不断地检测v中为true元素对应编号的探测情况,不断修正我方拦截任务。如果敌方单位被摧毁,无需修改探测信息表,只需要将有效性表中对应编号元素设为flase即可。

任务信息表储存了拦截任务,包括任务名称、我方执行任务的作战单位(unitlist)、任务打击目标清单(targetlist) 等信息。

阵亡信息表记录与探测信息表中对应编号的目标是否已经被消灭(true表示已被消灭)。

3.2 初始化模块

墨子的Lua脚本(5.2版本)中的函数不完整,在二次开发时,需手动编入一些常用函数。此外,为提高重用性,在Ini模块还中定义了一些需反复调用的模块,如SelBase、SelType、GetName、UnGetName和MissionPlan模块。

3.2.1SelBase模块

SelBase模块基于拦截时间优先的算法,输入为探测对象的guid,然后通过guid查找到contacts中该目标的位置、航向、速度,预测从各个基地对其进行拦截的地点和耗时,最后生成基地优先级排序表。

假设目标出现在A点,速率为U,我方军事基地位于D点,我方战斗机升空需要2 min,速率为V,2 min后,目标运动到B点。如图1所示。

图1 2 min后位置计算Fig.1 Position calculation after 2 minutes

图1中,已知条件为:目标当前航向为a1,从军事基地到目标的方位角为b1,距离为l1。

首先计算2 min后,目标运动到B点时,方位角与航向角的差值c2和距离l2。然后再预测拦截时间t。

经计算,c2和l2表示为:

(1)

(2)

并且如果c2大于π,则

c2=π-c2

(3)

如图2所示,预测我方战斗机将与目标在E点交战,目标的运动距离x和我方的运动距离y的计算公式为:

图2 拦截时间计算Fig.2 Interception time calculation

y=Vt,x=Ut

(4)

令速率比K为:

(5)

根据余弦定理,有:

(6)

将式(4)、式(5)代入式(6),得:

(7)

解得拦截时间t如表3所示。

表3 拦截时间Table 3 Interception time

使用该算法,逐一计算每个基地的拦截时间,若t超过飞机飞行时间的1/3,则说明目标过远,无法拦截,返回nil。否则安装时间长短排序,生成并返回基地优先级排序表。

3.2.2SelType表

SelType表定义了拦截对应规则,通过敌方飞机的特征值flag,调用我方执行任务的作战单位的类型优先级,基地中的飞机按作战能力由高到低分为a、s、m等3类。

flag值的定义方法有2种:

1) 若想定中作战方已知对方全部机型时,可直接将敌方飞机DBID定义为flag,手动定义优先级规则。

2) 若想定中作战方未知对方全部机型时,可用飞机的灵敏度、代数或其他属性表示其作战能力,定义为actual_flag。将actual_flag向上取整得到flag,当敌方目标型号未知,认为其flag为3,优先派出较强的a类战斗机。若敌方目标为战斗能力较差的战斗机(flag为2),则优先派出我方s类中等性能战斗机。若敌方目标为低价值目标,则派出我方m类低性能战斗机,如表4所示。

表4 SelType表Table 4 SelType table

3.2.3GetName/UnGetName模块

假设我方有3个军事基地,AvaPlane表中按基地和种类储存了每个飞机的名称。我方作战单位命名方法如表5所示,第1个数字表示其所属基地编号,第2个字母固定为“a”,表示其为飞机,第3个字母表示其类型(a/s/m),第4个数字表示该作战单位在基地内的编号。

表5 AvaPlane表Table 5 AvaPlan table

GetName函数输入为所需飞机类型和基地编号,用于从AvaPlane表中取出指定飞机的名称,若AvaPlane表中有该基地和类型的可用飞机,则返回其名字,否则返回nil。UnGetName函数通过分解字符串,获取其所在基地和类型,将名字放回AvaPlane表中。

3.2.4MissionPlan模块

MissionPlan模块结合了Getname、SelBase函数和SelType,输入为探测对象在c表中的序号num,然后从c表中调出其guid,根据其属性建立任务,如图3所示。

图3 MissionPlan模块流程图Fig.3 MissionPlan module flow chart

若能精准地识别目标,则根据其具体类型确定flag,否则其flag视为最大。It表示类型优先级,Ib表示基地优先级。首先确定我方执行任务战斗机的理想类型(SelType表的第一个元素),然后在我方拦截时间最短的基地中检索可用单位,若最佳基地没有,则考虑远一些的基地,若所有基地中都没有可用的该类型飞机,则考虑次之的拦截类型(SelType表中之后的元素),并在所有基地中就近查找。之后遍历SelType表中下一个元素所代表的类型。若所有基地中都没有可用飞机,则向作战方发出警告和提醒,并将v表中的对应元素设为true,当Repeat模块运行时会调用MissionPlan模块重新对其进行任务规划,直到发现可执行任务的作战单位为止。

3.2.5MaxT函数

MaxT函数用于判断表中的布尔型数据,表中元素只要有一个为true,返回true;表中元素全为false,则返回false。

3.3 情报增加修正模块(Det_Cor)

当探测到新的目标时,情报增加修正模块首先将现有c表中内容与现有的探测信息之一对比,识别出新增目标,并将其guid记入c表中。然后对新增的目标逐一使用MissionPlan模块进行判断和任务规划。最后根据MaxT(v)判断是否还有需要判断的目标,控制T1s和Repeat模块的关联,如图4所示。

3.4 重复判断模块(Repeat)

重复判断模块用于对需要监视的目标进行持续监视,并修正任务。如图5所示,在对c表进行遍历时,若v表中对应编号的值为true,则对其进行修正,否则不予处理。若m表中对应编号元素不存在任务,则执行Mission Plan模块,尝试建立任务。若已经存在任务则考虑对其修正。修正任务时要考虑我方高性能战斗机是否已升空,若已升空,则以后不再监视该任务,否则判断能否辨明目标的类型,若能辨明,则先取消升空计划,执行Mission Plan模块,否则继续进行监视。

图5 Repeat模块流程图Fig.5 Repeat module flow chart

3.5 情报减少模块(Des_Cor)

情报减少处理模块用于在有敌方目标被摧毁,探测信息消失时,对敌方阵亡信息表进行修正,并统计敌方已阵亡目标的数量,如图6所示。

图6 情报减少模块流程框图Fig.6 Intelligence decrease module flow chart

首先,在敌方目标被摧毁1 s后,获取最新情报信息储存到临时探测信息表b中。然后用c表中未阵亡的探测信息逐一与之对比,若无法找到c表中标记的未阵亡目标,说明该编号目标被消灭了,在z中修正其阵亡属性。最后重新统计z表中的阵亡目标总数,记为zn。

3.6 拦截失败处理模块

如果派遣SelTpye表中第1个元素所代表的我方战斗机类型进行拦截,既节省战斗资源,且拦截成功率较高。但当我方高性能战斗机不足或距离过远时,只能派出其他类型战斗机执行任务,无法达到最佳效果的任务分配。当拦截失败时,则需要及时调整作战部署。

拦截失败的判定条件为:我方作战单位弹药耗尽或被消灭,且敌方目标仍然存活。当发现某个拦截任务失败后,使用MissionPlan模块为其增加执行任务单位,并在v表中其标记为需要检查,这样在Repeat模块执行时,仍会对其不断进行修正。可通过事件机制中的Condition功能实现该功能,如图7所示。

图7 拦截失败处理模块Fig.7 Intercept failure processing module

4 仿真测试

为了验证空中拦截任务规划程序的有效性和可行性,采用相同的想定部署,一个使用墨子现有的对空拦截任务模块进行拦截,另一个使用二次开发的程序进行拦截。

4.1 想定部署

想定部署如图8所示,蓝方部署了3个不同种类的飞机,从不同方位向红方发起攻击。红方部署了3个军事基地,每个基地内都部署有3种战斗机。想定开始后,红方预警机升空,发现目标后指挥我方战斗机前往拦截。

图8 想定部署Fig.8 Scenario deployment

4.2 现有任务模块仿真结果

将我方3个基地,3种类型,每种类型各8架战斗机添加到任务列表,设置每次任务出动2架,如图9所示。

图9 预设任务Fig.9 Pre-set tasks

21∶03∶31,预警机发现2个不明目标,组织1号基地中1aa1和1aa3组成968编队拦截一个目标,1号基地中1aa2和1aa4组成969编队拦截另一个目标,如图10所示。

图10 第1次拦截计划Fig.10 The first interception plan

21∶12∶03,预警机发现第3个不明目标(在2号基地附近),组织1号基地中1aa5和1aa6组成970编队拦截,如图11所示。

图11 第2次拦截计划Fig.11 The second interception plan

可以看出,墨子中现有对空拦截任务模块并不会根据敌方目标的类型进行针对性拦截,并且对3个目标的拦截任务均使用我方1号基地中的战斗机。

4.3 二次开发后仿真结果

使用二次开发的任务规划程序后,仿真结果如下:

21∶03∶29,预警机升空。

21∶06∶01,我方预警机发现未知目标。1s后建立拦截任务unkn-1,任务由2号基地的2aa1和2aa2组成957号编队执行,如图12所示。

图12 第1次拦截计划Fig.12 The first interception plan

21∶08∶46,我方预警机发现另一个未知目标,1s后建立拦截任务unkn-2,任务由1号基地的1aa1和1aa2组成957号编队执行,如图13所示。

图13 第2次拦截计划Fig.13 The second interception plan

21∶09∶29,位于2号基地的957编队起飞,前往拦截不明目标4825。

21∶11∶29,位于1号基地的958编队起飞,前往拦截未知目标4826。

21∶13∶46,我方预警机发现不明目标4827,1s后,建立了unkn-3任务,任务由3号基地的3aa1和3aa2组成957号编队执行。

21∶14∶51,我方预警机精准探测到了不明空中目标4827的精确属性为幻影2000型攻击机。1s后,根据目标4827的类型(3001),重新建立了拦截任务3001-3,并指派3as1和3as2执行任务,如图14、图15所示。

图14 重新建立拦截任务Fig.14 Recreation the interception mission

图15 灵活调派操作Fig.15 Flexible deployment operations

21∶17∶29,3号基地的960编队起飞。

21∶17∶57,我方957编队摧毁了敌方目标,C_T1s-Des将T1s触发器与Unit_Des动作关联。

21∶20∶46,Unit_Des模块对z表进行修正。

21∶17∶58,情报减少模块对z表进行修正。

21∶20∶45,敌方幻影2000战斗机被摧毁,C_T1s-Des将T1s触发器与Unit_Des动作关联。

21∶21∶43,敌方4826目标被摧毁。

21∶21∶44,情报减少模块对z表进行修正

21∶41∶09,我方3个战斗机编队返回基地。

仿真推演的关键事件如表6所示。

表6 关键事件Table 6 Key events

5 结论

经仿真测试,空中拦截任务规划程序能够精确、自动地根据敌我位置和状态做出决策,规划作战任务,协同我方多基地中的多种战斗机进行空中拦截作战,满足了针对性空中拦截的要求,并考虑了战斗机升空前的灵活调度问题。通过程序的自动跟踪和监视,减少了人工操作的误差,提高了作战仿真的可重复性和可信度。所采用的探测信息阶段性控制方法,对军事人工智能开发和解决类似的资源调派问题有借鉴和参考价值。

猜你喜欢
触发器敌方墨子
少林韦陀十八手
4打5,敌方还剩几个人?
水果大作战
“墨子号”与墨子
人工智能有助于处置敌方炸弹
使用触发器,强化安全性
先秦诸子之评述与《墨子》的解读
墨子兵法(一)墨子其人
几种常见触发器工作方式的讨论
对触发器逻辑功能转换的分析