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` 接口
---