diff --git a/docs/design/architecture/总体架构设计.md b/docs/design/architecture/总体架构设计.md index 954862c..36acee6 100644 --- a/docs/design/architecture/总体架构设计.md +++ b/docs/design/architecture/总体架构设计.md @@ -1,11 +1,11 @@ # 反无人机仿真系统 — 总体架构设计 -> **版本**:V8 -> **日期**:2026-06-12 +> **版本**:V9 +> **日期**:2026-06-13 > **状态**:已实现 > **Unity 版本**:22.3.62 > **.NET 版本**:.NET Standard 2.1 -> **变更**:事件驱动替代 EventQueue;FireSchedule 统一发射接口;三阶段扩散模型;默认弹药 JSON 配置;Phase/Elapsed 属性 +> **变更**:DefensePlanner 五步规划引擎;FireUnit 通道模型;空基平台飞控;SQLite domain reload 修复;删除所有 fallback 默认值 --- @@ -46,7 +46,7 @@ │ Service Layer (Pure C#) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ │ ModelService │ │ScenarioService│ │ SimulationEngine │ │ -│ │ GroupService │ │ DefenseAdvisor│ │ ├ DroneEntity │ │ +│ │ GroupService │ │ DefensePlanner │ │ ├ DroneEntity │ │ │ └──────────────┘ └──────────────┘ │ ├ PlatformEntity │ │ │ ┌──────────────┐ ┌──────────────┐ │ ├ MunitionEntity │ │ │ │FrameDataStore│ │ReportService │ │ ├ CloudEntity │ │ @@ -57,7 +57,7 @@ │ ┌──────────────────────────────────────────────────────┐│ │ │ Algorithm Layer (自主实现) ││ │ │ GaussianPuffDispersion | DamageCalculator ││ -│ │ DefaultDefenseAdvisor | Kinematics(PG稳定度) ││ +│ │ DefaultDefensePlanner | Kinematics(PG稳定度) ││ │ └──────────────────────────────────────────────────────┘│ ├──────────────────────────────────────────────────────────┤ │ Data Layer │ @@ -705,7 +705,7 @@ Unity 渲染毁伤效果(尾焰异常、姿态失控、坠落) ▼ ▼ ▼ ICloudDispersionModel ← 扩散模型接口 IDamageModel ← 毁伤模型接口 - IDefenseAdvisor ← 防御推荐接口 + IDefensePlanner ← 防御规划接口 │ ┌───────┼───────┐ ▼ ▼ ▼ @@ -724,7 +724,7 @@ public static class AlgorithmFactory { { typeof(ICloudDispersionModel), typeof(GaussianPuffDispersion) }, { typeof(IDamageModel), typeof(DamageModelRouter) }, - { typeof(IDefenseAdvisor), typeof(DefaultDefenseAdvisor) }, + { typeof(IDefensePlanner), typeof(DefaultDefensePlanner) }, }; /// 替换某个算法实现(第三方接入点) @@ -1027,9 +1027,10 @@ static readonly Dictionary MatchTable = new() #### 6.5.4 接口 ```csharp -public interface IDefenseAdvisor +// === 防御规划 === +public interface IDefensePlanner { - DefenseRecommendation Recommend(ThreatProfile threat); + PlannerResult Plan(List fireUnits, List threats, CombatScene environment); } // ThreatProfile / DefenseRecommendation / DefenseSolution 等模型见本节上文 @@ -1100,17 +1101,17 @@ public interface IDefenseAdvisor 组合 A(当前): ICloudDispersionModel → GaussianPuffDispersion(自主) IDamageModel → DamageModelRouter(自主) - IDefenseAdvisor → DefaultDefenseAdvisor(自主) + IDefensePlanner → DefaultDefensePlanner(自主) 组合 B(将来可能): ICloudDispersionModel → ThirdPartyPuff(第三方 DLL) IDamageModel → DamageModelRouter(自主保留) - IDefenseAdvisor → DefaultDefenseAdvisor(自主保留) + IDefensePlanner → DefaultDefensePlanner(自主保留) 组合 C(将来可能): ICloudDispersionModel → ThirdPartyPuff(第三方 DLL) IDamageModel → ThirdPartyDamage(第三方 DLL) - IDefenseAdvisor → DefaultDefenseAdvisor(自主保留) + IDefensePlanner → DefaultDefensePlanner(自主保留) ``` --- @@ -1466,7 +1467,7 @@ void SaveRoute(string taskId, string groupId, RoutePlan route, List wp | 8 | 拦截机制 | 多阶段链路 | 探测→火控→发射→弹药飞行→云团→毁伤 | | 9 | 云团扩散模型 | **高斯烟团模型(自主实现)** | 简化球体膨胀 + 风速漂移 + 密度衰减,适合实时 20Hz | | 10 | 毁伤模型 | **三种机制自主实现** | 吸入式灭火(阈值型)、爆燃式(触发型)、吸入式爆炸(指数累积型) | -| 11 | 防御方案推荐 | **IDefenseAdvisor(自主实现)** | 规则匹配选型 + 时空交汇优化 + 反推平台部署 | +| 11 | 防御方案推荐 | **IDefensePlanner(自主实现)** | 五步规划:威胁排序 → 弹药匹配 → 候选生成 → 贪心分配 → 时序生成 | | 12 | 第三方数据 | **静态配置(JSON → SQLite)** | 仅提供弹药基础参数和初始扩散状态,不提供运行时算法 | | 13 | 运动学 | 简化运动学 + 风偏 | 航路点线性插值 + 风速矢量 | | 14 | 弹药弹道 | 抛物线(地基)/ 自由落体(空基) | 基于初速、角度、释放高度计算 | diff --git a/docs/design/technical/DefensePlanner-技术方案.md b/docs/design/technical/DefensePlanner-技术方案.md index c4e643f..2c8390c 100644 --- a/docs/design/technical/DefensePlanner-技术方案.md +++ b/docs/design/technical/DefensePlanner-技术方案.md @@ -1,8 +1,8 @@ # DefensePlanner 防御规划引擎 — 技术方案 -- **版本**:V2 -- **日期**:2026-06-12 -- **状态**:已定稿 +- **版本**:V3 +- **日期**:2026-06-13 +- **状态**:已实现 --- @@ -32,18 +32,28 @@ class FireUnit { string Id; // 唯一标识 PlatformType Type; // AirBased / GroundBased Vector3 Position; // 待命坐标(空基含巡航高度) - float CruiseSpeed; // 空基巡航速度 m/s;地基 = 0 - float ReleaseAltitude; // 空基投放高度 m - float MuzzleVelocity; // 地基初速 m/s - int TotalMunitions; // 总载弹量(一次部署的总弹药数) - List AmmoTypes; // 可装填的弹药类型(支持多弹种) - float Cooldown; // 同弹种连发间隔 s - float AmmoChangeTime; // 更换弹种所需时间 s + // ── 发射装置 ── + int GunCount; // 火炮数量(默认 1) + int ChannelsPerGun; // 每炮火力通道数(默认 1) + int TotalChannels => GunCount * ChannelsPerGun; + float ChannelInterval; // 同通道连发最小间隔 s + // ── 弹药 ── + int TotalMunitions; // 总载弹量 + List AmmoTypes; // 可装填的弹药类型 + float Cooldown; // 通道冷却时间 s + float AmmoChangeTime; // 更换弹种时间 s + // ── 搜索跟踪 ── + float RadarRange; // 雷达探测距离 m + float EORange; // 光电探测距离 m + float IRRange; // 红外探测距离 m + // ── 空基 ── + float CruiseSpeed; // 巡航速度 m/s + float ReleaseAltitude; // 投放高度 m + // ── 地基 ── + float MuzzleVelocity; // 初速 m/s } ``` -> 与当前 `FireUnit`(`AlgorithmTypes.cs`)的区别:新增 `Type`、`CruiseSpeed`、`ReleaseAltitude`、`MuzzleVelocity`、`TotalMunitions`、`AmmoTypes`(重命名自 `AvailableAmmo`)。 - ### 2.2 DroneGroup(威胁编队) ```csharp @@ -277,69 +287,65 @@ public class DefaultDefensePlanner : IDefensePlanner } ``` -### 6.3 现有接口迁移 +### 6.3 接口迁移(已完成) | 旧接口 | 新接口 | 状态 | |--------|--------|------| -| `IDefenseAdvisor.Recommend(ThreatProfile)` | `IDefensePlanner.Plan(fireUnits, threats, env)` | 替换 | -| `IDefenseAdvisor.GetDefenseRecommendation(taskId)` | ScenarioService 调用 Planner | 保持 | -| `DefaultDefenseAdvisor.RecommendMultiGroup()` | Planner 原生支持多编队 | 删除 | +| `IDefenseAdvisor.Recommend(ThreatProfile)` | `IDefensePlanner.Plan(fireUnits, threats, env)` | ✅ 已替换 | +| `IDefenseAdvisor.GetDefenseRecommendation(taskId)` | 不再需要 | ✅ 已删除 | +| `DefaultDefenseAdvisor.RecommendMultiGroup()` | Planner 原生支持多编队 | ✅ 已删除 | --- -## 7. 数据流改造 +## 7. 数据流改造(已实现) ``` -ScenarioService.GetTaskDetail(taskId) +SimulationEngine.Initialize(taskId) │ - │ // 组装输入 - ├── 收集 EquipmentDeployment → List - ├── 收集 TargetConfig + RoutePlan + Waypoint → List - └── CombatScene + │ // 引擎内部组装 + ├── BuildFireUnits(config) → List + ├── BuildDroneGroups(config) → List + └── _scene (CombatScene) │ ▼ -IDefensePlanner.Plan(fireUnits, threats, env) +IDefensePlanner.Plan(fireUnits, threats, scene) │ ▼ -PlannerResult - ├── DefensePlan.Best - │ ├── Assignments → 写入 EquipmentDeployment(更新 PlatformType/AerosolType/MunitionCount 等) - │ └── MergedSchedule → 传给 SimulationEngine.SetFireSchedule() - └── DefensePlan.Critical - └── Assignments → 存入 CloudDispersal 的 Critical* 字段 +PlannerResult.Best.MergedSchedule + │ + ▼ +引擎 Tick() 按发射计划执行 ``` +> 引擎是 Planner 的唯一调用者。测试和 UI 代码不再直接接触 Planner。 + --- -## 8. 与现有代码的关系 +## 8. 实现状态 -### 保留 +### ✅ 已实现 -- `Kinematics` 弹道/运动学工具类(被 Step 3/5 调用) -- `GaussianPuffDispersion` 扩散模型(被 Step 3 调用计算覆盖率) -- `DamageModelRouter` 毁伤模型(不影响规划) -- `FireEvent` / `FireSchedule`(Step 5 输出) -- `AmmunitionSpec` 弹药参数(弹药匹配和覆盖率计算) +- `IDefensePlanner` + `DefaultDefensePlanner`(五步流水线) +- `FireUnit` 通道模型(GunCount/ChannelsPerGun/ChannelInterval/搜索跟踪设备) +- 贪心分配 + 物理间隔错发 + 按目标点独立计时 +- 空基/地基弹道统一处理 +- `SimulationEngine` 内部调用 Planner 自动生成发射计划 +- `DefaultFireUnits` 4 种模板 +- 报告显示 per-unit 发射数和火力单元列 +- 所有硬编码默认值和静默 fallback 已删除 -### 修改 +### ❌ 已删除 -- `DefaultDefenseAdvisor` → 改名为 `DefaultDefensePlanner`,实现 `IDefensePlanner` -- `AlgorithmTypes.FireUnit` → 扩展字段(Type, CruiseSpeed, ReleaseAltitude, MuzzleVelocity, TotalMunitions) -- `AlgorithmTypes.ThreatProfile` → 简化或废弃,输入直接使用 `DroneGroup` 列表 -- `AlgorithmTypes.DefenseRecommendation` → 替换为 `PlannerResult` +- `IDefenseAdvisor` / `DefaultDefenseAdvisor` / `RecommendMultiGroup` +- `ThreatProfile` / `DefenseSolution` / `DefenseRecommendation` / `MultiGroupRecommendation`(AlgorithmTypes 中保留但未使用) +- `Models.SimEvent`(死代码) +- 所有 `?.` + 任意默认值模式 -### 删除 +### 🔒 不变 -- `AlgorithmTypes.DroneGroup.GetArrivalTime()` → 移入规划器 -- `AlgorithmTypes.DefenseSolution` → 替换为 `DefensePlan` -- `IDefenseAdvisor` → 替换为 `IDefensePlanner` -- `AlgorithmFactory` 中 `IDefenseAdvisor` 注册 → 改为 `IDefensePlanner` - -### 不变 - -- `SimulationEngine` — 不感知 Planner,只接收 `FireSchedule` -- `ScenarioService` — 接口不变,内部调用 Planner -- 所有 Repository、数据模型(EquipmentDeployment 等)— 不需要改 +- `Kinematics` / `GaussianPuffDispersion` / `DamageModelRouter` +- 所有 Repository 和数据模型(EquipmentDeployment 新增 GunCount/ChannelsPerGun/ChannelInterval) +- `ScenarioService` 接口 ---