17 KiB
17 KiB
Changelog
[0.9.0] - 2026-06-17
Breaking — 运动学前向计算 + 基础数据 CRUD
- Kinematics 前向计算:新增
ComputeParabolicRange(v₀, θ, Δy)和ParabolicApex(v₀, θ),正问题直接由角度算射程和时间 - Math.Max 回退全部移除:
CalculateLaunchAngle/ParabolicShellTime/ParabolicTimeOfFlight不再静默钳位或 45° 回退,非法输入直接抛异常 - GaussianPuffDispersion / CloudExpansionModel / DetectionCalculator:BurstChargeKg≤0 抛异常,不再用
Math.Max(0.01, ...)掩护;Phase3x≤0显式跳过
Changed — 空基固定阵位发射
- 空基不再「飞向投放点」:改为固定阵位水平发射(θ=0°),
ComputeParabolicRange前向计算飞行时间 - DefensePlanner 空基:
ComputeHorizontal使用platform.PosY(非ReleaseAltitude);云团位置 = 炮弹实际到达位置 - MunitionEntity 下落修正:
_arrivesDescending区分上升/下落到达;Math.Max(0.01, ...)除零回退移除 - 死代码删除:
CommandFlyTo/FlyingToTarget/ReadyToRelease状态 + SimulationEngine "1b. 到达投放点" 块
Added — 实体属性全面暴露
- EntitySnapshot +VelX/Y/Z:所有实体帧快照带瞬时速度
- 引擎 Platforms 列表公开:
SimulationEngine.Platforms - CloudEntity:Pos/Radius/Density/Phase/Elapsed 便捷属性(不再穿透 Dispersion)
- MunitionEntity:LaunchAngle/Azimuth/MuzzleVelocity/FlightDuration/Start/LaunchTime/ElapsedTime/Velocity 全部 public
- DroneEntity:TraveledArc/TotalArc/Progress
- PlatformEntity:Target/FlightDistance/FlownDistance
- DetectionEntity:PosX/Y/Z
Added — 基础数据 CRUD(DataService)
- 7 类规格入库:FireUnitSpec / DroneSpec / SensorSpec / EnvironmentSpec / FormationTemplate / RouteTemplate / AmmunitionSpec
- 类名规范化:TargetPreset→DroneSpec, DetectionPreset→SensorSpec, WeatherPreset→EnvironmentSpec, FireUnitTemplate→FireUnitSpec, RoutePreset→RouteTemplate
- IDataService + DataService:全 CRUD(GetAll/Save/Delete)
- Unity Manager 接入:ScenarioManager.DataService + SimulationRunner.DataService
Added — FrameDataStore LiveFrames 内存回放
- Flush 后保留 LiveFrames 副本:仿真刚结束可内存回放,零磁盘 IO
- ReplayController 双路径:
LoadReplay(taskId, frameStore)优先内存,回退 SQLite - LiveFrames 生命周期:BeginRecording/Discard 清除
Changed — 3机空基编队测试启用
Seed3DronesAirBased参数对齐单机(风速/航速),平台沿 X 轴间隔 300mScenario_3DronesAirBased_AllDestroyed移除 Skip,全部通过Scenario_DetectionDriven_PlanningDelayedByDetectionBoundary移除 Skip
Metrics
- 测试 243(+12),跳过 0,全量通过 11s
[0.8.0] - 2026-06-16
Added — 探测实时链路(Phase 10)
- 3D 球冠探测:
DetectionCalculator.IsInCoverage(水平距离 + 俯仰角 + 高度门限),planner 与运行时共用 - EarliestDetection 采样法:线段-圆求交改为沿航路采样(步长≤50m)调
IsInCoverage - DetectionEntity:运行时探测实体 + per-drone 状态机(Undetected ⇄ Detected),Tick 第5步扫描
- 实时探测事件:
OnTargetDetected/SimEventType.TargetDetected/PlanningFailed - EquipmentDeployment + DetectionSource:+4 个 3D 球冠字段(MinElevation/MaxElevation/MinDetectAlt/MaxDetectAlt)
- 默认数据全部加入 3D 球冠参数(地基 -5°~85°、空基 -80°~30°)
Added — Planner 诊断 + 拦截点计算
- InterceptCalculator:抛物线与直线联立方程求解拦截点(地基可变角度 + 空基固定水平 θ=0°)
- HasInterceptWindow:拦截窗口可行性检查(从探测边界算有效飞行时间)
- TryGenerateFireEvents:每个
return events带拒绝原因 - Planner Summary:含失败原因 + 建议值(探测范围/弧长/反应时间)
- PlannerConfig:+
ReactionTime(5s)/ExpansionFactor(0.9)/TimingSafetyMargin(1s)
Changed — 消除硬编码
- 速度从 waypoint.Speed 读取:
DroneEntity.CruiseSpeed/GetDroneSpeedKph不再用TargetConfig.TypicalSpeed AmmunitionSpec+Phase2Duration(30s):CloudExpansionModel不再写死30fGetArrivalTime基于 DetectArc:从探测点到中点算到达时间(而非航路起点)- TestData 改为从 seeded 数据库读取(不再内嵌 JSON 重复 defaults.json)
Changed — 默认想定参数
- 巡航导弹速度 300→200 km/h
- 空基航路 10km→20km,平台位置 1500→6000,巡航速度 55→80 m/s
- 地基火力单元放航路终点,探测范围按 80% 规则
Metrics
- 测试 204 → 231(+27),全量通过 7s
[0.7.0] - 2026-06-15
Breaking — 概念升级:编组拆分 + Group 表移除
- Group 表移除:原
Group表(DroneFleet / EquipmentGroup)不再创建。向后兼容保留旧库中的 Group 表,但不再主动读写 - GroupType 枚举删除:不再区分 DroneFleet / EquipmentGroup
- GroupService / IGroupService / GroupRepository 删除:不再需要编组管理服务
- Unity GroupManager 删除:不再需要编组管理桥接
Changed — 数据模型重命名
GroupId→WaveId:TargetConfig、EquipmentDeployment、RoutePlan、Waypoint 四表的编组外键重命名为批次外键- RoutePlan 索引重命名:
(TaskId, GroupId)→(TaskId, WaveId) - RoutePlanRepository / WaypointRepository:
GetByTaskAndGroup→GetByTaskAndWave - IScenarioService.SaveRoute:
groupId参数 →waveId
Changed — 算法类型重命名
DroneGroup→DroneWave:AlgorithmTypes、IDefensePlanner、DefensePlanner、SimulationEngine 全部使用新类型名DroneGroupId→DroneWaveId:UnitAssignment 中的编队引用 → 批次引用BuildDroneGroups()→BuildDroneWaves():SimulationEngine 构建方法重命名
Changed — 文档同步
- 总体架构设计:编组概念升级说明
- DefensePlanner 技术方案:DroneGroup → DroneWave
- 实施计划:GroupService 移除、多编队 → 多批次
- Unity 前端对接文档:DefaultDefenseAdvisor → DefensePlanner,SaveRoute 签名更新
- 仿真器实体事件映射:BuildDroneGroups → BuildDroneWaves
Removed
- 7 个文件:Group.cs / GroupRepository.cs / IGroupService.cs / GroupService.cs / GroupManager.cs / GroupServiceTests.cs / GroupRepositoryTests.cs
Metrics
- 测试 208 → 204(−4,删除 Group 相关测试),全量通过 63s
- 0 编译错误,0 编译警告
[0.6.0] - 2026-06-15
Added — 探测驱动的规划(8.1.1)
- DetectionCalculator 静态工具类:探测能力评估的唯一实现(与 Kinematics/RouteGeometry 同范式)。光电受 Visibility 衰减(
有效=基准×min(1,Visibility/基准)),雷达/红外不受影响;统一信息网络找最早探测点(线段-圆求交) - 探测源模型(DetectionSource):独立探测设备 + 火力单元自带探测统一表达(雷达/光电/红外三距离 + 精度)
- EquipmentDeployment 扩展:删单一
DetectionRadius,加RadarRange/EORange/IRange/DetectionAccuracy四字段 - FireUnit 探测字段激活:BuildFireUnits 从 EquipmentDeployment 读取并赋值(原为死代码)
- planner 接口扩展:
IDefensePlanner.Plan加第 4 参数detectionSources - PlannerConfig 加 DefaultDetectionAccuracy(无探测时回退精度)
- 单元测试:DetectionCalculator 13 项、探测驱动规划 2 项
Changed — planner 基于探测信息规划
- planner 假设威胁从探测边界被发现,到达时间 = (拦截弧长 − 探测弧长)/速度,而非上帝视角的航路起点
- SimulationEngine.Initialize 构建
List<DetectionSource>(独立探测 + 火力单元自带),传入 planner - 报告探测设备表用新字段(雷达/光电/红外/精度)
Fixed
- Solve 健壮性:GenerateFireEventsAt 返回空时(探测边界太靠后来不及拦截)不再 IndexOutOfRange
Metrics
- 测试 193 → 208(+15),全量通过 64s
- 0 编译警告
[0.5.0] - 2026-06-14
Added — 物理模型统一架构
- RouteGeometry 静态工具类:航路几何唯一实现(总弧长/弧长→位置/点→最近弧长/切向量/到达时间)。planner(预测)和 DroneEntity(执行)共用,消除本地折线插值
- PlannerConfig + planner_config.json:planner 策略参数全部外置(重叠系数、威胁类型系数、弹药匹配表、临界/上限概率阈值)。代码零默认值,文件缺失即抛异常
- 单元测试:RouteGeometry 16 项、PlannerConfig 6 项、DroneEntity L 形多 waypoint 1 项、Z 向航路感知 1 项
Changed — planner 不再写本地物理公式
- DefaultDefensePlanner 航路感知布局:云团 offset 沿航路切向(
RouteGeometry.TangentAt),不再写死 X 轴;穿越点用RouteGeometry.PositionAt,到达时间用RouteGeometry.TravelTimeTo——支持任意方向/折线航路 - 云团重叠:间距从
2R(相切)改为2R×(1−重叠系数),重叠 20% 由配置驱动,消除相切处的密度空洞 - DroneEntity 弧长驱动:运动改为
_traveledArc += speed×dt+RouteGeometry.PositionAt,删除CurrentWaypointIndex逐段插值、dist<1.0阈值、step>=distsnap 丢位移等本地逻辑 - CloudExpansionModel.RoundsNeeded 签名:
effectiveRadius参数改为spacing,间距由调用方(planner)按重叠系数传入,公式仍在共享模块 - 策略参数从配置读:威胁类型系数、弹药匹配表、临界概率(0.5)、拦截概率上限(0.95)全部从
PlannerConfig读,planner 内零硬编码
Fixed — planner 与引擎物理一致性
- PathInSphere 云团参考系修正:毁伤判定改在云团参考系计算(
drone.Pos − cloud.Center),修正云团在 tick 内移动导致的每 tick ~2m 系统误差 - ComputeEffectiveRadius 云龄 bug:从
ArrivalTime×2(无人机飞行时间,概念错误)改为expansionTime(云团自身膨胀时长)
Removed
- SimulationEngine 所有硬编码桌面路径的诊断写入(
planner_targets.csv/cloud_actual.csv/path_in_cloud.txt/_hitLog/_totalPathInCloud)——这些造成集成测试并行时文件竞争(flaky 失败根因) - DefaultDefensePlanner 的硬编码
MatchTable/TypeCoefficient字典(移入配置)
Metrics
- 测试 167 → 191(+24),全量通过 41s
- 关键验证:活塞+西风、空基+东风有风场景击毁成功;Z 向航路云团沿航路分布;L 形折线多 waypoint 运动正确
[0.4.1] - 2026-06-14
Added
- 天气纳入 Planner 规划:抛撒点风偏预补偿。云团生成后会在
expansionTime内被风吹偏windVec × expansionTime,Planner 逆风预置抛撒点cloudGen = 穿越点 − windVec × expansionTime,使云团漂移后中心正好回到无人机航路上 - 单元测试:
DispersionModelTestsPhase3 天气差异 2 项(雾 vs 晴、夜 vs 晴);DefensePlannerTests风偏补偿 4 项(无风/东风/西风/北风方向性)
Fixed
GaussianPuffDispersion.TickPhase3 写死WeatherType.Sunny的 bug:原代码GetStabilityClass((WeatherType)0, windSpeed)导致任何天气下扩散行为都相同,预估(CloudExpansionModel已正确读 env)与运行时模型不一致。改为存储env字段,使用真实env.WeatherType
Changed
DefaultDefensePlanner.GenerateFireEventsAt区分无人机穿越点tx,tz(用于txArrival计算)与云团生成点cloudGenX,Z(弹药瞄准目标 + FireEvent 输出)- 移除
Solve中e.TargetX = mid.X + offset的覆盖(会抹掉风偏补偿;多发散布偏移已由targetOffset参数处理)
[0.4.0] - 2026-06-13
Added
- 路径积分毁伤判定:
DamageAssessment.PathInSphere替代离散ContainsPoint,无人机穿云暴露精确计算 - 损伤模型暴露所需暴露时间:
IDamageModel.RequiredExposureSeconds,Planner 从损伤模型读取所需覆盖时长 - 云团膨胀独立模块:
CloudExpansionModel,封装RadiusAt/DensityAt/TimeToReach/TimeToDensity/RoundsNeeded - 单元测试:
DamageAssessment5 项 (穿心/相邻/间隙/9 链/跨云)、Kinematics抛物线 4 项 (45°标准公式验证) - 密度阈值统一:引擎处
cloudDensity >= ammo.EffectiveConcentration统一检查,三个损伤模型去掉各自硬编码阈值
Changed
- Planner
CalcRoundsNeeded从硬编码2:6s改为_damageModel.RequiredExposureSeconds CloudExpansionModel.RoundsNeeded间距= 2R(消除1.5f魔法数字)FireUnit= 物理单元(不拆通道),Planner 一辆车发一条线MunitionEntity.HasArrived上升段触发(不再要求下行),附带精确插值- 空基平台投放逻辑:飞向云位、距目标
driftDist释放、位置插值保留 - 仿真场景缩短:Piston 5km/150km/h、Jet 5km/200km/h、AirBased 10km/150km/h,全量 22s
Fixed
- 抛物线弹道精确求解:
CalculateLaunchAngle/ParabolicShellTime解 tan(θ) 二次方程取平射解 - 空基
PlatformEntity投放时不再传送到终点 - 缺失
else导致空基走地基分支 Event.OccurredAt使用精确FireEvent.FireTime/m.ArrivalTime_frameDb.Commit批量 50 帧- 报告火力单元计数(
_entityCounter重置)
Removed
ComputeEffectiveRadius公式转移到CloudExpansionModel- 损伤模型内部浓度阈值(
TriggerThreshold/EffectiveThreshold) CalcRoundsNeeded/2魔法加 1
Added
- DefensePlanner 防御规划引擎:五步流水线(威胁排序 → 弹药匹配 → 候选生成 → 贪心分配 → 时序生成)
- 空基平台飞行与投弹:状态机(Idle → FlyingToTarget → ReadyToRelease),载机速度继承,弹药抛物线下落
- 火力单元通道模型:GunCount × ChannelsPerGun,ChannelInterval 物理间隔,Cooldown 冷却
- 默认火力单元配置:4 种模板(轻型/标准/重地基 + 标准空基 8 通道)
- 推荐算法统一处理空基/地基平台类型
- 物理间隔错开发射:发射间隔 = 云团直径 / 无人机速度
- 每发弹按目标点位置独立计算到达时间
- 报告显示 per-unit 发射数 + 事件标注火力单元
Changed
- IDefenseAdvisor → IDefensePlanner:统一输入
List<FireUnit>+List<DroneGroup> - FireUnit 重构:统一表达空基/地基平台(Type/Position/GunCount/ChannelsPerGun)
- SimulationEngine 内部调用 Planner 自动生成发射计划
- MunitionEntity 空投使用 Kinematics.AirDropPosition(继承载机速度 + 重力)
- PlatformEntity 加入 CurrentVelocity 属性
Fixed
- 同平台多弹 FireTime 相同导致冷却跳过:FireTime += i × Cooldown
- 同平台弹药飞行时间按目标位置变化被吃掉:统一用中心点飞行时间
- recommendedTiming 按每发目标点独立计算(非中点)
- 空基 FireEvent.MuzzleVelocity 错误写 800
- SQLite domain reload 崩溃:SqliteConnectionTracker + AssemblyReloadEvents.beforeAssemblyReload
Removed
- IDefenseAdvisor / DefaultDefenseAdvisor / RecommendMultiGroup
- SimulationRunner.BuildFireSchedule fallback
- 所有硬编码默认值(55f/800f/1000f/+500f/0.1f clamp)
- 所有静默 fallback(null return/empty events)
- Models.SimEvent 死代码
[0.2.0] - 2026-06-12
Added
- 三阶段气溶胶扩散模型(爆轰膨胀 → 湍流扩散 → 高斯扩散)
- 防御推荐算法:根据弹药规格自动计算齐射数、间距、拦截概率
- 仿真引擎事件驱动:OnMunitionLaunched / OnCloudGenerated / OnDroneDestroyed 等 6 个事件
- FireSchedule 发射计划:推荐方案直接生成,引擎执行
- 多编队多批次支持:RoutePlan 多航路、RecommendMultiGroup 火力分配
- 仿真报告:七章结构(结果/环境/目标/推荐/部署/时序/时间线),自动导出 Markdown
- 数据库种子:首次建表自动从 JSON 导入弹药规格
- 帧数据 TTL 清理(6 个月过期自动删除)
- 仿真加速:TimeScale 支持
- Unity Manager 桥接层:ModelManager / ScenarioManager / SimulationRunner / ReportManager / ReplayController / GroupManager
- Unity 全流程验证:一键菜单验证 7 个模块
- 边界测试:空部署 / 强风 / 超长航路 / 空基弹药
Changed
- 仿真引擎重构为纯执行器,不包含决策逻辑
- RoutePlan 主键改为 Id,支持多编队
- 弹药参数改为 JSON 文件配置
- 报告结构重组,结果前置
Fixed
- 弹药飞行时间用真实弹道计算
- 云团生成位置使用目标坐标
- 编队偏移应用到初始位置
- Edit 模式下 AddComponent 不触发 Awake
[0.1.0] - 2026-06-11
Added
- 项目初始化:.NET Standard 2.1 类库 + xUnit 测试框架
- 数据模型(11 张业务表 + 2 张运行时表)
- SQLite 持久化 + 任务分库架构
- 想定管理(5 步配置 CRUD)
- 仿真引擎基础框架