# ICML 2025：安全约束下的 epigraph HJB-PINN

Manan Tayal, Aditya Singh, Shishir Kolathaya, Somil Bansal, *A Physics-Informed Machine Learning Framework for Safe and Optimal Control of Autonomous Systems*, ICML 2025, PMLR 267. [正式论文及22页全文](https://proceedings.mlr.press/v267/tayal25a.html)，[作者代码](https://github.com/tayalmanan28/piml-soc)。本轮取得并阅读正文、Appendix A 的统计推导、Appendix B 三组系统及 Appendix C 实验配置；MATLAB落实其中船舶算例。车辆追逃、多智能体及论文全部基线未在本版本执行。

## 公式到代码

| 原文位置 | 本地实现 | 核对要点 |
|---|---|---|
| §2.2，(3)–(5) | `evaluate_boat_model`、`boat_rollout` | 增加预算状态 z，zdot=-l；从预测值<=阈值的预算网格选最小预算 |
| §2.2，(6) | `boat_loss` | 剩余时间 tau=T-t，因此残差是 min(V_tau-H,V-g)，时间符号不能直接照抄物理时间 |
| §2.2，(7) | `boat_value` | 自训模型硬满足 max(phi-z,g)；作者模型采用原软边界网络，分别评估边界误差 |
| Appendix B.1 | `boat_geometry`、`boat_rollout` | 保留论文漂移、单位圆控制约束、两块障碍、运行/终端成本和2秒时域 |
| §3.2，(14)及Appendix A | `calibrate_boat` | 独立选择阈值，再用全新样本审计；用一侧精确二项区间，明确区别于论文完整Algorithm 1 |

```text
xdot = u1 + 2 - 0.5*y^2,  ydot = u2,  ||u|| <= 1
l(x,y) = phi(x,y) = distance((x,y),(1.5,0))
g = max(0.4-distance((x,y),(-0.5,0.5)),
        0.5-distance((x,y),(-1,-1.2)))
H = (2-0.5*y^2)*V_x - norm([V_x,V_y]) - V_z*l
u = -[V_x,V_y] / norm([V_x,V_y])
```

零梯度时取零控制。状态在保持输入的每个步长内用RK4积分，预算与运行成本使用相同RK4阶段，障碍检查包含阶段点；减半步长另外比较。代码不把离开训练域的状态夹回域内。

## 两条已执行路径

**从头训练的缩小版。** MATLAB `dlnetwork`、自动微分和Adam，2层64宽tanh，512点/批，5000次更新，随机种子25051。硬终端形式 `V=max(phi-z,g)+tau*NN` 与论文的软边界sine网络不同，配置全部保存。固定留出集HJB MSE从0.522897降到0.036432，但64个预测可行初值中仍有19条碰障碍、47条超过预算。这是已经运行和定位的负结果，说明这个训练规模还不足以支撑该算例。

**作者检查点的MATLAB推理。** 固定作者仓库提交 `b3fcda0873046fca67112b5289ba7b1261b41ac3`，读取 `model_final.pth` 中标记 epoch=250000 的张量。实际形状为4→256→256→256→256→1，每层 `sin(30*x)`，最后线性输出；注意作者API的 `num_hidden_layers=3` 额外包含首个隐藏层。输入时间不归一化，状态按作者参数归一化，物理值为 `50*output+0.5`。只在一次性转换时使用PyTorch读取权重，不执行作者Python源码；后续值、梯度和闭环全在MATLAB运行。

128个固定输入点的MATLAB/PyTorch double值与梯度最大差分别为8.88e-16、1.78e-15。相同64初值中63个预测可行：1条碰障碍、9条超过预算；HJB MSE=0.017780，终端最大误差0.030952。这里完成的是原检查点推理与闭环对照，并未重新执行作者250000次训练。

**公开代码对照。** 固定提交的训练调用链实际使用 `V-max(g,phi-z)`，而非论文(6)中的 `V-g`；标准批量验证还会裁剪状态和预算，公开安全校准统计的是碰撞事件。因而本平台的未裁剪动力学与联合成本/安全审计不能直接套用作者演示阈值-0.02。另有一处终端成本赋值顺序错误仅确认出现在演示脚本，批量性能脚本的该顺序正确。精确位置、原因和适用范围见[作者源码审计](https://github.com/tanjunkai2001/adp-matlab/blob/main/docs/fulltext/safe_pinn_author_code_audit.md)。这些源码事实不能证明发布检查点的完整训练过程。

在同一4096点留出集，检查点对论文PDE的MSE为0.017780，对公开代码PDE则为0.000272758。这个差异支持继续按损失函数分支定位，仍不足以反推完整训练历史。

## 独立校准的实际含义

先从2000个均匀增广初值选择阈值，随后从该固定子水平集重新抽取300个初值。事件为 `max(cost-budget,max(g))>=0`，包含成本和障碍，非有限轨迹同样计失败。95%一侧上界使用 `BetaInv(0.95,k+1,N-k)`；k=N时取1。

| 模型 | 选定阈值 | 新样本联合违例 | 95%违例概率上界 | 步长减半后的标签变化 |
|---|---:|---:|---:|---:|
| 缩小版训练 | -2.295987 | 15/300 | 7.5949% | 0 |
| 作者检查点 | -2.049374 | 2/300 | 2.0836% | 0 |

两份新审计样本的碰撞数均为0；表中的15次和2次联合违例全部来自成本超过预算。δ=0时的碰撞结果与选定负阈值后的审计属于不同集合，不能混为同一个统计量。

概率针对文档所列分布和数值轨迹标签。论文使用30万样本及不同置信参数，本轮300条审计不能沿用其99.9%数字。也不能把统计校准当成所有状态、连续时间轨迹的安全证明。本文的残差、碰撞数和预算违例是不同量，报告中分别保留。

## 复现范围与直接可继续的工作

`demo_safe_pinn` 提供完整自训路径；`load_author_boat` 做权重转换校验；`evaluate_boat_model` 用相同输入比较两者；`calibrate_boat` 保存选择样本和独立审计样本。完整日志、网络、输入、轨迹、训练历史、指标与可编辑FIG保存在 `evidence/v0.3/safe-pinn/`。

下一项有明确价值的实验是：在相同不夹紧的状态积分与成本计算上，恢复作者sine结构和软边界训练规模，比较预算边界附近及出训练域的误差。当前证据已经能支持这项诊断，但尚不能确定偏差全部来自哪一个环节。
