Files
auto-solution/auto-solution-rule/src/main/resources/rules
2026-04-15 15:30:20 +08:00
..
2026-04-15 15:30:20 +08:00

fire-rule.drl 维护说明(业务+开发)

本文档对应 auto-solution-rule/src/main/resources/rules/fire-rule.drl 当前版本,重点说明:

  • 业务人员改哪里
  • 每个参数改了会产生什么效果
  • 如何快速判断规则是否“命中/不命中”

1. 先看这一个入口:业务可改区

只改 //TODO 下的 buildBusinessConfig(),其他函数不要改。

buildBusinessConfig() 里每个参数的效果如下。

2. 参数-效果对照(给业务人员)

2.0 规则过程总览(先看这一条)

引擎按 salience 从高到低 依次执行(同一 agenda-group 内数字越大越先跑)。主链路可以理解为:先定武器与目标关系 → 再补组件与数量 → 再定任务名与空间位置 → 最后射程与航迹

flowchart TD
  step1["红方武器自适应装配 55"]
  step2["导弹联动增强 54"]
  step3["导弹组件数量匹配 53"]
  step4["命中率动态数量与offset 52"]
  step5["任务自动匹配 50"]
  step6["阵位区域解析 49"]
  step7["阵位武器部署赋位 48"]
  step8["射程合理性校验 47"]
  step9["航迹生成 46"]
  step1 --> step2 --> step3 --> step4 --> step5 --> step6 --> step7 --> step8 --> step9

两种装配主路径(由 enableRuleScoring 决定)

