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
> **日期**2026-06-12
> **版本**V9
> **日期**2026-06-13
> **状态**:已实现
> **Unity 版本**22.3.62
> **.NET 版本**.NET Standard 2.1
> **变更**事件驱动替代 EventQueueFireSchedule 统一发射接口;三阶段扩散模型;默认弹药 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) },
};
/// <summary>替换某个算法实现(第三方接入点)</summary>
@ -1027,9 +1027,10 @@ static readonly Dictionary<PowerType, AerosolType> MatchTable = new()
#### 6.5.4 接口
```csharp
public interface IDefenseAdvisor
// === 防御规划 ===
public interface IDefensePlanner
{
DefenseRecommendation Recommend(ThreatProfile threat);
PlannerResult Plan(List<FireUnit> fireUnits, List<DroneGroup> 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<Waypoint> wp
| 8 | 拦截机制 | 多阶段链路 | 探测→火控→发射→弹药飞行→云团→毁伤 |
| 9 | 云团扩散模型 | **高斯烟团模型(自主实现)** | 简化球体膨胀 + 风速漂移 + 密度衰减,适合实时 20Hz |
| 10 | 毁伤模型 | **三种机制自主实现** | 吸入式灭火(阈值型)、爆燃式(触发型)、吸入式爆炸(指数累积型) |
| 11 | 防御方案推荐 | **IDefenseAdvisor自主实现** | 规则匹配选型 + 时空交汇优化 + 反推平台部署 |
| 11 | 防御方案推荐 | **IDefensePlanner自主实现** | 五步规划:威胁排序 → 弹药匹配 → 候选生成 → 贪心分配 → 时序生成 |
| 12 | 第三方数据 | **静态配置JSON → SQLite** | 仅提供弹药基础参数和初始扩散状态,不提供运行时算法 |
| 13 | 运动学 | 简化运动学 + 风偏 | 航路点线性插值 + 风速矢量 |
| 14 | 弹药弹道 | 抛物线(地基)/ 自由落体(空基) | 基于初速、角度、释放高度计算 |

View File

@ -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<AerosolType> AmmoTypes; // 可装填的弹药类型(支持多弹种)
float Cooldown; // 同弹种连发间隔 s
float AmmoChangeTime; // 更换弹种所需时间 s
// ── 发射装置 ──
int GunCount; // 火炮数量(默认 1
int ChannelsPerGun; // 每炮火力通道数(默认 1
int TotalChannels => GunCount * ChannelsPerGun;
float ChannelInterval; // 同通道连发最小间隔 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威胁编队
```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<FireUnit>
├── 收集 TargetConfig + RoutePlan + Waypoint → List<DroneGroup>
└── CombatScene
│ // 引擎内部组装
├── BuildFireUnits(config) → List<FireUnit>
├── BuildDroneGroups(config) → List<DroneGroup>
└── _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` 接口
---