docs: 总体架构V9 + DefensePlanner V3 同步当前实现

- 架构文档: IDefenseAdvisor→IDefensePlanner 全量替换,架构图更新
- DefensePlanner: FireUnit模型补全通道/检测字段,数据流改为引擎内部调用
- 旧接口迁移表标记完成,实现状态分已实现/已删除/不变
This commit is contained in:
tian 2026-06-13 12:40:54 +08:00
parent 76d845f91b
commit 4e157834f7
2 changed files with 72 additions and 65 deletions

View File

@ -1,11 +1,11 @@
# 反无人机仿真系统 — 总体架构设计 # 反无人机仿真系统 — 总体架构设计
> **版本**V8 > **版本**V9
> **日期**2026-06-12 > **日期**2026-06-13
> **状态**:已实现 > **状态**:已实现
> **Unity 版本**22.3.62 > **Unity 版本**22.3.62
> **.NET 版本**.NET Standard 2.1 > **.NET 版本**.NET Standard 2.1
> **变更**事件驱动替代 EventQueueFireSchedule 统一发射接口;三阶段扩散模型;默认弹药 JSON 配置Phase/Elapsed 属性 > **变更**DefensePlanner 五步规划引擎FireUnit 通道模型空基平台飞控SQLite domain reload 修复;删除所有 fallback 默认值
--- ---
@ -46,7 +46,7 @@
│ Service Layer (Pure C#) │ │ Service Layer (Pure C#) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ ModelService │ │ScenarioService│ │ SimulationEngine │ │ │ │ ModelService │ │ScenarioService│ │ SimulationEngine │ │
│ │ GroupService │ │ DefenseAdvisor│ │ ├ DroneEntity │ │ │ │ GroupService │ │ DefensePlanner │ │ ├ DroneEntity │ │
│ └──────────────┘ └──────────────┘ │ ├ PlatformEntity │ │ │ └──────────────┘ └──────────────┘ │ ├ PlatformEntity │ │
│ ┌──────────────┐ ┌──────────────┐ │ ├ MunitionEntity │ │ │ ┌──────────────┐ ┌──────────────┐ │ ├ MunitionEntity │ │
│ │FrameDataStore│ │ReportService │ │ ├ CloudEntity │ │ │ │FrameDataStore│ │ReportService │ │ ├ CloudEntity │ │
@ -57,7 +57,7 @@
│ ┌──────────────────────────────────────────────────────┐│ │ ┌──────────────────────────────────────────────────────┐│
│ │ Algorithm Layer (自主实现) ││ │ │ Algorithm Layer (自主实现) ││
│ │ GaussianPuffDispersion | DamageCalculator ││ │ │ GaussianPuffDispersion | DamageCalculator ││
│ │ DefaultDefenseAdvisor | Kinematics(PG稳定度) ││ │ │ DefaultDefensePlanner | Kinematics(PG稳定度) ││
│ └──────────────────────────────────────────────────────┘│ │ └──────────────────────────────────────────────────────┘│
├──────────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────────┤
│ Data Layer │ │ Data Layer │
@ -705,7 +705,7 @@ Unity 渲染毁伤效果(尾焰异常、姿态失控、坠落)
▼ ▼ ▼ ▼ ▼ ▼
ICloudDispersionModel ← 扩散模型接口 ICloudDispersionModel ← 扩散模型接口
IDamageModel ← 毁伤模型接口 IDamageModel ← 毁伤模型接口
IDefenseAdvisor ← 防御推荐接口 IDefensePlanner ← 防御规划接口
┌───────┼───────┐ ┌───────┼───────┐
▼ ▼ ▼ ▼ ▼ ▼
@ -724,7 +724,7 @@ public static class AlgorithmFactory
{ {
{ typeof(ICloudDispersionModel), typeof(GaussianPuffDispersion) }, { typeof(ICloudDispersionModel), typeof(GaussianPuffDispersion) },
{ typeof(IDamageModel), typeof(DamageModelRouter) }, { typeof(IDamageModel), typeof(DamageModelRouter) },
{ typeof(IDefenseAdvisor), typeof(DefaultDefenseAdvisor) }, { typeof(IDefensePlanner), typeof(DefaultDefensePlanner) },
}; };
/// <summary>替换某个算法实现(第三方接入点)</summary> /// <summary>替换某个算法实现(第三方接入点)</summary>
@ -1027,9 +1027,10 @@ static readonly Dictionary<PowerType, AerosolType> MatchTable = new()
#### 6.5.4 接口 #### 6.5.4 接口
```csharp ```csharp
public interface IDefenseAdvisor // === 防御规划 ===
public interface IDefensePlanner
{ {
DefenseRecommendation Recommend(ThreatProfile threat); PlannerResult Plan(List<FireUnit> fireUnits, List<DroneGroup> threats, CombatScene environment);
} }
// ThreatProfile / DefenseRecommendation / DefenseSolution 等模型见本节上文 // ThreatProfile / DefenseRecommendation / DefenseSolution 等模型见本节上文
@ -1100,17 +1101,17 @@ public interface IDefenseAdvisor
组合 A当前 组合 A当前
ICloudDispersionModel → GaussianPuffDispersion自主 ICloudDispersionModel → GaussianPuffDispersion自主
IDamageModel → DamageModelRouter自主 IDamageModel → DamageModelRouter自主
IDefenseAdvisor → DefaultDefenseAdvisor自主 IDefensePlanner → DefaultDefensePlanner自主
组合 B将来可能 组合 B将来可能
ICloudDispersionModel → ThirdPartyPuff第三方 DLL ICloudDispersionModel → ThirdPartyPuff第三方 DLL
IDamageModel → DamageModelRouter自主保留 IDamageModel → DamageModelRouter自主保留
IDefenseAdvisor → DefaultDefenseAdvisor自主保留 IDefensePlanner → DefaultDefensePlanner自主保留
组合 C将来可能 组合 C将来可能
ICloudDispersionModel → ThirdPartyPuff第三方 DLL ICloudDispersionModel → ThirdPartyPuff第三方 DLL
IDamageModel → ThirdPartyDamage第三方 DLL IDamageModel → ThirdPartyDamage第三方 DLL
IDefenseAdvisor → DefaultDefenseAdvisor自主保留 IDefensePlanner → DefaultDefensePlanner自主保留
``` ```
--- ---
@ -1466,7 +1467,7 @@ void SaveRoute(string taskId, string groupId, RoutePlan route, List<Waypoint> wp
| 8 | 拦截机制 | 多阶段链路 | 探测→火控→发射→弹药飞行→云团→毁伤 | | 8 | 拦截机制 | 多阶段链路 | 探测→火控→发射→弹药飞行→云团→毁伤 |
| 9 | 云团扩散模型 | **高斯烟团模型(自主实现)** | 简化球体膨胀 + 风速漂移 + 密度衰减,适合实时 20Hz | | 9 | 云团扩散模型 | **高斯烟团模型(自主实现)** | 简化球体膨胀 + 风速漂移 + 密度衰减,适合实时 20Hz |
| 10 | 毁伤模型 | **三种机制自主实现** | 吸入式灭火(阈值型)、爆燃式(触发型)、吸入式爆炸(指数累积型) | | 10 | 毁伤模型 | **三种机制自主实现** | 吸入式灭火(阈值型)、爆燃式(触发型)、吸入式爆炸(指数累积型) |
| 11 | 防御方案推荐 | **IDefenseAdvisor自主实现** | 规则匹配选型 + 时空交汇优化 + 反推平台部署 | | 11 | 防御方案推荐 | **IDefensePlanner自主实现** | 五步规划:威胁排序 → 弹药匹配 → 候选生成 → 贪心分配 → 时序生成 |
| 12 | 第三方数据 | **静态配置JSON → SQLite** | 仅提供弹药基础参数和初始扩散状态,不提供运行时算法 | | 12 | 第三方数据 | **静态配置JSON → SQLite** | 仅提供弹药基础参数和初始扩散状态,不提供运行时算法 |
| 13 | 运动学 | 简化运动学 + 风偏 | 航路点线性插值 + 风速矢量 | | 13 | 运动学 | 简化运动学 + 风偏 | 航路点线性插值 + 风速矢量 |
| 14 | 弹药弹道 | 抛物线(地基)/ 自由落体(空基) | 基于初速、角度、释放高度计算 | | 14 | 弹药弹道 | 抛物线(地基)/ 自由落体(空基) | 基于初速、角度、释放高度计算 |

View File

@ -1,8 +1,8 @@
# DefensePlanner 防御规划引擎 — 技术方案 # DefensePlanner 防御规划引擎 — 技术方案
- **版本**V2 - **版本**V3
- **日期**2026-06-12 - **日期**2026-06-13
- **状态**:已定稿 - **状态**:已实现
--- ---
@ -32,18 +32,28 @@ class FireUnit {
string Id; // 唯一标识 string Id; // 唯一标识
PlatformType Type; // AirBased / GroundBased PlatformType Type; // AirBased / GroundBased
Vector3 Position; // 待命坐标(空基含巡航高度) Vector3 Position; // 待命坐标(空基含巡航高度)
float CruiseSpeed; // 空基巡航速度 m/s地基 = 0 // ── 发射装置 ──
float ReleaseAltitude; // 空基投放高度 m int GunCount; // 火炮数量(默认 1
float MuzzleVelocity; // 地基初速 m/s int ChannelsPerGun; // 每炮火力通道数(默认 1
int TotalMunitions; // 总载弹量(一次部署的总弹药数) int TotalChannels => GunCount * ChannelsPerGun;
List<AerosolType> AmmoTypes; // 可装填的弹药类型(支持多弹种) float ChannelInterval; // 同通道连发最小间隔 s
float Cooldown; // 同弹种连发间隔 s // ── 弹药 ──
float AmmoChangeTime; // 更换弹种所需时间 s int TotalMunitions; // 总载弹量
List<AerosolType> 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威胁编队 ### 2.2 DroneGroup威胁编队
```csharp ```csharp
@ -277,69 +287,65 @@ public class DefaultDefensePlanner : IDefensePlanner
} }
``` ```
### 6.3 现有接口迁移 ### 6.3 接口迁移(已完成)
| 旧接口 | 新接口 | 状态 | | 旧接口 | 新接口 | 状态 |
|--------|--------|------| |--------|--------|------|
| `IDefenseAdvisor.Recommend(ThreatProfile)` | `IDefensePlanner.Plan(fireUnits, threats, env)` | 替换 | | `IDefenseAdvisor.Recommend(ThreatProfile)` | `IDefensePlanner.Plan(fireUnits, threats, env)` | ✅ 已替换 |
| `IDefenseAdvisor.GetDefenseRecommendation(taskId)` | ScenarioService 调用 Planner | 保持 | | `IDefenseAdvisor.GetDefenseRecommendation(taskId)` | 不再需要 | ✅ 已删除 |
| `DefaultDefenseAdvisor.RecommendMultiGroup()` | Planner 原生支持多编队 | 删除 | | `DefaultDefenseAdvisor.RecommendMultiGroup()` | Planner 原生支持多编队 | ✅ 已删除 |
--- ---
## 7. 数据流改造 ## 7. 数据流改造(已实现)
``` ```
ScenarioService.GetTaskDetail(taskId) SimulationEngine.Initialize(taskId)
│ // 组装输入 │ // 引擎内部组装
├── 收集 EquipmentDeployment → List<FireUnit> ├── BuildFireUnits(config) → List<FireUnit>
├── 收集 TargetConfig + RoutePlan + Waypoint → List<DroneGroup> ├── BuildDroneGroups(config) → List<DroneGroup>
└── CombatScene └── _scene (CombatScene)
IDefensePlanner.Plan(fireUnits, threats, env) IDefensePlanner.Plan(fireUnits, threats, scene)
PlannerResult PlannerResult.Best.MergedSchedule
├── DefensePlan.Best
│ ├── Assignments → 写入 EquipmentDeployment更新 PlatformType/AerosolType/MunitionCount 等)
│ └── MergedSchedule → 传给 SimulationEngine.SetFireSchedule() 引擎 Tick() 按发射计划执行
└── DefensePlan.Critical
└── Assignments → 存入 CloudDispersal 的 Critical* 字段
``` ```
> 引擎是 Planner 的唯一调用者。测试和 UI 代码不再直接接触 Planner。
--- ---
## 8. 与现有代码的关系 ## 8. 实现状态
### 保留 ### ✅ 已实现
- `Kinematics` 弹道/运动学工具类(被 Step 3/5 调用) - `IDefensePlanner` + `DefaultDefensePlanner`(五步流水线)
- `GaussianPuffDispersion` 扩散模型(被 Step 3 调用计算覆盖率) - `FireUnit` 通道模型GunCount/ChannelsPerGun/ChannelInterval/搜索跟踪设备)
- `DamageModelRouter` 毁伤模型(不影响规划) - 贪心分配 + 物理间隔错发 + 按目标点独立计时
- `FireEvent` / `FireSchedule`Step 5 输出) - 空基/地基弹道统一处理
- `AmmunitionSpec` 弹药参数(弹药匹配和覆盖率计算) - `SimulationEngine` 内部调用 Planner 自动生成发射计划
- `DefaultFireUnits` 4 种模板
- 报告显示 per-unit 发射数和火力单元列
- 所有硬编码默认值和静默 fallback 已删除
### 修改 ### ❌ 已删除
- `DefaultDefenseAdvisor` → 改名为 `DefaultDefensePlanner`,实现 `IDefensePlanner` - `IDefenseAdvisor` / `DefaultDefenseAdvisor` / `RecommendMultiGroup`
- `AlgorithmTypes.FireUnit` → 扩展字段Type, CruiseSpeed, ReleaseAltitude, MuzzleVelocity, TotalMunitions - `ThreatProfile` / `DefenseSolution` / `DefenseRecommendation` / `MultiGroupRecommendation`AlgorithmTypes 中保留但未使用
- `AlgorithmTypes.ThreatProfile` → 简化或废弃,输入直接使用 `DroneGroup` 列表 - `Models.SimEvent`(死代码)
- `AlgorithmTypes.DefenseRecommendation` → 替换为 `PlannerResult` - 所有 `?.` + 任意默认值模式
### 删除 ### 🔒 不变
- `AlgorithmTypes.DroneGroup.GetArrivalTime()` → 移入规划器 - `Kinematics` / `GaussianPuffDispersion` / `DamageModelRouter`
- `AlgorithmTypes.DefenseSolution` → 替换为 `DefensePlan` - 所有 Repository 和数据模型EquipmentDeployment 新增 GunCount/ChannelsPerGun/ChannelInterval
- `IDefenseAdvisor` → 替换为 `IDefensePlanner` - `ScenarioService` 接口
- `AlgorithmFactory``IDefenseAdvisor` 注册 → 改为 `IDefensePlanner`
### 不变
- `SimulationEngine` — 不感知 Planner只接收 `FireSchedule`
- `ScenarioService` — 接口不变,内部调用 Planner
- 所有 Repository、数据模型EquipmentDeployment 等)— 不需要改
--- ---