2020联合作战智能博弈挑战赛白皮书
秒杀、精确、全域的战争新特征,使得单纯依靠指挥员脑力进行作战筹划愈发困难。指挥员在快节奏、高强度的对抗环境下,难以在有限时间内充分分析战局的各种可能情况,导致方案制定不精确、时效性不满足实际作战要求(根据战役规模,持续数月不等)、战时各种风险考虑不够全面等问题。当前主要依靠人定性研判,难以量化指标,急需信息系统辅助指挥员进行
“精算”和“妙算”。
以“Alph
a Star”为代表的智能博弈技术在即时战略游戏中战胜人类选手,宣告以深度强化学习为代表的人工智能技术在解决机器博弈这一AI
领域最具挑战性的问题取得突破,为作战筹划和指挥问题的突破带来曙光。为充分发挥军民融合机制,创新先进技术研究范式,以举办挑战赛的形式,优选军内外高水平创新成果,发掘顶尖算法人才,促进智能博弈技术在作战筹划和指控领域的创新应用。
整个赛事按训练准备、线上初赛、分区复赛和全国决赛四个阶段进行组织,时间跨度从
2020年7月至2020年12月。
选手报名:从比赛公告发布之日起,至
2020年8月31日(暂定)止,参赛队伍可通过赛事官网提交报名信息,由赛事主办方对参赛队伍资质进行审核,通过后即可参加初赛。
AI
开发训练:报名成功后选手即可通过官网下载举办方提供的仿真推演平台、A
I
接口开发包、开发手册等赛事资料,然后搭建训练对抗环境。参赛队伍可基于举办方发布的陪练A
I
,进行模型对抗训练,并在完成模型训练后,于2020年8月31日前提交A
I
模型参加初赛。在开发过程中遇到任何问题,可通过官网或专用客服渠道上报问题与建议,举办方将持续响应,对问题进行解答,并不断更新完善博弈对抗平台。
初赛时间:暂定2020年9月。
初赛地点:线上集中对战。
初赛内容:赛事举办方发布的初赛赛题,包括对抗场景想定、初始兵力部署,场景想定中设置攻防双方的作战任务和可用兵力。
初赛形式:采用积分晋级制,参赛队伍通过赛事官网线上提交进攻和防守2个A
I
模型,分别作为攻方和守方与赛事举办方发布的基线A
I
对战各50场(共计100场
)
,按胜负总积分选取前24名晋级复赛(根据参赛队伍数量酌情调整)。
初赛期间,综合考虑公平性、提高队伍参赛率等因素,每支队伍共有3次提交A
I
机会,并按提交A
I
的最高排名统计最终成绩。
复赛时间:暂定2020年10月。
复赛地点:拟设置华东(南京),华北(北京)、华中(长沙)共3个分赛区,复赛队伍可按分赛区就近集中训练,参加比赛。
复赛准备:为体现比赛的公平性,复赛采用集中训练模式,由分赛区为各复赛队伍(复赛队伍所属分区按其注册时单位的归属地确定)提供统一场地和标准的软硬件环境,复赛队伍需要在复赛开始前向归属赛区集中报道。
复赛内容:发布新的复赛赛题(作战任务、作战兵力种类等设置基本不变,作战区域地形、双方兵力组成和数量,初始部署有所调整),复赛队伍在新赛题发布后,有约
5周时间对模型进行训练优化。
复赛形式:采用联赛积分制,举办方构建联赛对战环境,每
5天定期组织一轮循环对抗,并根据对战结果持续刷新联赛积分排行榜,最终取积分榜前12名(根据参赛队伍数量酌情调整)晋级决赛。每一轮比赛开始前,各复赛队伍通过赛事机要渠道提交本轮参赛的进攻和防守A
I
模型作为攻方和守方;本轮比赛开始后,每支队伍的A
I
模型需要与联赛中其他队伍的A
I
分别对战
100场(攻守各50场);本轮对战结束后,赛事举办方根据对战场次胜负情况,计算各队伍积分,并更新联赛积分排行榜;两轮比赛之间,参赛队伍可对自己的A
I
模型进行调整和优化。
决赛时间:暂定2020年12月上旬。
决赛地点:晋级决赛的队伍将在指定决赛地点集中训练,集中比赛。
决赛训练:采用集中训练模式,由赛事举办方统一提供场地和软硬件环境,决赛队伍需要在决赛开始前到指定地点集中报到。
决赛内容:发布新的决赛赛题(作战任务、作战兵力种类等设置基本不变,作战区域地形、双方兵力组成和数量,初始部署有所调整),决赛队伍在新赛题发布后,有约
3周时间对A
I
模型进行训练优化。
决赛形式:包括对战比赛、综合评判、现场颁奖和交流点评,持续约
1周时间。采用单循环对抗方式,与分区复赛裁决的规则相同,专家组和裁判组通过复盘分析选手对战数据,综合胜负积分、算法技术性和对战军事性等多因素,确定最终名次,并公布获奖名单。决赛当天以复盘分析的形式,讲解前期遴选的赛事精彩对战集锦(包括主办方组织的人机、机机对抗回放)并邀请获奖队伍分析模型开发经验和比赛心得,进行现场颁奖。
蓝方长期侵占红方岛屿,近期不断骚扰红方海上日常作业船只,为宣誓主权并保护自身利益,出动海空联合作战力量对岛上蓝方重点目标实施打击,为后续夺回岛屿建立基础。
蓝方目标(防守方):
依托地面、海面和空中立体防空火力,守卫己方岛屿2个指挥所重点目标。
红方目标(进攻方):
综合运用海空突击和支援保障力量,突破蓝方防空体系,摧毁蓝方2个指挥所重点目标。
由于海空作战力量运动速度快、活动空间大,考虑设置大场景空间,同时,结合战局紧凑性和
AI计算复杂度,将空间范围设为350km*350km。战场中心为坐标原点,向右为x轴正轴,向上为y轴正轴,红方岛屿机场坐标为
(146700, -3000)
,蓝方北部岛屿指挥所坐标为
(-129532, 87667)
,蓝方南部岛屿指挥所坐标为
(-131154, -87888)
。
为控制单局比赛时间,提高AI模型训练效率,降低决策不确定性,设单局仿真时间为2.5小时(16倍速以上实际10分钟以内)。
图1.3.2 赛事地图规模说明
针对双方特点,合理设置兵力构成对抗想定进行推演
。红蓝双方各只设置一个机场,每个机场均只有一条跑道用于作战飞机的起飞和降落。当有飞机起飞时占用跑道,其他飞机不能降落,同样当有飞机进行降落时,其他飞机不能起飞。通过机场起降密度控制兵力释放速度,实现
AI可用兵力的控制,考虑赛事对抗紧凑型,设置飞机起降最小间隔为60秒。
针对海空兵力特点,结合决策复杂度,为红方设置
7
种兵力共
45个作战单位,以完成突击、预警、侦察、干扰、护航等任务。具体兵力设置如下表:通过机场起飞容量控制战场兵力投入,可考虑多波次使用,弹药补给时间20分钟。
表1.3.3.1 红方兵力设置
任务
|
兵力
|
数量
|
初始位置
|
空中突击
|
轰炸机
|
16架
|
机场
|
空海探测
|
预警机
|
1架
|
红方岛屿附近空域
|
空中侦察
|
无人侦察机
|
3架
|
红方半场靠近中线空域
|
干扰压制
|
电子战飞机
|
1架
|
机场
|
掩护护航
|
歼击机
|
20架
|
机场
|
舰艇防空
|
防空驱逐舰
|
2艘
|
红方岛屿附近海面
|
对空探测
|
地面雷达
|
1部
|
红方岛屿
|
支援保障
|
机场
|
1个
|
/
|
针对防御作战特点,体现陆海空立体防空兵力运用,为蓝方设置
7种兵力共30个作战单位,以完成侦察、预警、防空、地面防卫等任务,同时为蓝方配置预警机和轰炸机,可对红方机场实施突击,威慑红方难以投入全部兵力进行进攻,增加防守胜率。
表1.3.3.2 蓝方兵力设置
任务
|
兵力
|
数量
|
初始位置
|
空中突击
|
轰炸机
|
8架
|
南岛机场
|
空海探测
|
预警机
|
1架
|
南岛附近空域
|
对空探测
|
地面雷达
|
2部
|
每岛1部
|
空中拦截
|
歼击机
|
12架
|
南岛机场
|
舰艇防空
|
防空驱逐舰
|
1艘
|
北岛附近海面
|
地面防空
|
地导营
|
3部
|
北岛1部南岛2部
|
支援保障
|
机场
|
1个
|
位于南部岛屿
|
保卫目标
|
指挥所
|
2个
|
每岛1个
|
限定初
/复赛作战样式,保证先易后难。初赛通过限制驱逐舰作战能力,使其更多承担海面机动防空支援任务,由此初赛以航空兵突击为主,海面力量为辅;复赛则增加驱逐舰反舰、对地能力,使得海面力量有能力独立遂行主攻任务,体现海空协同作战样式,从而给AI提供丰富的策略决策空间。
参考真实武器装备性能参数,适当调整武器装备作战能力,在设定作战空间条件下,保证整体对抗性和能力均衡性,原则上保证
AI模型能泛化迁移至真实作战场景。仿真平台提供距离与弹药命中的概率分布,不公布明确的命中裁决表,考验AI学习推理能力,以区别于全规则实现。为简化决策空间,对弹药模型作了适当简化,轰炸机挂载两枚编号为
’360’
的中距弹既可以打击地面目标也可以打击水面目标;歼击机挂载6枚编号为
’170’
的中距空空弹;地防配备12枚编号同样为‘170‘但攻击距离为100km的地空导弹;护卫舰配备36枚编号为
’519’
的舰空导弹。除了正常探测手段外,所有单位目视距离统一设置为20km。
特别说明的是,初赛场景中,地面防空和护卫舰默认自动进行攻击,默认发射导弹距离为最大攻击距离的
60%,选手可通过指定目标防空指令、移除指定目标等指令对之进行控制。
表1.3.3.3-1 空中武器装备性能参数表
类型
|
速度范围
|
高度范围
|
探测/干扰角度
|
探测/干扰距离
|
攻击距离
|
弹药/数量
|
轰炸机
|
600-800km/h
|
[,18000]米
|
120度
|
100km
|
80km
|
2枚中距空地弹
|
歼击机
|
900-1000km/h
|
[,18000]米
|
120度
|
100km
|
80km
|
6枚中距空空弹
|
预警机
|
600-800km/h
|
[,10000]米
|
360度
|
250km
|
/
|
/
|
干扰机
|
600-800km/h
|
[,10000]米
|
360度
|
60km
|
/
|
/
|
侦察机
|
180-350km/h
|
[,18000]米
|
360度
|
40km
|
/
|
/
|
表 1.3.3.3-2 地面武器装备性能参数表
类型
|
速度
|
探测方位/距离
|
攻击方位/距离
|
弹药/数量
|
火力通道数
|
雷达站
|
0
|
360度/180km
|
/
|
/
|
/
|
地防
|
0-20km/h
|
120度/100km
|
120度/100km
|
地空导弹/12枚
|
3
|
表1.3.3.3-3 水面武器装备性能参数表
类型
|
速度
|
探测方位/距离
|
攻击方位/距离
|
弹药/数量
|
火力通道数
|
护卫舰
|
0-20km/h
|
360度/180km
|
360度/100km
|
舰空导弹/36枚
|
4
|
1)
指挥所目标毁伤裁决
以使指挥所丧失作战指挥能力判定为打击成功,场景中设置为混泥土材质的半掩体建筑物设施,需要承受
4枚导弹攻击,判为击毁。初赛场景,通过轰炸机发射中距空地弹进行打击后,需要抵近侦察才可确认毁伤效果。
2)
机场目标毁伤裁决
将机场跑道划分为前、中、后三段进行毁伤裁决,被击中
1枚导弹则判为损伤,前后部受损影响较小,5分钟可恢复起降能力;中部受损影响较大,需20分钟恢复起降能力。初赛场景主要通过轰炸机发射空地弹进行打击。
3)
地面雷达目标毁伤裁决
被一枚导弹击中即判为毁伤,初赛场景主要通过轰炸机发射空地弹进行打击。
4)
舰船目标毁伤裁决
被击中1发失去动力,无法机动,被击中2发失去防空能力,被击中3发判为击沉。初赛场景主要通过轰炸机发射空地弹进行打击。
5)
飞机目标毁伤裁决
被1枚导弹击中则判为击毁,初赛场景可通过歼击机发射空空弹、地防发射地空弹,护卫舰发射舰空弹进行打击。
6)
地面防空目标毁伤裁决
被1枚导弹击中则判为击毁,初赛场景主要通过轰炸机发射空地弹进行打击。
赛事场景中适当增加民航、民船等非军事单位,情报侦察方面增加目标发现与识别过程模拟,在发现目标后需进行指定时间的跟踪探测后才能对目标的敌我属性和型号进行识别,以符合实际作战条件下的目标识别打击过程,如误伤非军事单位或非敌对单位,也将获得计分惩罚。场景中所有具有目标探测的作战单位(预警机、地面雷达、驱逐舰、地面防空、岸导系统)设定目标发现距离和识别距离,目标发现距离为其探测距离,目标识别距离按各型装备目标发现距离的
60%进行设置。
在比赛时间(
150分钟)内,若2个守卫目标均被摧毁,判红方胜;两个守卫目标均未被摧毁,判定蓝方胜;达到作战时间时,若摧毁一个指挥所,另一个未被摧毁,则统计战损比和非军事目标误伤比,优者判胜。
图2.1 训练环境整体架构
训练环境的整体架构如图
2.1所示,从下至上分别是仿真平台层、交互接口层和智能体开发应用层。同时,为了便于选手开发,额外提供了态势显示软件来实时观察智能体对抗和训练过程。下面就平台主要构成部分进行介绍。
本仿真平台是一款自主研发,支持联合作战模拟的战役战术一体仿真推演平台。本仿真平台支持
AI训练与对抗,能够逼真地模拟多种编队以及平台级行为,具有自主可控、高扩展性等优点。该仿真平台支持博弈对抗AI训练,具备场景动态配置、高推速比、聚合模型、实体自主行为、任务级指令、开放架构、高负荷持续运行等能力。
主要使用预警机,对位于空中、海上的敌方目标进行探测并共享分发至本方所有单位。
发起单位
:预警机
作用对象
:在空飞机、海面舰艇
限制规则:
不能探测陆上机动和固定目标
任务规则
:
1)
可以选择机场待战或在空预警机兵力,执行空中预警任务。
2)
仿真平台会自动生成进入巡逻区域的航线,并控制预警机从机场起飞、集结(使用在空兵力无起飞、集结过程),并按航线进入巡逻区域执行空中预警任务。
3)
预警机在进入巡逻区域时会自动打开雷达。
4)
预警机在完成指定时间的巡逻后,关闭雷达,在原地附近盘旋。
5)
处于预警机250公里半径范围内的敌空、海目标可被本方发现。
任务效果图
:
图2.2.2.1 预警机空中预警
图中为红方预警机,通过给预警机规划巡逻区域,可以控制预警机对蓝方进行机动侦查;预警机在进入巡逻区域时会自动打开雷达,进而侦查探测范围内的空中、海面目标,预警机在完成指定时间的巡逻后,关闭雷达,在原地附近盘旋。
发起单位:
歼击机
作用对象:
歼击机、轰炸机、预警机、侦察机、干扰机
任务规则:
1)
可以由AI指定在空歼击机兵力,攻击指定在空目标。
2)
仿真平台会自动生成拦截航线,控制歼击机按航线对目标进行拦截打击,直至敌机被击落或己方导弹耗尽。
3)
拦截过程中,仿真平台会控制歼击机的传感器使用、武器的发射,与目标距离小于50公里时自动发射所挂载的中距空空弹。
4)
歼击机发射的空对空弹药命中概率与发射的距离、目标的机动有直接关系。
5)
执行完拦截任务后原地附近盘旋。
任务效果图
:
图2.2.2.2 歼击机空中拦截
图中为蓝方歼击机,通过给歼击机下达空中拦截指令,可以控制歼击机对红方飞机进行空中拦截。
发起单位:
轰炸机
作用对象:
地面地防、雷达站、驱逐舰、机场、指挥所
任务规则:
1)
可以由AI指定机场待战或在空轰炸机兵力,按照指定参数(突击航线、打击距离),自动计算投弹点、引导点和返航点,自动攻击指定目标或者指定区域内的目标。
2)
仿真平台会自动生成攻击航线,并控制轰炸机起飞,按航线自动对目标进行突击。
3)
如果是区域突击,轰炸机会按照发现的顺序对区域内所有目标进行打击,直到所有目标被摧毁或轰炸机弹药、油量不足返航。需要注意的是目前只能通过(起飞)目标突击指令对机场进行打击,暂不支持通过(起飞)区域突击指令不会打击机场。
4)
轰炸机发射空对地弹药的命中概率与发射的距离有直接关联:发射距离越小,弹药命中概率越高,但同时突防难度越大。
任务效果图
:
图2.2.2.3 轰炸机空地打击
图中红方轰炸机在蓝方岛屿的上方,正在对蓝方地面目标实施对地突击。
发起单位:
歼击机
作用对象:
预警机、轰炸机和干扰机
限制规则:
1)
不对无人机实施护航;
2)
歼击机不对歼击机实施护航;
3)
被护航的单位速度小于50m
/s
或长机被击毁,结束护航任务,自动返航。
任务规则:
1)
可以控制空中已有歼击机编队/单机对指定己方编队进行护航;
2)
可以从机场起飞新编队/单机对指定己方编队进行护航;
3)
执行护航任务的歼击机默认进入被护航飞机航线。
任务效果图
:
图2.2.2.4 歼击机空中护航
图中歼击机接到空中护航指令后,对己方干扰机进行空中护航。
执行空中远距离电子干扰任务。
发起单位:
干扰机
作用对象:
护卫舰、地面雷达、地面防空、预警机。
限制规则:
1)
干扰距离60公里,初赛只开放阻塞干扰模式,阻塞干扰模式对处于干扰区域范围内双方目标均生效;
2)
一旦开电子干扰,自身位置对敌方透明;
3)
干扰不考虑对武器导引头的影响。
任务效果图
:
图2.2.2.5 干扰机电子干扰
图中红方干扰机正在执行空中远距离电子支援干扰任务。干扰机在进入巡逻区域时会自动打开干扰机,进而干扰一定距离的敌方护卫舰、地防和地面雷达等目标,干扰机在完成指定时间的巡逻后,关闭干扰机。
发起单位:
无人侦察机
作用对象:
可侦查敌方地面雷达、地防、指挥所、护卫舰,侦察半径为约40公里。
任务效果图
:
图2.2.2.6 无人机空中侦查
图中红方无人侦察机对岛屿内地防、地面雷达和指挥所及岛屿附近的护卫舰实施区域巡逻侦查。
发起单位:
所有在空飞机
任务规则:
在空飞机可以按照AI指令执行区域巡逻或航线巡逻。
任务效果图
:
图2.2.2.7 飞机的区域巡逻和航线巡逻
图中蓝方飞机接到区域巡逻指令,正在向指定区域飞行。
发起单位:
所有在机场飞机
任务规则:
可以从己方机场起飞指定数量、指定型号的飞机。
任务效果图
:
图2.2.2.8 飞机机场起飞
发起单位:
所有在空飞机
任务规则:
红方飞机返回红方机场,蓝方飞机返回蓝方机场。
任务效果图
:
图2.2.2.9 飞机返航
发起单位:
地防车
作用对象:
预警机、轰炸机、无人侦察机、干扰机、歼击机
任务规则:
1)
执行防空任务,能够按照部署状态自动执行防空打击任务,自动打击距离为最大攻击距离的60%,优先攻击进入防空范围最近的目标;
2)
对AI指示的目标重点关注并进行打击(优先级高);
3)
可提前指定威胁目标,若被指定的目标处于打击范围之内即会自动发弹,地防维护一个打击目标优先级列表;
4)
在地面防空可打击目标列表中移除指定目标,使得对该目标不实施防空打击;
5)
获取当前地面防空可打击的敌方目标编号列表;
6)
地面防空单位从当前位置按固定速度机动至指定位置重新进行防空部署(含撤收、机动、展开的完整过程,过程中无地面防空能力);
7)
探测范围和火力范围都为100公里。
限制规则:
1)
雷达关机状态下不能进行防空打击;
2)
地防车3公里范围以内对空打击无效;
3)
12枚地空导弹;
4)
不能对护卫舰进行打击;
5)
火力通道数为3,即可同时拦截3架飞机。
任务效果图
:
图2.2.3.1 地面防空
图中地面防空初始部署在蓝方岛屿上,对敌方空中目标实施打击。
发起单位:
地面雷达
作用对象:
轰炸机、预警机、歼击机、无人侦察机、干扰机、护卫舰
限制规则:
1)
可探测全向360度范围内的单位;
2)
不能探测被岛屿、树叶等遮挡的单位;
3)
雷达关机状态下不能进行目标探测;
4)
地面雷达的探测距离为1
80公里;
5)
初赛暂不考虑不同高度层探测能力差异。
任务效果图
:
图2.2.3.2 地面雷达远程预警
图中地面雷达初始部署在蓝方岛屿上,对敌方空中及海上目标进行探测
。
发起单位:
护卫舰
作用对象:
轰炸机、预警机、歼击机、无人侦察机、干扰机、
限制规则:
1)
不能作用对象为地防车、地面雷达和指挥所;
2)
36枚舰空弹;
3)
雷达关机状态下不能进行防空打击。
任务规则
:
1)
可以设置驱护舰的初始部署位置。
2)
可以控制己方驱护舰沿指定区域巡逻防空(不设置巡逻时间,一直在区域巡逻)。
3)
探测范围为180公里,火力范围为100公里,火力通道数为4,即可同时拦截4架飞机。
4)
执行防空任务,能够按照部署状态自动执行防空打击任务,自动打击距离为最大攻击距离的60%,优先攻击进入防空范围最近的目标。
5)
对AI指示的目标重点关注并进行打击(优先级高)。
6)
可提前指定威胁目标,若被指定的目标处于打击范围之内即会自动发弹,护卫舰维护一个打击目标优先级列表。
7)
在护卫舰可打击目标列表中移除指定目标,使得对该目标不实施防空打击。
任务效果图
:
图2.2.4.1 护卫舰水面防空
图中护卫舰部署在红方岛屿附近,对敌方空中目标实施打击。
只能同型号飞机进行编组,且编队数量只支持1,2,4三种,支持编队巡逻、编队护航、编队突击等任务。
同时只能起飞一架飞机,飞机起飞至一定高度后,才能继续起飞下一架飞机,并且在所有飞机完成集结前,编队不接收其他指令;返航阶段的飞机编队,不接受外界任务指令的输入。
1)
预警机、电子战飞机、无人侦察机、舰船不需考虑燃油消耗;
2)
作战飞机基于燃油消耗,考虑留空作战时间,若在留空时间为0前不返航,则会耗尽燃油坠毁,留空作战时间由仿真平台计算给出;
3)
作战飞机可返回机场进行燃油、弹药补给,补给时间20分钟;
4)
舰船防空弹药1个基数为36枚弹,不考虑弹药补给;
5)
地面防空弹药1个基数为12枚弹,不考虑弹药补给。
1)
被击中的飞机、舰船、地面防空、岸导系统单元在赛事作战时间内无法被修复;
2)
失去起降能力的机场跑道修复时间为首尾部位每被击中一次,需5分钟修复,中部部位每被击中一次,需20分钟修复;
3)
被击中的地面雷达修复时间1小时。
1)
任意单位掌握的敌方目标(态势掌握能力见各装备性能参数),对己方所有单位共享;
2)
AI可按自设频率获取战场态势,仿真平台给定态势更新最高频率(如1秒);
3)
地面防空单元攻击后暴露自身位置
在图
2.1关于训练环境整体架构的描述中,同时标明了开发AI智能体所需使用的代码模块。选手需要使用和关注的是接口层和智能体开发层,下面就这两层所涉及主要模块的功能进行简要说明,详情请参阅具体代码。
为了方便统一对战调用形式,在模块
agent.py中定义用于构建自定义智能体的基类Agent,限定其必须包含如下成员,方法和固定格式返回值,其中step方法返回值必须是可执行的指令列表。具体可参见内置规则智能体
RedRuleAgent的构建方法。
图2.3.1 基类智能体
模块
env_runner.py下的类EnvRunner为对战环境构建和运行的基类,主要方法包括对战环境初始化、启动仿真环境、根据配置信息构建红蓝双方智能体、态势获取、发送指令等。各个主要方法的功能如下,详细参数含义参见代码中的注释。
表2.3.2 类EnvRu
nner主要方法功能说明
类名
|
EnvRunner
|
类的方法
|
|
名称
|
功能说明
|
__init__
|
对战环境初始化
|
_start_env
|
启动仿真环境
|
_init_agents
|
根据配置信息构建红蓝双方智能体
|
_reset
|
智能体重置
|
_get_observation
|
态势获取
|
_run_actions
|
向服务端发送指令
|
_run_agents
|
调用智能体step方法生成指令,再调用_run_action方法发送指令
|
_get_done
|
推演是否结束
|
_action_validate
|
指令有效性基本检查
|
在仿真环境构建和运行过程中,需要用到如下三个模块提供的功能:
rpyc连接客户端、任务指令、本地仿真平台容器管理。图2.3.2为调用这三个模块的一个简要示例,
EnvRunner
只是作了更好的封装,具体调用形式与此类似,接下来简要介绍这三个模块的功能。
图 2.3.2
对战环境构建和运行代码示例
通过env_client.py模块下的EnvClient类来建立rpyc连接、获取态势和下发指令。
表2.3.
2.1 类EnvClient及其方法
类名
|
EnvClient
|
||
类的方法
|
|||
名称
|
功能
|
参数说明
|
|
__init__
|
用于建立rpyc连接的初始化方法
|
server
|
宿主机IP地址
|
port
|
容器5455端口映射到外部宿主机的端口号
|
||
get_observation
|
获取态势
|
/
|
|
take_action
|
下发指令
|
cmd_list
|
智能体生成的指令列表
|
模块env_cmd.py下的EnvCmd类定义了不同作战单位可执行的任务指令集合,指令和参数含义、参数类型和范围详见第
6
节或代码中注释。
通过模块
env_manager.py下的EnvManager类来管理本地容器化仿真环境的各种操作,包括初始化、启动、停止、暂停、恢复、关闭、重置等功能管理,主要方法和功能说明如下,详细参数含义见代码中注释。
表2.3.2.
3 类EnvManager
主要方法功能说明
类名
|
EnvManager
|
类的方法
|
|
名称
|
功能说明
|
__init__
|
读取基本设置信息
|
start_docker
|
容器化仿真环境启动
|
stop_docker
|
容器化仿真环境停止和删除
|
reset
|
容器化仿真环境重置
|
get_server_port
|
返回用于建立rpyc连接的宿主机端口号(对应容器内部的5455端口)
|
模块run.py中,类WarRunner继承自类EnvRunner,新增的War
Runner.run方法即为对战调度程序。main函数为仿真推演的入口程序,其根据环境编号env_id、对战轮数num_episodes和配置config,调用类WarRunner
的初始化函数来构建对战环境,然后调用类War
Runner
的run方法来进行对战调度。
图 2.3.3
对战调度和推演运行入口
显示软件用于实时显示战场二/三维态势,便于选手开发过程中观看双方对战过程。软件的安装参见
3.4
节,这里对软件的使用做简要说明,界面显示如图
2.4所示,主要分为四个部分:上方的战况统计,下方的事件/单元/指令显示栏、对战兵力和战果/战损显示栏、小地图及显示模式控制。
图2.4
界面显示
1)
左侧点击连接配置按钮;
2)
在弹出的对话框中输入服务端的地址和端口号。这里的地址即为容器化仿真平台所在宿主机的I
P
地址,端口为映射到容器内部5454端口的宿主机端口号,
具体端口号可通过docker
ps -a
命令来查看,如图2.4.1-1中的示例即为6111端口。
3)点击连接,即可建立连接,完整过程如图2.4.1-2所示。
图2.4.1-2
连接数据源的过程
观察视角可在自由视角和跟随视角之间切换
1)
自由视角切换成跟随视角
双击选中的作战单位即可切换为跟随视角。
图
2.4.2.1-1
自由视角切换为跟随视角
2)
跟随视角切换到自由视角
点击鼠标中键,即可切换回自由视角。
3)
区域快速定位
点击小地图某一区域即可切换到对应区域,实现快速定位功能。图
2.4.2.1-2中的小图标为各类作战单位的简易标示,其中三角形代表地面目标,圆形代表飞机,矩形代表舰船,红/蓝色代表武器属性。视角和模式可以切换不同的显示模式,视角分为红方、蓝方和导调视角,模式分为武器平台和编队模式;图层用于控制界面显示的内容。
图2.4.2.1-2
鹰眼图
图2.4.2.2 战况统计栏
战况统计栏左侧显示的是蓝方信息,右侧显示的是红方信息,下方显示的是推演时间。双方的兵力包含地面雷达、舰船、飞机、地防四类平台,每类平台的数据显示表示为:当前存活的平台数量
/总平台数量。图中的小旗代表指挥所,红方每摧毁一个指挥所蓝方的黄色小旗就减少一个,红方相应地会增加一个灰色小旗。
如图
2.4.2.3所示,事件是作战单位正在发生的事件,可以按照红蓝双方以及不同种类事件来显示;单元是所选中作战单位的详细信息;指令是AI系统对作战单位发出的指令。
图
2.4.2.3
事件/单元/指令显示栏
对战兵力选项卡,可按照作战单位种类和编队进行展开,显示各作战平台的编号及任务,展现当前正在执行任务的兵力以及待战兵力。战果
/战损选项卡,可按单位类型不同,显示红/蓝方当前的战果、战损、消耗等统计信息。
图 2.4.2.4
对战兵力,战果/战损信息栏
通过小地图的图层选项卡来控制界面要显示的内容,包括武器平台能力,任务指示,单元状态相关内容。
1)
武器平台能力
图
2.4.2.5-1显示的圆即作战单位的能力,按照类型不同作战单位能力包括:对空探测范围、对海探测范围、对地探测范围、电子干扰范围、对空攻击范围、对海攻击范围、对地攻击范围。
图 2.4.2.5-1
武器平台能力
2)
任务指示
任务指示线的种类包括,任务指示线,目标攻击线,目标探测线等,以目标攻击线为例,其具体效果如图2.4.2.5-2所示。
图
2.4.2.5-2
目标攻击线效果展示
3)
单元状态
图2.4.2.5-1中各作战单位头顶的小图标为该单位的状态显示,其具体含义如下:
:弹药告急
:武器当前挂载的弹药数
:执行电子干扰任务
:执行航线巡逻任务
:执行区域巡逻任务
:执行护航任务
:执行空中拦截任务
:执行空中预警任务
:执行空中侦查任务
:执行目标突击任务
:执行区域突击任务
:武器平台被锁定
:武器平台油料告急
建议将软件安装在D盘根目录下,否则需要按以下步骤来配置数据。
1)
点击界面左侧的信息集成管理器;
2)
点击图层控制,选择数据源树;
图 2.4.3-1
左侧控制栏、图层控制、打开数据源
3)
右击文件型数据源,首先选择移除所有数据,然后点击打开数据源,选择文件路径和数据源文件,图
2.4.3-2中的dem800和YX800分别为高程数据和影像数据;
图 2.4.3-2
选择数据源文件
4)
点击左侧干预命令按钮,在命令行输入窗口输入SaveProject命令保存数据配置。
图 2.4.3-3
保存配置
1)
选择回放模型
使用回放功能需要用户在连接IP和端口的界面的“模式选择”中选择回放模式,如图
2.4.4-1
模式选择所示。若是需要回放本地的文件,地址和端口分别为127.0.0.1和8888。
图 2.4.4-1
选择回放模式
2)
选择回放文件
用户需要手动选择回放文件所在的文件夹,如图 2.
4.4-2
选择回放文件所示。不是回放本地文件的用户可跳过这一步。
图 2.4.4-2
选择回放文件
3)
回放操作
图2.4.4-3中的按钮从左至右分别对应开始、暂停、停止和调节回放速度四个功能。
图2.4.4-3
开始、暂停和停止
用户可如图 2.4.4-4拖动滑动条,定位至相应的回放时刻。
图2.4.4-4
拖动滑动条
1)
程序启动过程中闪退或启动后内容空白
a)
环境冲突排查。打开
JinCEarth\UniversalIntegrationPlatform\Data\Exceptions\Logs\UIPHostApplication.log文件,查阅最后一行,查看所有插件是否都加载成功,如果没有加载成功,请查阅具体未加载成功的动态库的环境是否正确。图2.4.
5
显示一共18个插件被加载完毕即说明成功,若没有显示加载18个插件则需检查环境变量是否正确。
图2
.4.5
查看插件是否加载成功
b)
检查是否被杀毒软件关闭。
2)
程序运行卡顿
检查电脑配置,是否符合安装环境要求;检查显卡驱动是否正确安装;双显卡机器检查当前使用是否是独立显卡。
为了便于选手熟悉和使用仿真平台,选手可以在官网直接下载举办方配置好的
Linux虚拟机环境,直接启动虚拟机,运行对战框架里的调度程序,然后连接态势显示软件即可直观地观看对战过程和效果。选手也可以按照3.2-3.4节的教程,在官网下载容器化仿真环境镜像、对战框架程序、态势显示软件安装程序来自己安装和配置训练环境。两种方式都需要选手在windows系统上安装态势显示软件,与仿真平台建立连接后,实时显示对战过程。需要注意的是,举办方提供的虚拟机仅限于选手熟悉开发环境或者开发规则智能体使用;如果是开发训练基于神经网络的智能体,因为要用到G
PU
资源,仍然需要选手在安装有Linux物理机/服务器上配置开发环境。
图
3
环境安装配置示意图
3.1节简要讲述如何使用配置好的虚拟机环境来运行对战框架,需要在windows系统安装态势显示软件,并安装VMware Workstation
来加载
Linux虚拟机环境;3.2-3.4节讲述如何自己安装和配置开发环境,首先需要在Linux系统上安装docker运行环境,并加载从官网下载的容器化仿真环境镜像;然后配置A
I
开发环境(如果是直接运行对战框架内置规则智能体,这步可省,因为Linux系统自带python环境,
只需通过
sudo apt install python3-pip
,pip
3 install rpyc
两个命令来安装rpyc依赖包即可);接下来就是在window
s
系统上安装态势显示软件,与仿真平台建立连接后实时显示态势;
选手在window
s
物理机上安装
PyCharm或VS Code集成开发环境后,可以通过SSH
远程连接到
Linux物理机/服务器上直接进行代码编写和模型开发,也可以在windows系统上完成模型开发后将之放到Linux物理机/服务器进行测试和训练
。后续仿真平台镜像若有更新,举办方将在官网提供更新命令,选手只需在仿真平台容器所在宿主机的终端窗口中输入所提供命令即可实现更新。
推荐硬件配置:主频2.4G以上、内存16G以上,硬盘1
T
以上
推荐软件系统:
Window10/Win7 64位系统
如果选手自己配置虚拟机环境,建议分配8个
CPU
核心,8
G
内存,100
G
硬盘空间,网络模式设置为桥接模式(推荐
)
或者N
AT
模式。
1)
安装举办方提供的态势显示软件,安装步骤参见3.4节;
2)
下载并安装V
Mware Workstation 15 Pro
;
3)
启动
VMware Workstation
,‘文件
’-->‘打开’,选择从官网下载的虚拟机镜像文件(后缀名为.vmx
的文件
)
,点击‘我已复制该虚拟机’,即可加载,加载完成后启动虚拟机;
4)
虚拟机启动后,打开
/home/cetc28/code
目录(具体用户名以实际发布虚拟机为准
)
,右击该目录下的battle
_frameworks
文件夹,选择在终端中打开;
5)
在打开的终端中输入命令 python
3 run.py,即可加载内置的规则智能体进行对战
,运行第一次时可能会报‘
Connection reset by peer’的错误,直接运行第二遍即可;
6)
启动态势显示软件,点击左侧工具栏的连接配置按钮,在弹出窗口中输入虚拟机的
IP
地址,端口号设置为6111,点击登陆即可与仿真平台建立连接,实时显示战场态势。
系统环境:Linux操作系统
推荐硬件配置:主频2.4G以上、内存8G以上
软件要求:docker
以在ubuntu18.04上安装docker社区版为例,主要步骤如下,选手可根据操作系统不同,直接参考网上教程来安装docker:
1.
# 更新软件缓存
2.
sudo apt update
3.
# 安装需要的包
4.
sudo apt-get install apt-transport-https ca-certificates curl
software-properties-common
5.
# 添加
GPG
密钥
6.
curl -fsSL https://download.docker.com/Linux/ubuntu/gpg | sudo apt-key add -
7.
# 添加源
8.
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/Linux/ubuntu $(lsb_release -cs) stable
9.
# 更新软件缓存
10.
sudo apt update
11.
# 安装
docker-ce
12.
sudo apt install docker-ce
13.
# 设置开机自启动并启动
docker-ce(
安装成功后默认已设置并启动
,
可忽略
)
14.
sudo systemctl enable docker
15.
sudo systemctl start docker
16.
# 测试运行
17.
sudo docker -version
18.
# 添加当前用户
(cetc28)
到
docker
用户组
,
可以不用
sudo
运行
docker(
可选
)
19.
sudo groupadd docker
20.
sudo usermod -aG docker cetc28
Docker安装完成后,用下面的命令将docker镜像加载起来(镜像版本号以最终发布为准):
1.
# docker 镜像加载
2.
docker load < combatmodserver_v1.0.tar
加载完的镜像可被所提供开发框架里面的环境管理类E
nvManager
直接调用和运行。
建议硬件配置:
CPU Intel i7-9700k 8
核,3
.60GHz
GPU GeForce RTX 2070Ti
(显存容量8
G
,显存位宽256)
性能更高的硬件能够支持仿真平台进行更高加速比的红蓝对抗推演,从而加速AI的训练和开发效率。
程序语言版本:
选手需要基于python(3.
6.9
版本)进行AI的开发,运行主办方提供的AI对战框架代码。选手需要安装的p
ython
依赖包包括
rpyc(4.1.4
版本
)
建议选手采用t
ensorflow
或p
ytorch
进行AI开发。
为避免不必要的环境冲突,要求选手统一使用tensorflow
1.14.0
版本或者pytorch
1.5.1
版本进行开发。暂不支持选手用其他深度学习框架进行开发。
1)
下载并安装A
naconda
软件。
2)
打开命令行,输入安装虚拟环境的命令(以环境名取p
y36
为例)
:
conda create --name py36 python=3.6.9
3)
激活虚拟环境:
source activate py36
4)
安装所需的p
ython
依赖包。
5)
参考第4节“AI开发流程”进行AI开发。
系统环境
:windows
7
或者
window10, 32位/64位,不支持在虚拟机上运行
。
建议硬件配置:
CPU Intel i7
,主频3
.20GHz
以上
GPU Nvidia GTX980
(显存容量4
G
,显存位宽256)及以上
内存8GB以上
1)
双击JinCEarth_V1.0.0.0_Release.exe开始安装;
2)
点击下一步;
3)
选择程序安装目录(建议将软件安装在D盘根目录下),点击安装;
4)
等待程序安装完成,按照提示立即重启。
图3.
4.2
安装过程示意图
以加载规则智能体为例,给出配置和运行对战脚本run.py的方法。
1)
运行前保证docker镜像已经加载起来。
2)
修改对战次数的超参数num_episodes,环境编号超参数env
_id
,仿真推演速度超参数speed。
3)
修改对战模块里config的内容,字典config描述的是构建仿真环境的配置信息。
a)
server_port为基准端口,由此生成映射到容器内部各端口的宿主机端口号。容器内部共开放四个端口,控制端口3641,态势显示连接端口5454,rpyc连接端口5455,调试端口5901。具体端口映射情况可通过docker ps -a
命令来查看,如图4.1-1所示。对战框架中
EnvManager
类的
get_server_port
方法返回的即为映射到容器内部5455端口的宿主机端口号(比如下图中的6112端口),然后
EnvClient
利用此端口号与仿真平台建立
rpyc连接;而态势显示软件则需要连接到5454映射出来的端口号(比如下图中的6111端口),才能正确获取用于态势显示的各种数据。至于其他两个端口,选手开发过程中暂不需要关心。
图4.1-1
容器内部端口与宿主机端口号映射关系
b)
agents为需要加载的双方智能体信息,默认加载规则智能体;
c)
scene_name为想定文件的绝对路径;
d)
prefix为容器管理脚本manage_client
(已经包含在对战框架压缩包里面)所在路径,该脚本主要供仿真环境管理类EnvManager调用;对战框架里默认给的目录是‘/hom
e/cetc28/code/battle-framework’,若选手将对战框架文件夹(battle-framework)
放在自己定义的目录下,比如/hom
e/lkc
目录,则需要通过修改prefix的值来配置manage
_client
所在目录:/hom
e/lkc/battle-framework
。若不作修改会报‘
…/manage_client
:n
ot found’的错误。
e)
image_name为docker镜像名;
f)
volume_list
为预留接口,用于挂载后续可能更新后的脚本到容器内部;
g)
max_game_len为最大决策步数,用于达到指定决策步数后重置仿真环境。
图4.1-2 仿真环境运行配置
4)
打开终端,进入run.py所在目录,运行命令python3 run.py即可进行对战,对战调度过程的示意如图4.1.3所示。
若提示‘
…/battle-framework/manage_client: Permission denied’的错误,则需要通过命令‘sudo chmod +x manage_client’给manage_client
添加执行权限即可正常运行
。
图4.1-3 对战调度过程
选手可按下述顺序设计智能体:确定输出动作空间
-->态势信息构建和预处理-->设计并搭建神经网络结构-->决策智能体构建-->根据所采用学习算法不同编写智能体训练脚本,对智能体进行训练。
参考开发目录规范如下。
1)
training目录是专门供选手开发的目录(选手也可自建开发目录),首先开发目录下根据战队名新建子文件夹,如cetc28,所有训练相关的代码均放在此目录下。
2)
在train
ing/cetc28子目录下,参考2.3节的接口说明,编写基于规则或者神经网络的决策智能体,并编写相应辅助模块代码,其中构建的智能体需继承自Agent基类。选手根据自己需要改写基类智能体的__init__(用于初始化),reset(用于变量重置)和step(用于根据态势信息生成指令列表)方法,具体用法参见内置规则智能体相关代码。
3)
根据个人训练环境、所采用训练框架和学习算法的不同,编写相应训练脚本,加载所开发模型与规则智能体进行对抗和训练。
1)
算法设计说明文档
包括整体思路、态势信息处理方式、输出动作空间定义、学习算法和训练框架的简要介绍等;若是基于规则的智能体则需要详细介绍作战方案和规则模型。
2)
参赛智能体
agent目录下建立以战队名命名的子文件夹,如agent/cetc28,该子文件夹中需要包括参赛智能体及其支撑模块,且必须包含__init__.py
文件。在
__init__.py
里面导入自己的红蓝A
I
模型类名(见下图示意),要求红方智能体类名中包含Red字段,蓝方智能体类名中包含Blue字段,以便于被大规模对战调度程序自动区分和加载。
3)
模型参数文件
如果是开发基于神经网络的智能体,建议将模型参数文件统一放在智能体程序所在目录的model子目录下,比如agent
/cetc28/model
,其实也就是选手在自己所属目录(agent
/cetc28)
下管理模型参数文件的存放,保证模型参数文件能被自己开发的智能体程序所加载。如
agent/cetc28/model
目录下应该包含红蓝双方两个模型参数文件,如cetc28_red.pkl和cetc28_blue.pkl,每个模型参数文件原则上不超过200
M
。如果是开发规则智能体,因为没有模型参数文件,自然也就不需要model子目录了。
4)
要求所提交的
AI
程序要能够被run.py中的对战程序正确调用。
完整示例如图4.3所示。
图4.3参赛作品提交
态势信息obs的内容包括仿真时间、红方态势和蓝方态势三部分,“airport
s”为机场信息、“teams”为编队信息、“units”为武器平台信息、“qb”为情报信息、“rockets”为敌方发射的导弹信息。需要说明的是若某个武器平台已经损毁,则态势信息不会再报有关该武器平台的任何信息。接下来介绍不同种类信息的具体格式。
图5 态势接口形式
访问方式示例:
obs[‘blue’][‘airports’],得到蓝方机场列表,列表每个元素为字典结构,用于描述该机场的状态。初赛想定中,红蓝双方均只有一个机场。需要特别注意的是,机场的‘W
H’
一直是1,而‘D
A’属性的含义比较特别,不是正常意义上的受损百分比,而是指修复时间,单位是秒。
图5.1 机场信息
仿真平台统一以编队方式对作战单位进行管理,即单个武器平台也视为编队并赋予相应编队号。访问方式示例:obs[
‘blue’][‘teams’],得到蓝方编队列表,列表每个元素为字典结构,用于描述该编队属性。所有作战单位均按编队进行了管理,编队信息具体含义如图5.2所示。其中’LX’
关键字描述的是编队类型信息,类型编码的具体含义详见附件一,比如下图中的21表示护卫舰,11表示歼击机;
’ST’
关键字描述的是编队状态,编码具体含义参见附件二中的说明,如这里的
0表示无状态,16表示空中拦截。编队信息表示存活的下属平台的信息(死亡的平台信息不包含在内),如果编队内所有平台都已经死亡/降落,‘team
s’里不会再有该编队的任何信息;对于编队内某架飞机先行返航的情况,如果编队内平台数量大于1,则将该飞机平台信息从原编队中删除,并给该返航飞机赋一个新的编队号,如果编队内平台数量为1,则给单机下返航的效果与给编队下返航的效果是一样的,即‘teams’里仍然有该编队信息,返航的飞机仍然属于该编队。
图5.2 编队信息
访问方式示例:
obs[‘blue’][‘units’],得到蓝方武器平台信息列表,列表每个元素为字典结构,用于描述该平台属性。其中‘S
T‘关键字描述的是武器平台状态,编码具体含义参见附件三中的说明,如这里41表示舰艇巡逻。需要注意的是,除了指挥所外,其他武器平台的信息结构都是一致的,只有指挥所信息结构比较特殊。需要注意的是,如果武器平台已死亡/降落,则‘units’里不会再包含该平台的信息。
武器平台信息里的‘W
P’为该平台的弹药信息,初赛涉及的弹药信息共分为三种:每艘护卫舰配备36枚编号为‘519‘,攻击距离为100km的舰对空导弹;每架轰炸机挂载2枚编号为’360’
,攻击距离为80km的空对地导弹;每架歼击机挂载6枚编号为
’170’
,攻击距离为80km的中距空空弹;每部地防配备的弹药编号也是
’170’
但攻击距离为100km。
图5.3 武器平台信息
情报信息指当前可获取的敌方单位信息。访问方式示例:
obs[‘red’][‘qb’],得到红方可见的情报信息,列表每个元素为字典结构,用于描述当前可见单位的信息。需要注意的是,初赛想定中存在一些民用目标,他们属于中立单位,对应军别信息‘
JB’的编码为3。为了更贴近真实情况,对抗双方的需要有一个发现和识别的过程,在准确识别目标属性之前,情报信息报出的该目标属性为不明,即军别‘JB’信息为2,类型信息为18(
未知空中目标
)
或者28
(
未知水面/地面目标
)
,型号为‘u
nknown’。若目标处于己方探测范围的60%-100%之内,则只能发现目标,情报信息里该目标属性为不明;若目标处于己方探测范围的60%之内,则可准确识别出目标。蓝方存活指挥所
的信息会直接在红方情报信息里报给红方,
死亡的指挥所则不会再报
,另外红蓝双方的机场信息也会直接报给对方。
图5.4 情报信息
访问方式示例:obs[‘red’][‘
rockets’],得到蓝方已经发射但尚未爆炸的导弹信息,注意‘rockets’里存储的是对方发射的导弹信息。
图5.5
来袭导弹信息
本节对任务指令类型及参数含义作具体说明,每个指令对应EnvCmd类的一个方法。除了这里的说明,在代码中也加了完备的注释信息,选手开发时可直接看代码。
表6.1 仿真指令
指令名称
|
make_simulation()
|
功能说明
|
用于实现加速推演、指定时间暂停功能
|
参数含义
|
|
order_name
|
命令名称(字符串型:‘SPEED’/‘PAUSE’)
|
file_name
|
想定文件路径和名称(字符串型,可为空字符串‘’)
|
speed_num
|
‘SPEED’命令时指推演倍速(整型,0为根据硬件自动调节倍速);
‘PAUSE’命令时表示暂停时间(整型,单位:秒)
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_simulation(‘SPEED’, ‘’, 8)
|
|
cmd = EnvCmd.make_simulation(‘PAUSE’, ‘’, 16)
|
1)
区域巡逻
表6.2-1 区域巡逻指令
指令名称
|
make_areapatrol
|
功能说明
|
区域巡逻(适用于飞机编队)
|
参数含义
|
|
self_id
|
己方编队编号(整型, 举例:5001)
|
px
|
区域中心x轴坐标(浮点型,单位:米)
|
py
|
区域中心y轴坐标
|
pz
|
区域中心z轴坐标
|
direction
|
区域长轴与正北方向角度(整型,顺时针方向,单位:度,[0, 180])
|
length
|
区域长度(整型,单位:米)
|
width
|
区域宽度
|
speed
|
巡逻速度(浮点型,单位:米/秒,歼击机参考速度250m/s,预警机/干扰机/轰炸机参考速度166m/s,无人机参考速度90m/s)
|
patrol_time
|
巡逻时间(整型,单位:秒)
|
patrol_mode
|
巡逻模式(0-普通模式,1-对角模式,为预留接口,暂无实际效果, 默认值为0)
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_areapatrol(5001, 0, 0, 8000, 90, 8000, 8000, 250, 3600, 0)
|
2)
起飞区域巡逻
表6.2-2 起飞区域巡逻指令
指令名称
|
make_takeoff_areapatrol
|
功能说明
|
起飞区域巡逻
|
参数含义
|
|
airport_id
|
机场编号(整型, 举例:20001)
|
fly_num
|
起飞数量(整型)
|
fly_type
|
起飞战机类型(11-歼击机,12-预警机,13-电子干扰机,14-无人侦察记,15-轰炸机)
|
px
|
区域中心x轴坐标(浮点型,单位:米)
|
py
|
区域中心y轴坐标
|
pz
|
区域中心z轴坐标
|
direction
|
区域长轴与正北方向角度(整型,顺时针方向,单位:度,[0, 180])
|
length
|
区域长度(整型,单位:米)
|
width
|
区域宽度
|
speed
|
巡逻速度(浮点型,单位:米/秒,歼击机参考速度250m/s,预警机/干扰机/轰炸机参考速度166m/s,无人机参考速度90m/s)
|
patrol_time
|
巡逻时间(整型,单位:秒)
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_takeoff_areapatrol(20001, 2, 15, 0, 0, 8000, 90, 8000, 8000, 166,
3600)
|
3)
航线巡逻
表6.2-3 航线巡逻指令
指令名称
|
make_linepatrol
|
功能说明
|
航线巡逻(适用于飞机编队)
|
参数含义
|
|
self_id
|
己方编队编号(整型)
|
speed
|
巡逻速度(浮点型,单位:米/秒)
|
area_id
|
区域编号(整型, 预留接口, 暂无实际效果,可设置为任意正整数)
|
area_type
|
区域类型(字符串型,‘line’或者‘area’)
|
point_list
|
航路点列表(每个列表元素为一个Point对象)
|
调用和构建指令示例
|
|
# 航路点列表
point_list = [Point(45000, 0, 8500), Point(-45000, 55000, 8500)]
# 构建指令
cmd = EnvCmd.make_linepatrol(5001, 250, 0, ‘line’, point_list)
|
4)
起飞航线巡逻
表6.2-4 起飞航线巡逻指令
指令名称
|
make_takeoff_linepatrol
|
功能说明
|
起飞航线巡逻
|
参数含义
|
|
airport_id
|
机场编号(整型)
|
fly_num
|
起飞数量(整型)
|
fly_type
|
起飞战机类型
|
speed
|
巡逻速度(浮点型,单位:米/秒)
|
area_id
|
区域编号(整型,暂无实际效果,可设置为任意整数)
|
area_type
|
区域类型(字符串型,‘line’或者‘area’)
|
point_list
|
航路点列表(每个列表元素为一个Point对象)
|
调用和构建指令示例
|
|
# 航路点列表
point_list = [Point(45000, 0, 8500), Point(-45000, 55000, 8500)]
# 构建指令
cmd = EnvCmd.make_takeoff_linepatrol(20001, 2, 11, 250, 0, ‘line’, point_list)
|
5)
区域突击
表6.2-5 区域突击指令
指令名称
|
make_areahunt
|
功能说明
|
区域突击(适用于轰炸机编队)
|
参数含义
|
|
self_id
|
己方编队编号(整型)
|
direction
|
突击方向,相对正北方向角度(整型,逆时针方向,单位:度,[0, 360])
|
range
|
武器发射距离与最大射程百分比(整型,[1,100])
|
px
|
区域中心x轴坐标(浮点型,单位:米)
|
py
|
区域中心y轴坐标
|
pz
|
区域中心z轴坐标
|
area_direct
|
区域长轴与正北方向角度(整型,顺时针方向,单位:度,[0, 180])
|
area_len
|
区域长度(整型,单位:米)
|
area_wid
|
区域宽度
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_areahunt(5002, 270, 50, 0, 0, 7000, 90, 8000, 8000)
|
6)
起飞区域突击
表6.2-6 起飞区域突击指令
指令名称
|
make_takeoff_areahunt
|
功能说明
|
起飞区域突击
|
参数含义
|
|
airport_id
|
机场编号(整型)
|
fly_num
|
起飞数量(整型)
|
direction
|
突击方向,相对正北方向角度(整型,逆时针方向,单位:度,[0, 360])
|
range
|
武器发射距离与最大射程百分比(整型,[1,100])
|
px
|
区域中心x轴坐标(浮点型,单位:米)
|
py
|
区域中心y轴坐标
|
pz
|
区域中心z轴坐标
|
area_direct
|
区域长轴与正北方向角度(整型,顺时针方向,单位:度,[0, 180])
|
area_len
|
区域长度(整型,单位:米)
|
area_wid
|
区域宽度
|
speed
|
突击速度(浮点型,单位:米/秒,参考速度166m/s)
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_takeoff_areahunt(30001, 4, 90, 50, 0, 0, 7000, 0, 8000, 8000,
166)
|
7)
目标突击。range参数为武器发射距离与最大射程百分比,距离越近命中率越高,另外需要注意的是,机场目标当前只支持通过(起飞)目标突击指令进行打击。
表6.2-7 目标突击指令
指令名称
|
make_targethunt
|
功能说明
|
目标突击(适用于轰炸机编队)
|
参数含义
|
|
self_id
|
己方编队编号(整型)
|
target_id
|
敌方平台编号(整型)
|
direction
|
突击方向,相对正北方向角度(整型,逆时针方向,单位:度,[0, 360])
|
range
|
武器发射距离与最大射程百分比(整型,[1,100])
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_targethunt(5002, 37, 90, 50)
|
8)
起飞目标突击
表6.2-8 起飞目标突击指令
指令名称
|
make_takeoff_targethunt
|
功能说明
|
起飞目标突击
|
参数含义
|
|
airport_id
|
机场编号(整型)
|
fly_num
|
起飞数量(整型)
|
target_id
|
敌方平台编号(整型)
|
direction
|
突击方向,相对正北方向角度(整型,逆时针方向,单位:度,[0, 360])
|
range
|
武器发射距离与最大射程百分比(整型,[1,100])
|
speed
|
突击速度(浮点型,单位:米/秒,参考速度166m/s)
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_takeoff_targethunt(30001, 4, 37, 90, 50, 166)
|
9)
护航
表6.2-9 护航指令
指令名称
|
make_protect
|
功能说明
|
护航(适用于歼击机编队)
|
参数含义
|
|
self_id
|
己方编队编号(整型)
|
cov_id
|
被护航编队编号(整型)
|
flag
|
护航方式(整型,1-前,2-后,3-左,4-右)
|
offset
|
与护航目标间距(整型,单位:百米,[1,100])
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_protect(5001, 5003, 1, 5)
|
10)
起飞护航
表6.2-10 起飞护航指令
指令名称
|
make_takeoff_protect
|
功能说明
|
起飞护航
|
参数含义
|
|
airport_id
|
机场编号(整型)
|
fly_num
|
起飞数量(整型)
|
cov_id
|
被护航编队编号(整型)
|
flag
|
护航方式(整型,1-前,2-后,3-左,4-右)
|
offset
|
与护航目标间距(整型,单位:百米,[1,100])
|
speed
|
速度(浮点型,单位:米/秒)
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_takeoff_protect(20001, 2, 5003, 1, 5, 250)
|
11)
空中拦截
表6.2-11 空中拦截指令
指令名称
|
make_airattack
|
功能说明
|
空中拦截(适用于在空歼击机平台,与目标距离小于50km时发弹)
|
参数含义
|
|
self_id
|
己方歼击机平台编号(整型)
|
target_id
|
敌方平台编号(整型)
|
type
|
拦截的引导方法(整型,0/1)
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_airattack(17, 27, 1)
|
12)
返航
表6.2-12 返航指令
指令名称
|
make_returntobase
|
功能说明
|
返航(适用于飞机编队或者单个飞机平台)
|
参数含义
|
|
self_id
|
己方飞机编队或平台编号(整型)
|
airport_id
|
己方机场编号(整型)
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_returntobase(5001, 20001)
|
1)
地防添加指定目标
表6.3-1 地防添加指定目标指令
指令名称
|
make_ground_addtarget
|
功能说明
|
地防添加指定目标(适用于地面防空编队)
|
参数含义
|
|
self_id
|
己方地防编队编号(整型)
|
target_id
|
敌方平台编号(整型)
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_ground_addtarget(5005, 27)
|
2)
地防移除指定目标
指令名称为make_ground_removetarget,参数含义同‘地防添加指定目标’。
3)
地防雷达开关机
表6.3-2 地防雷达开关机指令
指令名称
|
make_ground_radarcontrol
|
功能说明
|
地防雷达开关机(适用于地面防空编队)
|
参数含义
|
|
self_id
|
己方地防编队编号(整型)
|
on_off
|
开关机(整型,0-关、1-开)
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_ground_radarcontrol(5005, 1)
|
4)
设置防御方向
表6.3-3 地防设置防御方向指令
指令名称
|
make_ground_setdirection
|
功能说明
|
设置防御方向(适用于地面防空编队)
|
参数含义
|
|
self_id
|
己方地防编队编号(整型)
|
direction
|
防御方向与正北方向夹角(整型,逆时针方向,单位:度,[0, 360])
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_ground_setdirection(5005, 300)
|
5)
机动至指定位置重新部署
需要注意的是,地防初始部署位置只能在己方半场,且只允许在开局2分钟内进行调整。若目标部署位置位于海里,则仿真平台不会执行该指令。
表6.3-4 机动至指定位置重新部署指令
指令名称
|
make_ground_movedeploy
|
功能说明
|
机动至指定位置重新部署(适用于地面防空编队)
|
参数含义
|
|
self_id
|
己方地防编队编号(整型)
|
px
|
目标点x轴坐标(浮点型,单位:米)
|
py
|
目标点y轴坐标
|
pz
|
目标点z轴坐标
|
direction
|
防御方向与正北方向夹角(整型,逆时针方向,单位:度,[0, 360])
|
radar_state
|
雷达开关机状态(整型,0-关、1-开)
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_ground_movedeploy(5005, -132000, -86000, 0, 300, 1)
|
1)
舰船添加指定目标
指令名称为make_ship_addtarget,参数含义同‘地防添加指定目标’。
2)
舰船移除指定目标
指令名称为make_ship_removetarget,参数含义同‘地防移除指定目标’。
3)
舰船雷达开关机
指令名称为make_ship_radarcontrol,参数含义同‘地防雷达开关机’。
4)
舰船初始部署
指令名称为
make_ship_movedeploy,参数含义同‘机动至指定位置重新部署’。需要注意的是,初赛限定舰船初始部署位置只能在己方半场,且只允许在开局2分钟内进行调整。
5)
舰船区域巡逻防空
指令名称为make_ship_areapatrol,参数含义同‘区域巡逻’指令。
1)
区域巡逻探测
指令名称为make_awcs_areapatrol,参数含义同‘区域巡逻’。
2)
航线巡逻探测
指令名称为make_awcs_linepatrol,参数含义同‘航线巡逻’。
3)
预警机探测模式
表6.5-1 预警机探测模式设置指令
指令名称
|
make_awcs_mode
|
功能说明
|
预警机探测模式(适用于预警机编队)
|
参数含义
|
|
self_id
|
己方预警机编队编号(整型)
|
mode
|
探测模式(整型,0-对空、1-对海、2-空海交替)
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_awcs_mode(5004, 2)
|
4)
预警机雷达开关机
指令名称为make_awcs_radarcontrol,参数含义同‘地防雷达开关机’。
5)
探测任务取消
表6.5-2 预警机探测任务取消指令
指令名称
|
make_awcs_canceldetect
|
功能说明
|
预警机探测任务取消(适用于预警机编队)
|
参数含义
|
|
self_id
|
己方预警机编队编号(整型)
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_awcs_canceldetect(5004)
|
1)
区域干扰
指令名称make_disturb_areapatrol,参数含义同‘区域巡逻’。
2)
航线干扰
指令名称make_disturb_linepatrol,参数含义同‘航线巡逻’。
3)
设置干扰模式
表6.6-1 设置干扰模式指令
指令名称
|
make_disturb_setmode
|
功能说明
|
设置干扰模式(适用于干扰机编队)
|
参数含义
|
|
self_id
|
己方干扰机编队编号(整型)
|
mode
|
干扰模式(整型,0-阻塞干扰、1-瞄准干扰)
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_disturb_setmode(5006, 0)
|
4)
关闭干扰
表6.6-2 干扰机关闭干扰指令
指令名称
|
make_disturb_close
|
功能说明
|
关闭干扰(适用于干扰机编队)
|
参数含义
|
|
self_id
|
己方干扰机编队编号(整型)
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_disturb_close(5006)
|
5)
结束干扰
指令名称为make_disturb_stop,参数含义同‘关闭干扰’。
1)
区域巡逻侦查
指令名称为make_uav_areapatrol,参数含义同‘区域巡逻’。
2)
航线巡逻侦查
指令名称为make_uav_linepatrol,参数含义同‘航线巡逻’。
3)
侦查任务取消
表6.7-1 侦查任务取消指令
指令名称
|
make_uav_canceldetect
|
功能说明
|
侦查任务取消(适用于侦察机编队)
|
参数含义
|
|
self_id
|
己方侦察机编队编号(整型)
|
调用和构建指令示例
|
|
cmd = EnvCmd.make_uav_canceldetect(5008)
|
1)
地面雷达开关机
指令名称为make_radarcontrol,参数含义同‘地防雷达开关机’。
不同单位类型编码说明如下表所示。
附表1
单位类型说明
类型编码
|
类型说明
|
类型编码
|
类型说明
|
类型编码
|
类型说明
|
0
|
不明
|
15
|
轰炸机
|
42
|
机场
|
11
|
歼击机
|
21
|
护卫舰
|
18
|
未知空中目标
|
12
|
预警机
|
31
|
地面防空
|
19
|
民航
|
13
|
干扰机
|
32
|
地面雷达
|
28
|
未知水面/地面目标
|
14
|
无人侦察机
|
41
|
指挥所
|
29
|
民船
|
态势的编队信息,包含各编队当前状态的编码,不同编码的含义如下表所示。
当编队处于起飞(对应状态编码4)或降落状态(对应状态编码5)时,不会响应外部指令
。
附表
2 编队状态信息
状态名
|
状态码
|
状态说明
|
状态名
|
状态码
|
状态说明
|
none
|
0
|
无状态
|
on_Ground_Set_Derection
|
33
|
设置防御方向
|
move_to_point
|
1
|
达到点
|
on_Ground_Move_Deploy
|
34
|
机动某处重新部署
|
move_to_line
|
2
|
到达航线
|
on_Ground_Deploy
|
35
|
初始部署
|
move_to_area
|
3
|
到达区域
|
on_Ship_Move_Deploy
|
40
|
机动至指定位置重新部署
|
takeoff
|
4
|
飞机起飞任务
|
on_Ship_area_patrol
|
41
|
区域巡逻
|
land
|
5
|
飞机降落任务
|
on_AddShip_Target
|
42
|
船指定目标防空
|
area_patrol
|
6
|
区域巡逻
|
on_RemoveShip_Target
|
43
|
删除打击目标
|
takeoff_area_patrol
|
7
|
起飞区域巡逻
|
on_Ship_radarcontrol
|
44
|
雷达开关机
|
line_patrol
|
8
|
航线巡逻
|
on_AWCS_area_patrol
|
51
|
区域侦察
|
takeoff_line_patrol
|
9
|
起飞航线巡逻
|
on_AWCS_line_patrol
|
52
|
航线侦察
|
area_hunt
|
10
|
区域突击
|
on_awcs_mode
|
53
|
设置探测模式
|
takeoff_area_hunt
|
11
|
起飞区域突击
|
on_AWCS_radarcontrol
|
54
|
预警机雷达开关机
|
target_hunt
|
12
|
目标突击
|
on_awcs_cancledetect
|
55
|
预警机取消侦察任务
|
takeoff_target_hunt
|
13
|
起飞目标突击
|
on_area_disturb_patrol
|
60
|
区域干扰
|
protect
|
14
|
护航任务中
|
on_line_disturb_patrol
|
61
|
航线干扰
|
takeoff_protect
|
15
|
起飞护航任务
|
on_set_disturb
|
62
|
设置干扰模式
|
air_attack
|
16
|
空中拦截
|
on_close_disturb
|
63
|
关闭干扰
|
return_to_base
|
17
|
返航
|
on_stop_disturb
|
64
|
结束干扰
|
takeoff_mass_success
|
18
|
起飞集结完成
|
on_UAV_area_patrol
|
71
|
区域侦察
|
on_AddGround_Target
|
30
|
地防增加目标
|
on_UAV_line_patrol
|
72
|
航线侦察
|
on_RemoveGround_Target
|
31
|
地防取消目标打击
|
on_UAV_cancledetect
|
73
|
取消侦察任务
|
on_Ground_radarcontrol
|
32
|
地防雷达开关机
|
on_base_radarcontrol
|
81
|
地面雷达开关机
|
态势的武器平台信息,包含各武器平台当前状态的编码,不同编码的含义如下表所示。
同样当武器平台处于起飞(对应状态编码2)或降落状态(对应状态编码5)时,不会响应外部指令
。
附表
3 武器平台状态信息
状态名
|
状态码
|
状态说明
|
状态名
|
状态码
|
状态说明
|
none
|
0
|
无状态
|
air_guide
|
13
|
空中引导
|
death
|
1
|
死亡
|
route_assault
|
14
|
航线突击
|
takeoff
|
2
|
起飞
|
air_hit
|
15
|
空中打击
|
takeoff_success
|
3
|
起飞成功
|
return_base
|
16
|
返航
|
takeoff_fail
|
4
|
起飞失败
|
air_escort
|
17
|
护航
|
land
|
5
|
降落
|
ground_moving
|
31
|
地防到新地点重新部署,移动中
|
land_success
|
6
|
降落成功
|
ground_stop
|
32
|
停止状态
|
land_fail
|
7
|
降落失败
|
ship_patrol
|
41
|
舰艇巡逻
|
airport_await
|
8
|
机场待命
|
disturb_on
|
60
|
实施干扰
|
air_patrol
|
9
|
空中巡逻
|
disturb_off
|
61
|
无干扰
|
air_point_patrol
|
10
|
空中点巡逻
|
radar_on
|
91
|
雷达开机
|
air_line_patrol
|
11
|
空中航线巡逻
|
radar_off
|
90
|
雷达关机
|
air_area_patrol
|
12
|
空中区域巡逻
|
cancel_detect
|
92
|
取消探测任务
|