docs: 总体架构V9 + DefensePlanner V3 同步当前实现
- 架构文档: IDefenseAdvisor→IDefensePlanner 全量替换,架构图更新 - DefensePlanner: FireUnit模型补全通道/检测字段,数据流改为引擎内部调用 - 旧接口迁移表标记完成,实现状态分已实现/已删除/不变
This commit is contained in:
parent
76d845f91b
commit
4e157834f7
@ -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) },
|
||||
};
|
||||
|
||||
/// <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 | 弹药弹道 | 抛物线(地基)/ 自由落体(空基) | 基于初速、角度、释放高度计算 |
|
||||
|
||||
@ -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` 接口
|
||||
|
||||
---
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user