模式 开关 武器从哪来 targetId 怎么定
过程驱动整数加分 enableRuleScoring=true(默认) 对每个蓝方目标抽特征 → 红方候选池打分 → 并列最高分全选 → 按需求数克隆武器 生成红方武器时 直接写入 对应该蓝目标的 equipmentId(见 allocateRedWeaponsForBlueTarget
传统白名单映射 enableRuleScoring=false enableAirRule 等开关 + map_*_targets 映射追加武器 装配结束后调用 bindTargetIdsForRedWeapons:可行性过滤 + 五维加权分 + 边际递减 + 比例/回退

调参时的阅读顺序建议:先确认当前是过程驱动还是白名单 → 再改对应段落里的开关与阈值 → 最后看下游规则(命中率改数量、阵位改坐标)是否仍符合预期。

2.1 武器名称映射(改名字,不改逻辑)

  • redStrikeDroneName:空中反制组中的无人机名称。
  • redArmedHelicopterName:空中反制组中的武装直升机名称。
  • redHowitzerName:地面反制组中的迫榴炮名称。
  • redVehicleMortarName:地面反制组中的车载迫击炮名称。
  • redAaWeaponName:空中反制组中的防空导弹武器名称。
  • redAtRocketName:装甲反制组中的反坦克火箭名称。
  • redAtMissileSystemName:装甲反制组中的反坦克导弹系统名称。
  • redMissileVehicleName:导弹补充组中的导弹发射车名称。

2.2 白名单开关(决定“是否匹配”)

仅当 enableRuleScoring=false,下列开关与映射主导装配;enableRuleScoring=true 时走过程驱动,本节开关对是否出武器基本不生效(仍可能影响你后续阅读的兼容映射字段)。

参数 作用 影响什么 怎么调整
enableAirRule 是否允许“蓝方有空中目标”时走空中反制映射 false 时空中组整条链路不追加武器 不需要空中反制时置 false,减少误匹配
enableGroundRule 是否允许蓝方地面目标触发炮类反制组 影响迫榴炮/车载迫击炮等是否出现 只想反装甲不上炮时置 false
enableArmorRule 是否允许装甲目标触发反坦克组 影响反坦克火箭/导弹系统等是否出现 关闭后装甲线完全不走映射
enableMissileVehicleRule 蓝方有导弹能力时是否追加导弹发射车 控制是否额外生成 map_missile_targets 对应武器 默认多为 false,需导弹车时再开
enableMissileLinkage 导弹联动增强(applyMissileLinkage)是否执行 true 且满足门槛时,给红方空中武器补/增强导弹组件数量与射程 不想自动改导弹数量与范围时置 false
allowMultiGroup 多组策略是否可叠加 true:空中/地面/装甲等多条可同时命中;false只命中第一组,后续不再加武器 想规则更“硬”、少组合时置 false
enableArmedHelicopterOnAir 空中映射中是否包含武装直升机 影响空中组是否出 redArmedHelicopterName 对应装备 只要无人机不要武直时置 false

2.3 蓝方类型到红方方案映射(兼容项,评分模式下弱化)

先解释你提到的 “k”

  • 这里的 k 就是 key键名,例如 map_armor_targets
  • vvalue,例如 反坦克火箭,反坦克导弹系统
  • 规则实际含义就是:key 决定“哪类蓝方目标”,value 决定“红方上哪些武器”。

映射键名中文对照:

  • map_air_targets:蓝方是空中目标时,红方使用哪些武器。
  • map_ground_targets:蓝方是地面目标时,红方使用哪些武器。
  • map_armor_targets:蓝方是装甲目标(坦克/装甲车)时,红方使用哪些武器。
  • map_artillery_targets:蓝方是炮类目标时,红方使用哪些武器。
  • map_missile_targets:蓝方有导弹能力时,红方使用哪些武器。

映射规则说明:

  • enableScoringSelection=true 时,本组配置不再主导最终结果,仅作为兼容保留。
  • 当前主决策由“过程驱动评分引擎”完成(类型/距离/命中率/成本综合评分)。

2.4 数量与参数(匹配后给多少、导弹与炮类参数)

参数 作用 影响什么 怎么调整
defaultAirNum 白名单路径下空中映射默认实例数量 每轮 map_air_targets 展开时基数 需要更多同型机时调大
defaultGroundNum 地面/装甲/炮类映射默认数量 非空中组映射展开基数 同上
defaultMissileVehicleNum 导弹发射车映射默认数量 enableMissileVehicleRule=true 时追加数量 导弹车要多台时调大
shellRangeDefault 炮类武器“炮弹”组件射程字符串 limitRedArtilleryToShellOnly 写入的默认 范围米 想压远/压近打击时改数值
missileCountOffset 联动时红方导弹数量相对蓝方的增量 applyMissileLinkage 中目标导弹发数 希望红方导弹明显多于蓝方时调大
missileRangeOffset 联动时红方导弹射程在蓝方基础上的增量 红方空中武器导弹组件首参数(破坏范围米) 需要更远覆盖时调大
blueMissileRangeDefault 蓝方未给导弹射程时的假定值 联动计算 redRangeTarget 的输入 输入不全时兜底,按典型弹种改
minBlueMissileCountForLinkage 联动触发门槛(蓝方导弹总数) 低于则 applyMissileLinkage 直接返回 想更难触发联动时调大(如 2、3

2.5 仅导弹组件匹配(导弹组件数量匹配规则salience 53

规则过程:在红方武器已有 targetId 的前提下,按蓝方对应装备的导弹类组件去对齐红方导弹组件的数量首参数;其它组件不动。

参数 作用 影响什么 怎么调整
enableComponentQuantityMatch 总开关 false 时本规则不改写任何组件 完全手工控组件时关闭
componentDeviceNameMappingCsv 蓝/红导弹组件 deviceName 映射 解决双方组件命名不一致导致对不上 机载导弹->某某导弹 形式,逗号分隔多对
missileComponentNameContains 判定“导弹组件”的关键词 只有 deviceName 含该词的组件参与匹配 若业务用“火箭弹”等命名,可改关键词

输出影响:仅改导弹组件 componentParams[0].numbercomponentParams[0].attDefaultValue(破坏范围等),非导弹组件保持红方原值。

2.6 targetId 自动绑定(仅传统白名单路径)

enableRuleScoring=true(过程驱动)时:装配阶段已在 allocateRedWeaponsForBlueTarget 里把 targetId 设为对应蓝方 equipmentId不会再走下表的五维分配逻辑。下表仅在 enableRuleScoring=falseconfigureRedWeaponsByBlue 末尾调用 bindTargetIdsForRedWeapons 时生效。

参数 作用 影响什么 怎么调整
enableTargetAutoBind 是否执行绑定函数 false 时红方 targetId 保持入参/空 全手工指定目标时关闭
minTargetBindRatio 最低绑定比例下限 绑定数/红武器总数低于该比例时,尝试用 pickAnyBlueId 补足 想“几乎全要有目标”时调高(如 0.9);允许大量空则调低
allowReserveWithoutTarget 是否允许故意留空 true:允许火力冗余;false:尽量全部塞满目标 minTargetBindRatio 配合使用
w_target_type 类型匹配在总分中的权重 越大越强调类型对口 类型错配不可接受时略调高
w_target_dist 距离权重 越大越偏向更近、易打击的蓝目标 强调近战压制时调高
w_target_height 高度差权重 越大越惩罚高度层不匹配 空地混合作战可略调高
w_target_hit 命中率权重 越大高 hitRate 武器越易抢到好目标 强调效费比时调高
w_target_threat 蓝方威胁权重 越大越优先高威胁蓝目标 要“先打高威胁”时调高
maxEffectiveDistance 配对最大有效距离 超过则 isPairFeasible 直接否 只允许远程交火时调大;强制近战调小
maxHeightGap 允许的最大高度差 超过则候选失效 高原/低空混编时适度调大
targetDecayAlpha 边际递减系数 marginal = score / (1 + alpha*k)k 为该蓝目标已分配数;越大越不扎堆 避免多机打同一目标时调大
fallbackToNearestTarget 无可行候选时是否按距离回退 true 时尽量给一个最近蓝 equipmentId 不想硬塞错误目标时改 false 并配合 allowUnassignedRedWeapon
allowUnassignedRedWeapon 仍无可行时是否允许 targetId 为空 true 允许空;false 会再 pickAnyBlueId 硬填 与火力冗余策略一致即可

绑定过程(白名单路径,固定实现):绑定键为蓝方 equipmentId → 逐把红武器在可行集合上算分 → 取边际最高 → 更新已分配计数 → 不足比例再补 → 仍不行则按上表回退或留空。

2.7 过程驱动整数加分参数(核心,enableRuleScoring=true

规则过程(函数 runProcessDrivenSelection):对每个带 equipmentId 的蓝方武器抽一条特征 → 在配置给出的红方武器池里用 scoreRedWeaponByRules整数分 → 去掉低于 minScoreToAssign 的 → 并列最高分全部保留 → 按 computeNeededRedCountFromFeature 得到 needCount,再被 minRedWeaponsPerBlueTargetmaxRedWeaponsPerBlueTargetCap 钳位 → 轮询 topNames 克隆武器并 setTargetId(blueId)

参数 作用 影响什么 怎么调整
enableRuleScoring 是否走过程驱动主路径 true 走本节;false 回退 2.2 白名单 + 2.6 绑定 与旧映射二选一
minScoreToAssign 候选武器最低整数分 低于则该红方武器名不参与本蓝目标的并列候选 想更少种类参与时调大;想多并列时调小
nearDefenseDistanceMeters 蓝方到防区距离“近”的米阈值 score_nearDefense_artillery 联动:近且炮名命中则加分 防区尺度变化时同步改
highThreatLevel 任务威胁等级算“高威胁”的整数阈值 score_highThreat_missile 等联动 想更容易触发“高威胁分支”时调低
highTargetCount 蓝方该目标 number 的“数量高”阈值 score_highCount_artillery 联动 集群目标多时调低
score_type_antiArmor 装甲特征下反坦克类名加分 含“反坦克”的红方名更容易进并列最高 强化反坦时调大
score_nearDefense_artillery 近防区 + 迫榴/迫击炮名加分 近防区时更倾向出炮 强调要炮时调大
score_highThreat_missile 高威胁或空中场景下导弹/防空类加分(实现中与多项条件叠加) 高威胁/空中时防空、导弹类名分更高 防空压制想加重时调大
score_highCount_artillery 蓝方数量高时炮类加分 多目标时更倾向炮 炮火优先时调大
score_hasMissile_airDefence 蓝方有导弹组件时防空/导弹发射车类加分 有导弹威胁时更倾向防空与导弹车 导弹对抗想加重时调大

并列全选机制

  • 对同一蓝方 equipmentId,所有红方候选算分后取 maxScorescore == maxScore 的武器名称都进入 topNames
  • 需要数量大于名称种数时,会在 allocateRedWeaponsForBlueTarget轮询 topNames 重复添加,故同名武器可出现多把。
  • 另:实现里若估算射程覆盖蓝方距离(含安全裕量)还会 +1 分,便于优先能打的装备。

2.8 命中率与动态火力(命中率规则-动态数量与offsetsalience 52

规则过程:在装配之后,对已有红方武器的 number 做增量:优先读 offsetCsvByWeapon 显式 offset否则用命中率与阈值的 gap 阶梯hitRateStep*Offset

参数 作用 影响什么 怎么调整
hitRateCsv 按武器名配置命中率 applyDefaultHitRateIfAbsent 与 gap 计算 调整个体武器假定命中能力
defaultHitRateFallback 未配置且武器无 hitRate gap 计算用的默认 p 整体偏乐观/悲观时改
desiredKillProbability 过程驱动里毁伤置信目标 computeNeededRedCountFromFeaturecomputeRequiredShots 的输入 想“打得更保险”时调高(需求发数可能变多)
offsetCsvByWeapon 最高优先级数量偏移 命中武器名则 忽略 gap 阶梯,直接 base + offset 某武器必须固定加 N 发时配置
hitRateThreshold 命中率门槛 gap = threshold - hitRate,决定进哪一档增量 门槛越高,低命中武器越易吃到正 offset
hitRateGapStep1Max / hitRateGapStep2Max gap 的一、二档上界 分档加 hitRateStep1OffsethitRateStep2Offset 拉宽档位可减少落到高档
hitRateStep1Offset / hitRateStep2Offset 各档对 number 的加量 直接增加 weapon.number 低命中时想多压弹药则调大
minRedWeaponsPerBlueTarget 每蓝目标至少分配红武器数下限 过程驱动里与 needCount 取大 强制“至少 N 把伺候一个目标”
maxRedWeaponsPerBlueTargetCap 每蓝目标分配上限 needCount 取小,防止无限膨胀 控制火力上限
enableDynamicMultiRedPerBlue 配置项(当前实现未读取 预留;改之暂无效果,以 desiredKillProbability + min/max 钳位为准 待代码接入后再用

阶梯优先级(与代码一致)

  1. offsetCsvByWeapon 命中 → 只用显式 offset。
  2. 否则 gap <= 0+0
  3. 0 < gap <= hitRateGapStep1Max+hitRateStep1Offset
  4. hitRateGapStep1Max < gap <= hitRateGapStep2Max+hitRateStep2Offset
  5. gap > hitRateGapStep2Max → 仍按 第二档 offset(避免数量无上限膨胀)。

2.9 阵位规则参数(阵位规则 49→48

规则过程prepareDeploymentPools 用作战区/防区多边形生成候选点网格;applyWeaponDeployment 用蓝方航迹与防区关系得到 部署模式 deployMode(近快/远快/近慢/默认)→ 选锚点 → resolveFormationType(人工阵型 / 自动阵型 / 默认)→ buildFormationOffsets 展开队形 → 写入 weapon.coordinate;地面高度固定、空中可走自动生成高度。

输入依赖blueTask.warZoneLocationblueTask.defZoneLocation(各 4 点经纬);部署模式还依赖 trackPoints(算速度与距防区)。

2.9.1 总开关与点位

参数 作用 影响什么 怎么调整
enablePositionRules 阵位总开关 false 时跳过点位池与赋位 仅要装配不要坐标时关闭
fireUnitSpacingMeters 作战区/防区内网格点间距(米) 点密度:越小点越多、部署越密 地形细粒度要求高调小
airDeployZonePreference 空中锚点优先作战区还是防区 combat/defense 影响 pickAnchorByMode 选取 想飞机靠前压则偏 combat
defensePriorityWeapons 名单内武器优先取防区点 名单武器在无锚点回退时优先 defense 要扼守防区的装备写入

2.9.2 部署模式(与 speedFastThreshold、距离阈值)

参数 作用 影响什么 怎么调整
speedFastThreshold 蓝方平均速度是否算“快” distanceNearDefenseThresholdMetersdistanceFarDefenseThresholdMeters 组合成 near_fast / far_fast / near_slow / default 高速标准提高则更少判成“快”
distanceNearDefenseThresholdMeters 蓝方航迹末端距防区“近”的米阈值 参与部署模式与锚点策略 防区尺度大时略调大
distanceFarDefenseThresholdMeters “远”阈值 同上 与上配合拉开近/远带

2.9.3 高度(地面固定 / 空中可自动)

参数 作用 影响什么 怎么调整
groundDeployHeight 地面武器统一高度 地面编队 moveCoordinateByMeters / 克隆点高度 地表 DEM 约定高度
airDeployHeight 关闭自动或兜底时用 过程驱动关闭自动高度时的固定空高 airHeightFallback 一般同量级
enableAutoAirDeployHeight 空中是否按态势算高 false 时空中全程用 airDeployHeight 想完全手工高时关
airHeightFallback 无航迹且无蓝方武器高度时的基准 resolveBlueBaseHeight 最后兜底 与默认战术层一致即可
airHeightMin / airHeightMax 自动高度钳位 防止算出过矮/过高 任务高度包线
airHeightSpeedThreshold / airHeightAdjustFast 快于阈值则加高度 快目标对应更高拦截层 拦截想更猛则加 AdjustFast
airHeightNearDefenseDistance / airHeightFarDefenseDistance 距防区近/远分界 近用 airHeightAdjustNear(多为负)、远用 airHeightAdjustFar 调整防区内外高度差
airHeightAdjustMain / airHeightAdjustWing 主僚高度差 主机略高、僚机略低 战术队形垂直疏开

2.9.4 阵型类型(人工 / 自动 / 默认)

说明(与部署模式共用阈值)resolveDeployModeByBlueStatespeedFastThresholddistanceNearDefenseThresholdMetersdistanceFarDefenseThresholdMeters 得到 near_fast / far_fast / near_slow / defaultautoSelectFormationType 直接消费该 deployMode 字符串选 formationRule_*。配置里的 formationFastSpeedThresholdformationNearDefenseDistanceformationFarDefenseDistance 当前未参与运算,调整无效;若要与部署模式解耦,需开发在代码中改为读取这三项。

参数 作用 影响什么 怎么调整
formationDefaultType 阵型名兜底 非法或未选时 normalizeFormationType 回退 TRIANGLE 等合法枚举
enableAutoFormationSelect 是否 autoSelectFormationType false 时只用 Task 指定或默认 想完全人工阵型时关
formationHighThreatLevel 威胁≥该值走 formationRule_high_threat 优先于速度距离分支 想更早用“高威胁阵型”则调低
formationLargeGroupCount 大编队阈值 比较 redTask.taskWeapons.size()(红方武器条数) ≥ 阈值则走 formationRule_large_group(不是蓝方数量) 想更早切换“大编队阵型”则调小
formationRule_near_fast 各分支对应阵型名 决策序:高威胁 > 近快/远快/近慢 > 大编队(红方条数)> 空中占比≥0.5 > default 改字符串即改映射
formationRule_air_majority 红方空中占比高时阵型 computeRedAirRatio ≥ 0.5 无人机群战术时调整

2.9.5 间距、主僚距、朝向(自动 + 兜底)

参数 作用 影响什么 怎么调整
formationDefaultSpacingMeters 阵型间距兜底 自动间距失败时用 与最小安全间距匹配
formationSpacingMinMeters / formationSpacingMaxMeters 自动间距上下界 限制 resolveFormationSpacing 输出 地形窄/宽时收放
defenseScaleMinMeters / defenseScaleMaxMeters 防区尺度映射到间距的范围 防区越大间距可越大 与防区实际大小一致
mainWingDistanceDefaultMeters 主僚距兜底 自动主僚距失败时 编队纵向尺度
mainWingDistanceMinMeters / mainWingDistanceMaxMeters 主僚距钳位 限制自动主僚距 避免过近相撞
mainWingDistanceModeFactor_near_fast 部署模式对主僚距的乘子 近快更紧、远快更疏等 战术疏密
formationHeadingDefaultDeg 朝向兜底 无航迹、无 Task 朝向时 默认机头方向

实体覆盖优先级(与代码一致)

  • 阵型类型:Task.formationType(非空)> 自动选阵型 > formationDefaultType
  • 间距:Task.formationSpacingMeters > 防区尺度自动 > formationDefaultSpacingMeters
  • 主僚距:Weapon.wingRelativeDistanceMeters > Task.mainWingDistanceMeters > 自动 > mainWingDistanceDefaultMeters
  • 朝向:Task.formationHeadingDeg > 航迹末段方向 > formationHeadingDefaultDeg

实体字段建议TaskformationTypeformationSpacingMetersmainWingDistanceMetersformationHeadingDegWeaponformationRolewingRelativeDistanceMeterswingRelativeBearingDeg

阵位输入示例仅经纬度4点

{
  "warZoneLocation": [
    { "longitude": 116.3801, "latitude": 39.9001 },
    { "longitude": 116.3901, "latitude": 39.9001 },
    { "longitude": 116.3901, "latitude": 39.9101 },
    { "longitude": 116.3801, "latitude": 39.9101 }
  ],
  "defZoneLocation": [
    { "longitude": 116.3825, "latitude": 39.9025 },
    { "longitude": 116.3875, "latitude": 39.9025 },
    { "longitude": 116.3875, "latitude": 39.9075 },
    { "longitude": 116.3825, "latitude": 39.9075 }
  ]
}

2.10 航迹规则参数(新增)

  • enableTrajectoryRules:航迹规则总开关。
  • strategyModeauto/shortest/flank/interfere
    • auto:智能选择策略。
    • 其他值:强制使用指定策略(若该策略被禁用会自动回退)。
  • enableShortest / enableFlank / enableInterfere:各策略开关。
  • nearDefDistanceMeters:蓝方末端点到防区的“近距离阈值”。
  • farDefDistanceMeters:蓝方末端点到防区的“远距离阈值”。
  • fastSpeedThreshold:蓝方平均速度达到该值视为“高速”。
  • flankOffsetMeters:绕后追击偏移幅度(越大绕后越明显)。
  • interfereOffsetMeters:干扰轨迹基础偏移。
  • interfereZigzagAmplitude:干扰轨迹锯齿振幅(越大摆动越明显)。
  • keepBlueHeight:是否沿用蓝方高度。
  • redTrackHeightOverride:不沿用时红方统一高度。

航迹智能选择逻辑:

  • near + fast -> shortest(最短距离追击)
  • far + fast -> interfere(干扰/诱偏)
  • 其他 -> flank(绕后追击)

不生成保护:

  • 蓝方 trackPoints 为空,或 defZoneLocation 点数不足(<3则不生成红方航迹。

3. 当前规则行为(简版)

  • 装备组件匹配组件参数匹配:已作为 legacy 占位,不承担当前业务决策。
  • 主决策在 红方武器自适应装配规则:调用 configureRedWeaponsByBlue(...),默认走“过程驱动整数加分选武器”。
  • 过程驱动链路:蓝方特征提取 -> 候选整数加分 -> 最高分并列全选 -> 动态分配数量与 targetId。
  • 导弹增强在 导弹联动增强规则:调用 applyMissileLinkage(...),受开关和阈值控制。
  • 全组件数量匹配规则 当前语义已收敛为“仅导弹组件匹配”:只改导弹组件数量与首参数,非导弹不改。
  • 命中率驱动数量在 命中率规则-动态数量与offset:按 hitRateThresholdgap 阶梯增量计算数量;显式 offset 配置优先。
  • 任务命名在 任务自动匹配规则:调用 assignTaskNameByRedWeapons(...),按红方最终武器自动生成任务名和 dataType
  • 炮类约束:命中炮类条件时,炮类武器只保留 炮弹 组件,单位 范围米
  • targetId过程驱动下在装配时直接写入对应蓝方 equipmentId白名单路径下用“可行性 + 五维评分 + 边际递减”分配(见 2.6)。
  • 阵位部署:按“速度距离驱动锚点 + 阵型偏移 + 主僚机相对位移”自动赋位,最终输出经纬高。
  • 射程合理性在 射程合理性校验规则:基于蓝/红武器坐标计算距离,自动避免“射程不足却打击”的不合理情况(可自动调参)。
  • 航迹生成:根据蓝方 trackPoints 生成红方 trackPoints,点数与蓝方一致,支持三套策略和智能选择。

3.1 任务名称自动匹配(任务自动匹配规则salience 50

规则过程:在武器与数量基本落定之后,按 红方最终 taskWeapons 列表 做分类(不看蓝方 drawName 关键字),写入 redTask.drawNameredTask.dataType

分类优先级(先命中先生效)

  1. 导弹突击:含导弹发射车类武器名
  2. 防空压制:防空导弹 / 火力打击无人机 / 武装直升机
  3. 反装甲打击:反坦克火箭 / 反坦克导弹系统
  4. 炮火压制:迫榴炮 / 车载迫击炮
  5. 通用打击:兜底
参数 作用 影响什么 怎么调整
taskName_missile_strike 导弹突击类展示名 drawName 当命中导弹突击分支时 改中文任务标题
taskDataType_missile_strike 导弹突击类业务类型 dataType 同步写入 与前端/报表枚举对齐
taskName_air_defence / taskDataType_air_defence 防空压制类 同上 同上
taskName_anti_armor / taskDataType_anti_armor 反装甲类 同上 同上
taskName_artillery / taskDataType_artillery 炮火类 同上 同上
taskName_general / taskDataType_general 兜底类 无上述特征或冲突回落时使用 默认任务名与类型

效果说明:只改模板字符串即可改展示;若红方武器组合与期望分类不一致,会落到 taskName_general,避免“名不副实”。

4. 快速修改示例(业务常用)

  • 想让规则更“死”:
    • allowMultiGroup 改成 false
  • 想让“坦克只上反坦克火箭,不上导弹系统”:
    • map_armor_targets 改成 反坦克火箭
  • 想让“坦克同时上火箭和导弹系统”:
    • map_armor_targets 改成 反坦克火箭,反坦克导弹系统
  • 想允许更多不命中:
    • 关闭部分开关,例如 enableGroundRule=falseenableArmorRule=false
  • 想让导弹联动更难触发:
    • 提高 minBlueMissileCountForLinkage,例如从 1 调到 3
  • 想提升炮类打击范围:
    • 调大 shellRangeDefault,例如 1500 -> 1800

5. 测试 JSON按你项目常用的 Task 入参格式)

说明:下面 JSON 是 单个 Task 格式,不是 FactTask 包装格式。 如果你的执行入口最终需要 FactTask,则由开发在服务层把“蓝方 Task + 红方 Task”组装后再 insert 规则引擎。

5.1 不命中样例(蓝方 Task

说明:该样例仅用于蓝方任务输入结构校验;若业务把对应映射留空或关闭开关,则允许不命中。

{
  "id": "blue-miss-001",
  "side": "蓝方",
  "dataType": "打击",
  "threatLevel": "2",
  "taskWeapons": [
    {
      "name": "攻击直升机",
      "supportType": "overhead",
      "number": 1,
      "components": []
    }
  ]
}

5.2 命中样例(蓝方 Task

说明:该蓝方输入同时包含空中和装甲特征,且有导弹组件,满足命中与联动测试条件。

{
  "id": "blue-hit-001",
  "side": "蓝方",
  "dataType": "打击",
  "threatLevel": "3",
  "taskWeapons": [
    {
      "name": "攻击直升机",
      "supportType": "overhead",
      "number": 2,
      "components": [
        {
          "deviceName": "机载导弹",
          "componentParams": [
            {
              "attDefaultValue": "260",
              "attExplain": "破坏范围米",
              "number": 2
            }
          ]
        }
      ]
    },
    {
      "name": "主战坦克",
      "supportType": "ground",
      "number": 2,
      "components": []
    }
  ]
}

5.3 红方初始 Task 样例(通常为空列表)

说明:用于和蓝方 Task 组装成规则输入对象。

{
  "id": "red-init-001",
  "side": "红方",
  "dataType": "打击",
  "threatLevel": "1",
  "taskWeapons": []
}

5.4 航迹规则不生成样例(缺防区)

{
  "id": "blue-track-miss-001",
  "side": "蓝方",
  "dataType": "打击",
  "threatLevel": "2",
  "defZoneLocation": [],
  "trackPoints": [
    { "index": 0, "longitude": 116.3801, "latitude": 39.9001, "height": 100, "speed": 210 },
    { "index": 1, "longitude": 116.3810, "latitude": 39.9010, "height": 100, "speed": 220 }
  ],
  "taskWeapons": []
}

5.5 航迹规则命中样例(可生成)

{
  "id": "blue-track-hit-001",
  "side": "蓝方",
  "dataType": "打击",
  "threatLevel": "3",
  "defZoneLocation": [
    { "longitude": 116.4001, "latitude": 39.9201 },
    { "longitude": 116.4051, "latitude": 39.9201 },
    { "longitude": 116.4051, "latitude": 39.9251 },
    { "longitude": 116.4001, "latitude": 39.9251 }
  ],
  "trackPoints": [
    { "index": 0, "longitude": 116.3801, "latitude": 39.9001, "height": 120, "speed": 240 },
    { "index": 1, "longitude": 116.3840, "latitude": 39.9040, "height": 120, "speed": 245 },
    { "index": 2, "longitude": 116.3880, "latitude": 39.9080, "height": 120, "speed": 250 },
    { "index": 3, "longitude": 116.3920, "latitude": 39.9120, "height": 120, "speed": 248 }
  ],
  "taskWeapons": []
}

6. 开发人员说明(放在末尾)

  • 入口约定:业务仅改 buildBusinessConfig(),开发改函数实现时不要破坏该入口。
  • 类型约定:配置读取统一走 readIntCfg(...) / readBooleanCfg(...),避免 Map 强转异常。
  • 策略收敛configureRedWeaponsByBlue(...) 使用 matchedAny + allowMultiGroup 控制“单组命中/多组叠加”。
  • 映射解析:通过 parseMappedWeaponNames(...) 将逗号分隔配置解析为武器列表,非法名称会被 isValidRedWeaponNameByConfig(...) 过滤。
  • 联动门控applyMissileLinkage(...) 必须同时满足:
    • enableMissileLinkage=true
    • 蓝方导弹数量 >= minBlueMissileCountForLinkage
  • 目标绑定bindTargetIdsForRedWeapons(...) 基于蓝方 equipmentId 执行“可行性过滤 + 打分 + 边际收益递减分配 + 回退兜底”。
  • 阵位部署prepareDeploymentPools(...) + applyWeaponDeployment(...) 负责区域解析、点位生成与部署赋位。
  • 航迹生成applyTrajectoryGeneration(...) + chooseTrajectoryStrategy(...) + generateRedTrackPoints(...) 负责红方航迹策略生成。
  • 任务命名assignTaskNameByRedWeapons(...) 仅基于红方最终武器,避免旧版按蓝方 drawName 关键字造成误判。
  • legacy 区域装备组件匹配组件参数匹配 及 legacy 函数区只保留回滚,不建议继续扩展。
  • 新增武器建议:优先补 isAirWeapon/isGroundWeapon/isArmorWeapon/isArtilleryWeapon 分类,再补 ensureBasicRedComponents(...) 模板。