3. 物理一致性约束的数学形式
在物理信息建模中,“物理一致性”不是一句口号,而必须落到可计算的数学表达式上。只有把物理规律写成对模型输出(或中间状态)的约束,才能把它嵌入损失函数、优化求解器或网络结构之中。本节按约束的数学形态,把常见的物理一致性约束分为四类:等式约束、不等式约束、微分方程约束与守恒律约束,并说明它们的表达方式、典型来源与在建模中的使用位置。
一、等式约束:把“必须相等”写成残差
等式约束是最直接的一类,形式为 g(x, u) = 0,其中 x 为状态或输入,u 为模型输出。它表达的是“某个物理量必须精确满足某个关系”。典型来源包括:本构关系(如线弹性 σ = E·ε)、几何协调关系(如节点位移与单元应变)、代数平衡(如电路基尔霍夫电压定律)、边界条件(如固定端位移为零)。
在软约束框架下,等式约束通常转化为残差平方项加入损失:L_eq = Σ ||g(x_i, u_i)||²。残差越接近零,物理一致性越好。需要注意量纲与尺度:若把应力(MPa 量级)与位移(mm 量级)的残差直接相加,梯度会被大量纲项主导,因此实践中常对每类残差做归一化,或为不同约束分配权重 λ_k。
二、不等式约束:表达物理可行域
不等式约束形式为 h(x, u) ≤ 0 或 h(x, u) ≥ 0,它不要求某个量取定值,而是把它限制在一个可行区间内。典型例子有:材料屈服准则(von Mises 应力不超过屈服强度 σ_vm − σ_y ≤ 0)、接触条件(法向间隙非负、法向力非负)、热力学第二定律(熵产率非负)、浓度与密度非负、功率不超过额定值等。
不等式约束在优化中常通过罚函数或松弛变量处理,例如 L_ineq = Σ max(0, h(x_i, u_i))²,即只在越界时产生惩罚。相比等式约束,它更容易出现“贴边”解,梯度在边界附近不连续,因此实际训练中常配合平滑近似(如 softplus)或逐步收紧的惩罚系数。判断是否生效,应观察越界样本比例与最大越界量,而不是只看总损失。
三、微分方程约束:把演化规律写进残差
许多物理规律以微分方程形式给出,如热传导 ρc ∂T/∂t = ∇·(k∇T) + q、结构动力学 Mü + Cü + Ku = F、Navier–Stokes 方程等。这类约束的核心是把方程整理为残差形式 N[u] = 0,再在配点(collocation points)上计算残差。以 PINN 为例,损失中包含 L_pde = Σ ||N[u_θ](x_i, t_i)||²,其中导数通过对网络输出自动微分获得。
微分方程约束的关键实现细节有三点:其一,配点采样要覆盖求解域并避开奇异区域;其二,时间与空间尺度需归一化,否则高阶导数项数值差异过大;其三,初值与边界条件通常单独作为等式约束项加入,形成“方程残差 + 初边值残差”的组合。评估时,应分别报告方程残差与初边值残差,避免总损失掩盖某一项的失效。
四、守恒律约束:全局不变量与通量平衡
守恒律约束表达“某个总量在演化中保持不变或按通量平衡变化”,典型形式为质量守恒 ∂ρ/∂t + ∇·(ρv) = 0、能量守恒、动量守恒。与逐点微分方程不同,守恒律常以积分形式使用:对控制体 Ω,有 d/dt ∫_Ω ρ dV + ∮_∂Ω ρv·n dS = 0。在离散模型中,这转化为“流入减流出等于内部积累”的代数关系,可直接作为等式约束施加在单元或系统层面。
守恒律约束的价值在于它比逐点方程更“鲁棒”:即使局部近似有误差,只要全局通量平衡成立,整体解仍可能保持物理合理。实践中常把守恒律作为额外损失项 L_cons = ||Σ流入 − Σ流出 − Δ积累||²,或作为后处理校正步骤,把模型输出投影回守恒可行集。
五、四类约束的关系与选用
这四类约束并非互斥,而是从不同粒度描述同一物理系统。等式约束刻画“精确关系”,不等式约束刻画“可行边界”,微分方程约束刻画“局部演化”,守恒律约束刻画“全局不变量”。一个完整的物理一致性模型往往同时包含多类:例如热-结构耦合问题中,本构关系用等式约束,屈服用不等式约束,热传导用微分方程约束,能量平衡用守恒律约束。
选用时应考虑三点:可计算性——约束是否能写成对模型输出的可微表达式;可满足性——硬约束是否会导致可行域为空或训练不稳定;可验证性——是否有独立的检验量来判断约束是否真正生效。下表给出一个示例性的约束登记表,便于在项目中逐项管理(参数为教学示例,非实测值)。
| 约束名称 | 数学形式 | 类型 | 示例阈值/参数 | 检验量 |
|---|---|---|---|---|
| 线弹性本构 | σ − E·ε = 0 | 等式 | E = 210 GPa | 本构残差均方根 |
| von Mises 屈服 | σ_vm − σ_y ≤ 0 | 不等式 | σ_y = 235 MPa | 越界样本比例 |
| 一维热传导 | ρc·∂T/∂t − k·∂²T/∂x² = 0 | 微分方程 | k = 45 W/(m·K) | 配点残差最大值 |
| 控制体质量守恒 | Σṁ_in − Σṁ_out − dM/dt = 0 | 守恒律 | 相对误差 < 1e-3 | 通量平衡相对误差 |
六、实现要点与常见误区
把上述约束落地时,最常见的三个问题是:量纲不统一导致某一类残差主导梯度;权重固定不变导致训练后期约束被数据项压制;只报告总损失导致无法定位哪类约束失效。建议在训练日志中分项记录每类残差的均值与最大值,并对权重采用自适应策略(如根据残差量级动态调整 λ_k)。
# 示例:分项残差记录(伪代码,参数为教学示例)
loss_data = mse(u_pred, u_obs)
loss_eq = mean((sigma - E * eps) ** 2)
loss_ineq = mean(relu(sigma_vm - sigma_y) ** 2)
loss_pde = mean(residual_heat(T_pred, x, t) ** 2)
loss_cons = (m_in - m_out - dM_dt) ** 2
total = loss_data + 1e-3*loss_eq + 1e-2*loss_ineq + 1e-4*loss_pde + 1e-2*loss_cons
log({"eq": loss_eq.item(), "ineq": loss_ineq.item(),
"pde": loss_pde.item(), "cons": loss_cons.item()})