Skip to content

Latest commit

 

History

History
655 lines (485 loc) · 15.2 KB

File metadata and controls

655 lines (485 loc) · 15.2 KB

AFSIM NL2Code 生成范式(最终 A 版)

TL;DR(提炼版,一页规则)

文件骨架

  • 必有:set_up.txt + platforms/ sensors/ weapons/ process/ signatures/ scenarios/
  • 允许子目录细分库(如 sensors/radar/weapons/aam/agm/ssm),include 规则不变。

平台与场景边界

  • platforms/ 只定义 platform_type(能力组合:mover/sensor/weapon/processor/signature/comm)。
  • scenarios/ 只做实例化(platform/position/route/command_chain/edit)。

include 规则

  • 平台引用了什么,就 include 对应库:
    • sensor → sensors/*.txt
    • weapon → weapons/*.txt
    • processor → process/*.txt
    • signature → signatures/*.txt
    • antenna_pattern → patterns/*.txt(可同文件定义)
  • 不要把依赖留给 scenario 或 set_up。

能力触发 → 必须生成

  • 移动/航线:有 route 就必须有 mover。
  • 探测:有 sensor 就必须有 data_mgr(WSF_TRACK_PROCESSOR)。
  • 交战:有 weapon 就必须有 task_mgr(或任务处理器)。
  • 可被探测目标:platform / missile 至少一个 signature。

武器三件套

  1. ammo 平台(platform_type … mover …)
  2. weapon_effects
  3. weapon(WSF_EXPLICIT_WEAPON,必须 launched_platform_type + weapon_effects

通信/链路

  • 常见:network + comm TEAM_DATALINK + internal_link data_mgr
  • 支持 local_link / external_link / report_to command_chain

场景常用字段

  • side / position / altitude / heading / speed
  • route ... end_route
  • command_chain <chain> <commander|SELF>
  • edit sensor / edit processor
  • zone ... end_zone + use_zone <zone> as <alias>

一致性校验(必须)

  • internal_link data_mgr → 必有 WSF_TRACK_PROCESSOR
  • Weapon("x")weapon x
  • routes → platform_type 必有 mover
  • 引用的 platform_type/sensor/weapon/signature/processor 必须存在

目标 将自然语言形式的军事想定(NL)稳定、可控地转化为 结构正确、依赖完整、可运行的 AFSIM 工程代码

本规范定义:

  • 工程目录结构
  • 文件职责边界
  • 能力触发 → 代码块生成规则
  • 雷达 / 武器 / signature 的完整范式
  • 分布式雷达-防空与一体化交战的脚本架构
  • NL2Code 推荐生成顺序与一致性校验

1. 工程输出目录规范(强制)

ProjectName/
├─ set_up.txt                 # 仿真入口文件(顶层控制)
├─ output/                    # 输出(log / event / aer)
├─ patterns/                  # 天线/波束/扫描模式库
├─ platforms/                 # 平台模板库(实体本体)
├─ process/                   # 行为逻辑 / 处理器
├─ scenarios/                 # 场景部署(实例化)
├─ signatures/                # 目标特征库(RCS / IR / EO)
├─ sensors/                   # 传感器模型库
└─ weapons/                   # 武器与弹药定义库

案例补充:data 中大量使用子目录来细分库,例如
sensors/radar/sensors/esm_rwr/weapons/aam/weapons/agm/weapons/ssm/
这不改变 include 规则,只是库的组织方式更细。


2. 目录责任边界(核心约束)

2.1 platforms vs scenarios(必须严格区分)

platforms/

  • 定义 platform_type(模板)
  • 描述:实体“是什么 + 能做什么”
  • 包含:
    • mover
    • sensors
    • weapons
    • processors
    • signatures
    • comm
  • 必须 include_once 所有直接依赖的库文件

scenarios/

  • 只负责 实例化与部署
  • 描述:
    • 实例数量
    • 阵营
    • 初始位置 / 航线
    • 指挥链 / zone
  • ❌ 不允许定义 platform_type
  • ✅ 允许 edit sensor / edit weapon / edit processor 做实例差异化

平台是能力组合,场景不是能力补丁


3. include / 依赖规则(强制)

3.1 platform 文件必须 include 的内容

只要平台中 直接引用 了以下对象,就必须 include 对应库:

引用内容 必须 include
sensor <inst> <MODEL> sensors/*.txt
weapon <inst> <WEAPON_TYPE> weapons/*.txt
processor <inst> <TYPE> process/*.txt
radar/IR/EO signature signatures/*.txt
antenna_pattern patterns/*.txt

禁止:把依赖留给 scenario 或 set_up 隐式补齐。

案例补充(data/*):

  • 常见做法:platforms/common.txt 统一定义 signature / comm / network / filter,其他平台 include_once platforms/common.txt 复用。
  • include_once 用于库定义,include 用于组合场景或顶层入口(例如 setup.txt / orwaca_full_area.txt)。

4. 命名与一致性约定(NL2Code 防崩关键)

4.1 三种名字必须区分

类型 示例
平台类型名 SAM_GROUND_SA10
平台实例名 red_sam_01
武器实例名 sam_launcher

4.2 强制一致性规则

Weapon("X") 中的 "X" 必须等于平台中 weapon 的实例名

weapon sam_launcher SA10_WEAPON
...
Weapon("sam_launcher")

5. 能力触发 → 必须生成的代码块(NL2Code 核心)


5.1 Mover(所有平台必需)

触发 NL 飞机 / 车辆 / 导弹 / 舰船 / UAV / 移动 / 航线

platform_type <TYPE> WSF_PLATFORM
  mover WSF_AIR_MOVER    # 或 GROUND / SURFACE
    maximum_speed 250 m/s
  end_mover
end_platform_type

5.2 Signatures(所有可被探测对象必需)

强制规则 所有平台与导弹 必须至少绑定一种 signature,否则无法被探测/交战。

radar_signature     FTR_RCS
infrared_signature  FTR_IR
optical_signature   FTR_EO

5.3 Sensors(雷达 / 红外 / 光电 / ESM)

触发 NL 搜索 / 探测 / 跟踪 / 预警 / 照射

5.3.1 patterns/(天线模式库)

antenna_pattern ACQ_RADAR_ANTENNA
  rectangular_pattern
    peak_gain      35 dB
    minimum_gain  -10 db
    azimuth_beamwidth   10 deg
    elevation_beamwidth 10 deg
  end_rectangular_pattern
end_antenna_pattern

5.3.2 sensors/(雷达模型)

include_once patterns/radar_patterns.txt

sensor ACQ_RADAR WSF_RADAR_SENSOR
  one_m2_detect_range   500 nm
  maximum_range        1500 nm

  antenna_height       5 m
  frame_time           10 sec

  scan_mode             azimuth_and_elevation
  azimuth_scan_limits  -180 deg 180 deg
  elevation_scan_limits   0 deg  50 deg

  transmitter
    antenna_pattern ACQ_RADAR_ANTENNA
    power           1000 kw
    frequency       3000 mhz
    internal_loss      2 db
  end_transmitter

  receiver
    antenna_pattern ACQ_RADAR_ANTENNA
    bandwidth        2 mhz
    noise_power   -160 dbw
    internal_loss    7 db
  end_receiver

  probability_of_false_alarm 1.0e-6
  required_pd                0.5
  swerling_case              1

  hits_to_establish_track 3 5
  hits_to_maintain_track  1 5

  track_quality 0.6

  reports_range
  reports_bearing
  reports_elevation
  reports_iff
end_sensor

5.3.3 平台绑定 sensor

sensor acq ACQ_RADAR
  on
  internal_link data_mgr
end_sensor

5.3.4 Radar Sensor 高级形态(来自 data 案例)

  • 在对空搜索 / 导引头 seeker 中常见字段:
    selection_mode / initial_mode / slew_mode / mode_template / mode
  • antenna_pattern 可直接写在 sensors/.txt 与 sensor 同文件,**不一定非要单独 patterns/.txt**。
sensor RADAR_SEEKER WSF_RADAR_SENSOR
   selection_mode  single
   initial_mode    SEARCH
   slew_mode       azimuth_and_elevation
   mode_template
      scan_mode            azimuth_and_elevation
      azimuth_scan_limits  -90 deg 90 deg
      elevation_scan_limits -90 deg 90 deg
      frame_time           1.0 sec
   end_mode_template
   mode SEARCH
      frame_time 0.1 sec
   end_mode
end_sensor

5.4 data_mgr / Track Processor(极其关键)

强制规则 只要任一 sensor 使用 internal_link data_mgr,平台必须定义:

processor data_mgr WSF_TRACK_PROCESSOR
end_processor

5.5 Comm / 数据链 / 指挥链

触发 NL 协同交战 / 预警机引导 / IADS / 雷达-火控分离

comm cmdr_net TEAM_DATALINK
  network_name <local:slave>
  internal_link data_mgr
end_comm

⚠ 即使平台没有 sensor,也必须有 data_mgr + comm 才能接收航迹并交战

5.5.1 网络/中继/外链(来自 data 案例)

常见组合:

network blue_net WSF_COMM_NETWORK_MESH_LEGACY
end_network

comm blue_comm TEAM_DATALINK
   network_name blue_net
   internal_link data_mgr
end_comm

多跳/外链:

  • local_link <comm_name> 用于本地转发
  • external_link platform <id> comm <comm_name> via <comm_name> 用于跨平台转发
  • report_to command_chain <chain> commander via <comm> 让 data_mgr 通过链路上报
  • Ad-hoc 组网常见:WSF_COMM_NETWORK_AD_HOC + WSF_RADIO_TRANSCEIVER

track_manager + filter 常见搭配:

track_manager
   filter FILTER_TACTICS end_filter
end_track_manager

5.6 Weapons(三件套,必须完整)

5.6.1 弹药平台(导弹本体)

platform_type LARGE_SAM_MISSILE WSF_PLATFORM
  mover WSF_STRAIGHT_LINE_MOVER
    average_speed 2643 kts
    maximum_lateral_acceleration 20 g
    guidance_mode lead_pursuit
  end_mover

  radar_signature     MISSILE_RCS
  infrared_signature  MISSILE_IR

  processor seeker WSF_PERFECT_TRACKER
    update_interval 0.5 s
  end_processor

  processor fuse WSF_AIR_TARGET_FUSE
    max_time_of_flight_to_detonate 37 sec
  end_processor
end_platform_type

5.6.2 杀伤模型

weapon_effects LARGE_SAM_EFFECT WSF_GRADUATED_LETHALITY
  radius_and_pk 100 m 0.7
end_weapon_effects

5.6.3 发射器

weapon LARGE_SAM_WEAPON WSF_EXPLICIT_WEAPON
  launched_platform_type LARGE_SAM_MISSILE
  weapon_effects LARGE_SAM_EFFECT
end_weapon

5.6.4 平台引用武器

weapon sam_launcher LARGE_SAM_WEAPON
  quantity 16
end_weapon

5.6.5 武器高级形态(来自 data 案例)

  1. 气动/弹道模型(WSF_AERO)
aero SIMPLE_AERO WSF_AERO
   mach_and_cd 0.0 1.35
   mach_and_cd 1.0 1.85
   reference_area 0.02488 m2
end_aero
  1. 导引/制导/武器管理
processor autopilot WSF_GUIDANCE_COMPUTER
end_processor

processor weapon_manager WSF_WEAPON_TRACK_PROCESSOR
   turn_on_sensor seeker at_time 30 s before_intercept
end_processor
  1. 导弹内置 seeker(sensor + internal_link)
sensor seeker RADAR_SEEKER
   internal_link track_mgr
   internal_link weapon_manager
end_sensor

5.7 场景实例化补充(来自 data 案例)

场景里常见字段与能力:

  • side / position / altitude / heading / speed
  • command_chain <chain> <commander_id|SELF>
  • edit sensor / edit processor 进行单个平台的临时改参
  • route ... end_route 进行路径/航线
  • zone ... end_zoneuse_zone <zone> as <alias>
zone 100_sector
   circular
      maximum_radius 60 nm
      maximum_altitude 20 nm
end_zone

platform 10_iads_cmdr IADS_CMDR
   side blue
   position 34:37:33.94n 52:06:41.47e
   command_chain blue_chain SELF
   edit processor data_mgr
      report_to command_chain blue_chain commander via blue_comm
   end_processor
end_platform

6. Signature 库范式(强烈推荐)

6.1 按实体类别复用

# Tank
infrared_signature TANK_IR
  constant 50 watts/steradian
end_infrared_signature

optical_signature TANK_EO
  constant 10 m^2
end_optical_signature

radar_signature TANK_RCS
  constant 5 m^2
end_radar_signature

(Fighter / Aircraft / Ship / SAM site / Radar vehicle / UAV 同理)

6.2 导弹 Signature(必须新增)

infrared_signature MISSILE_IR
  constant 800 watts/steradian
end_infrared_signature

radar_signature MISSILE_RCS
  constant 0.05 m^2
end_radar_signature

7. 脚本生成架构建议(非常关键)

7.1 分三层,不要混写

层 1:数据层(探测 / 航迹 / 共享)

  • sensor → data_mgr → comm
  • 不写脚本,靠 AFSIM 内建机制

层 2:交战决策层(是否开火)

  • SIMPLE_ENGAGE 或 WSF_SCRIPT_PROCESSOR
  • 从 data_mgr 取航迹
  • 调用 Weapon("sam_launcher")

层 3:战术 / 时序层

  • 雷达开关(EMCON)
  • 发射窗口
  • 优先级规则
  • 定时 / 周期触发

7.2 脚本块常见形态(来自 data 案例)

  • script_variables 声明可在脚本/处理器内使用的变量
  • execute at_interval_of 周期执行
  • on_message 响应消息(如 WSF_TRACK_MESSAGE)
script_variables
   bool mDrawTarget = false;
end_script_variables

execute at_interval_of 1 sec
   if (mDrawTarget)
   {
      // do something
   }
end_execute

on_message
   type WSF_TRACK_MESSAGE
      script
         writeln(PLATFORM.Name(), "RECEIVES TRACK");
      end_script
end_on_message

8. 两种典型交战拓扑(NL2Code 默认拼装)

8.1 雷达-防空分离(推荐默认)

Radar 平台

  • sensor + data_mgr
  • comm + data_mgr
  • 无 weapon

SAM 平台

  • data_mgr + comm
  • weapon
  • fire_control processor

雷达发现 → comm 共享航迹 → SAM 自动交战 ❌ 不需要“手写雷达转交目标脚本”


8.2 一体化防空平台

  • sensor + data_mgr
  • weapon
  • fire_control

9. set_up.txt(入口模板)

include_once platforms/common.txt
include_once platforms/<USED_PLATFORMS>.txt

include_once scenarios/<SCENARIO>.txt

event_pipe file output/project.aer
end_event_pipe

end_time 60 minutes

9.1 简单布局(单入口)

  • set_up.txt 直接 include_once 各类库 + scenarios
  • 适用于小规模或单一场景

9.2 IADS / 多场景布局(来自 data/taiacid)

setup.txt 用于加载类型库与环境,主入口文件再 include 多个场景:

file_path .
include event_output.txt
include event_pipe.txt
include terrain.txt
include_once platforms/common.txt
include_once platforms/<PLATFORMS>.txt

主入口(如 orwaca_full_area.txt):

define_path_variable CASE orwaca_full_area
log_file output/$(CASE).log

include setup.txt
include scenarios/<SCENARIO_1>.txt
include scenarios/<SCENARIO_2>.txt

event_output file output/$(CASE).evt end_event_output
event_pipe file output/$(CASE).aer end_event_pipe
end_time 5 hours

10. NL2Code 推荐生成顺序

  1. NL → 中间表示(实体 / 能力 / 关系)
  2. 选择或补齐库(最小可跑)
  3. 生成 platforms(含 include)
  4. 生成 sensors / weapons / signatures / process
  5. 生成 scenarios
  6. 生成 set_up.txt
  7. 执行一致性校验

11. 一致性校验清单(必须)

  • internal_link data_mgr → 必有 WSF_TRACK_PROCESSOR
  • Weapon("x") ↔ weapon x
  • 雷达 → antenna_pattern 可达
  • 所有 platform / missile → 至少一个 signature
  • scenarios 中出现 route → 对应 platform_type 必须有 mover
  • scenarios 中引用的平台类型必须存在
  • 所有引用对象可解析

12. 核心设计原则(给模型)

  • 结构优先于细节
  • 能力驱动,而不是名字驱动
  • 平台是“能力组合体”
  • 脚本只做决策,不做感知
  • 跑得起来 > 看起来复杂