2025.3.30周报
- 题目信息
- 摘要
- Abstract
- 创新点
- 网络架构
- 实验
- 结论
- 不足以及展望
题目信息
- 题目: Physics‑Informed Neural Network water surface predictability for 1D steady‑state open channel cases with different flow types and complex bed profile shapes
- 期刊: Advanced Modeling and Simulation in Engineering Sciences
- 作者: Sebastián Cedillo, Ana‑Gabriela Núñez, Esteban Sánchez‑Cordero, Luis Timbe, Esteban Samaniego, Andrés Alvarado
- 发表时间: 2022
- 文章链接:https://link.springer.com/content/pdf/10.1186/s40323-022-00226-8.pdf
摘要
传统机器学习技术虽能作为替代模型进行数值预测,但存在对数据数量和质量的依赖,且在数据稀缺时表现不佳。为解决上述问题,物理信息神经网络(PINN)应运而生,PINN可用于解决正问题和逆问题,且通过自动微分计算导数,是一种无网格求解方法。因为山区河流建模困难,需同时处理渐变流和急变流等复杂情况。虽然PINN有在水动力学中的研究,但该论文发布前尚无针对山区河流的研究。所以这篇论文目的是测试PINN在不同流动类型和复杂河床形状的河流中的预测能力,并与传统的HEC - RAS模型求出的数值解进行比较,评估PINN的性能。
Abstract
Although traditional machine learning techniques can serve as surrogate models for numerical predictions, they are highly dependent on data quantity and quality and often perform poorly under data scarcity. To address these limitations, Physics-Informed Neural Networks (PINNs) have emerged as a promising solution. PINNs are capable of solving both forward and inverse problems and employ automatic differentiation to compute derivatives, making them a mesh-free approach.Mountainous river modeling presents significant challenges, as it requires handling complex flow conditions such as gradually varied flow and rapidly varied flow simultaneously. While PINNs have been explored in hydrodynamics, prior to the publication of this paper, no studies had specifically investigated their application to mountainous rivers. Therefore, the objective of this study is to evaluate the predictive capability of PINNs in rivers with diverse flow regimes and complex bed topography, comparing their performance against numerical solutions obtained using the traditional HEC-RAS model.
创新点
这篇论文首次将 PINN 应用于山区河流的研究,利用能量微分方程和损失函数求解。验证了 PINN 在不同流态和复杂地形下的可行性和有效性。
网络架构
模型的结构图如下图所示:
模型的物理约束为能量微分方程(EDE),其残差公式如下:
d z 0 d x 0 + d h d x + d ( Q 2 2 g A 2 ) d x + 100 ⋅ Q 2 n 2 R 4 3 A 2 = 0 \frac{d z_0}{d x_0} + \frac{d h}{d x} + \frac{d\left(\frac{Q^2}{2 g A^2}\right)}{d x} + 100 \cdot \frac{Q^2 n^2}{R^{\frac{4}{3}} A^2} = 0 dx0dz0+dxdh+dxd(2gA2Q2)+100⋅R34A2Q2n2=0
z 0 z_0 z0为河床高度(cm); h h h为水深(cm); x 0 x_0 x0为距离(m);Q为流量(m³/s);A为横截面积(m²);R为水力半径(m);n为粗糙度;g为重力加速度。
输入:配点坐标 x 0 x_0 x0、边界条件水深、河床高度 z 0 z_0 z0、流量Q、断面参数。
输出:河床高低压 z 0 z_0 z0和水深 h h h。
损失函数:损失函数3个部分组成: Loss = MSE BC + MSE f + MSE G \text{Loss} = \text{MSE}_{\text{BC}} + \text{MSE}_{\text{f}} + \text{MSE}_{\text{G}} Loss=MSEBC+MSEf+MSEG
其中:
MSE BC \text{MSE}_{\text{BC}} MSEBC:边界条件误差, MSE BC = 1 N BC ∑ i = 1 N BC ∣ h ( x BC i ) − h i ∣ \text{MSE}_{\text{BC}} = \frac{1}{N_{\text{BC}}} \sum_{i=1}^{N_{\text{BC}}}|h(x_{\text{BC}}^i) - h^i| MSEBC=NBC1∑i=1NBC∣h(xBCi)−hi∣
其中, h ( x BC i ) h(x_{\text{BC}}^i) h(xBCi):是模型在边界点 x BC i x_{\text{BC}}^i xBCi预测的水深; h i h^i hi是真实的边界水深; N BC N_{\text{BC}} NBC是边界点的数量。
MSE f \text{MSE}_{\text{f}} MSEf:物理方程残差,即 f = d z 0 d x 0 + d h d x + d ( Q 2 2 g A 2 ) d x + 100 ⋅ Q 2 n 2 R 4 3 A 2 = 0 f = \frac{d z_0}{d x_0} + \frac{d h}{d x} + \frac{d\left(\frac{Q^2}{2 g A^2}\right)}{d x} + 100 \cdot \frac{Q^2 n^2}{R^{\frac{4}{3}} A^2} = 0 f=dx0dz0+dxdh+dxd(2gA2Q2)+100⋅R34A2Q2n2=0
MSE G \text{MSE}_{\text{G}} MSEG:河床高度误差。 MSE G = 1 N G ∑ i = 1 N G ∣ z ( x G i ) − z i ∣ \text{MSE}_{\text{G}} = \frac{1}{N_{\text{G}}} \sum_{i=1}^{N_{\text{G}}} |z(x_{\text{G}}^i) - z^i| MSEG=NG1∑i=1NG∣z(xGi)−zi∣
其中, z ( x G i ) z(x_{\text{G}}^i) z(xGi)为PINN在点 x G i x_{\text{G}}^i xGi 预测的河床高度; z i z^i zi为真实的河床高度(已知数据); N G N_{\text{G}} NG 是已知河床高度的数量
实验
流态影响水流设计,如超临界流易冲刷河床,亚临界流易淤积,混合流需考虑能量耗散。
这三种状态的区分通常由Fr(弗劳德系数)来区分
在这种多变的情况下,传统的数值计算,如HEC-RAS的计算成本大,本文的实验目的是PINN在一维平稳的河水流问题中的应用展开研究,通过对不同案例的实验和分析,验证PINN在不同流态下的预测能力。
评估指标如下:
RMSE:均方根误差, RMSE = 1 n ∑ i = 1 n ( y ^ i − y i ) 2 \text{RMSE} = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (\hat{y}_i - y_i)^2} RMSE=n1∑i=1n(y^i−yi)2。其中n是观测值的总数; y i y_i yi是第 个观测值的真实; y i ^ \hat{y_i} yi^是第i个预测值
MAE:平均绝对误差, MAE = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ \text{MAE}=\frac{1}{n} \sum_{i=1}^{n}\left|y_{i}-\hat{y}_{i}\right| MAE=n1∑i=1n∣yi−y^i∣。
EF( R 2 R^2 R2):Nash-Sutcliffe效率指数,衡量拟合优度。 R 2 = 1 − ∑ i = 1 n ( y i − y ^ i ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2 = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2} R2=1−∑i=1n(yi−yˉ)2∑i=1n(yi−y^i)2。参数含义同上
实验结果如下:
等效断面:真实案例的几何简化
Quinuas河段长12.22米,坡度6.1%,有明显的阶梯-水潭结构,断面形状不规则。为了简化计算,作者测量了多个断面,用几何平均法计算等效断面,拟合了横截面积 A 和水力半径 R 的指数关系。结果显示拟合优度 R 2 R^2 R2 > 0.9 ,说明等效断面能较好代表真实几何,但简化可能丢失局部细节。
正问题:水面轮廓预测的表现
正问题用已知边界条件、流量和河床高度预测水面轮廓。作者在五个案例中测试了PINN的表现:案例1(亚临界流,逐渐变化流GVF)、案例2(超临界流,GVF)、案例3(超临界到亚临界,快速变化流RVF)、case4(亚临界到超临界,RVF)、case5(混合流,Step-pool)。作者还测试了不同激活函数如,Tanh、ReLU、Sigmoid、Sin的影响,发现Tanh表现最佳,ReLU在RVF中表现最差。
逆问题:粗糙度参数估计
逆向问题中用域内三个测点水位预测水深和粗糙度 n。
Tanh、Sin、Sigmoid预测的 n 接近GLUE方法的结果,比如流量0.443 m³/s时,GLUE范围是0.105-0.124,Tanh预测为0.107,Sin为0.109,Sigmoid为0.112,但ReLU预测为0.165,偏差较大。
作者研究分析了PINN误差随配点数增加的下降速度。作者测试了不同配点数下的 L 2 L_2 L2范数,即RMSE。实验反映了光滑解(GVF)比不连续解(RVF)更容易收敛。案例2(超临界流)的曲线下降最快。案例1和4的斜率约为0.8,收敛较快。案例3和5(含水跃或翻滚流)的斜率最低,约为0.2,收敛慢。
作者在敏感性测试分析了PINN对边界条件扰动的反应,作者对边界水深施加扰动,观察RMSE范数变化。横轴是扰动幅度,纵轴是范数 L 2 L_2 L2变化率。
超临界到亚临界的曲线变化最剧烈,说明水跃位置对水深变化很敏感,可能改变流态。
超临界流的曲线最平缓,因为超临界流受上游控制,边界扰动影响小。
Case1、4、5的曲线介于两者之间。结果说明PINN在不同流态下的稳定性差异。
论文代码如下:
import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt# 设置随机种子,确保结果可复现
torch.manual_seed(1234)
np.random.seed(1234)# 定义神经网络类,用于预测河床高度 z0 和水深 h
class PINN(nn.Module):def __init__(self, num_hidden_layers=5, num_neurons=40):super(PINN, self).__init__()# 双网络设计:一个预测 z0(河床高度),一个预测 h(水深)self.z0_net = nn.ModuleList()self.h_net = nn.ModuleList()# 输入层:1维(x坐标)self.z0_net.append(nn.Linear(1, num_neurons))self.h_net.append(nn.Linear(1, num_neurons))# 隐藏层for _ in range(num_hidden_layers - 1):self.z0_net.append(nn.Linear(num_neurons, num_neurons))self.h_net.append(nn.Linear(num_neurons, num_neurons))# 输出层:1维(z0 或 h)self.z0_net.append(nn.Linear(num_neurons, 1))self.h_net.append(nn.Linear(num_neurons, 1))# 激活函数Tanhself.activation = nn.Tanh()def forward_z0(self, x):# 前向传播,预测河床高度 z0z = xfor i, layer in enumerate(self.z0_net):z = layer(z)if i < len(self.z0_net) - 1: # 最后一层不加激活z = self.activation(z)return zdef forward_h(self, x):# 前向传播,预测水深 hh = xfor i, layer in enumerate(self.h_net):h = layer(h)if i < len(self.h_net) - 1:h = self.activation(h)return h# 定义 PINN 模型和损失函数
def compute_loss(model, x_f, x_bc, h_bc, x_g, z_g, Q, n, b, device):# x_f: 配点,用于计算物理方程残差# x_bc, h_bc: 边界点及其水深# x_g, z_g: 几何点及其河床高度# Q: 流量 (m^3/s), n: 曼宁粗糙度, b: 渠道宽度 (m)# 确保输入是 tensor 并需要梯度x_f = x_f.requires_grad_(True)x_bc = x_bc.requires_grad_(True)x_g = x_g.requires_grad_(True)# 预测河床高度 z0 和水深 hz0_f = model.forward_z0(x_f) # 配点处的 z0h_f = model.forward_h(x_f) # 配点处的 hz0_g = model.forward_z0(x_g) # 几何点处的 z0h_bc_pred = model.forward_h(x_bc) # 边界点处的 h# 计算导数(自动微分)dz0_dx = torch.autograd.grad(z0_f, x_f, grad_outputs=torch.ones_like(z0_f), create_graph=True)[0]dh_dx = torch.autograd.grad(h_f, x_f, grad_outputs=torch.ones_like(h_f), create_graph=True)[0]# 计算横截面积 A 和水力半径 R(矩形断面)A = b * h_f # 面积 (m^2)R = (b * h_f) / (b + 2 * h_f) # 水力半径 (m)# 动能项 d(Q^2/(2gA^2))/dxg = 9.81 # 重力加速度 (m/s^2)kinetic_term = Q**2 / (2 * g * A**2)dkinetic_dx = torch.autograd.grad(kinetic_term, x_f, grad_outputs=torch.ones_like(kinetic_term), create_graph=True)[0]# 能量微分方程(EDE)残差# 论文中单位调整:水深和河床高度用 cm,距离用 m,摩擦项系数调整为 100h_f_cm = h_f * 100 # 转换为 cmA_cm = b * h_f_cm # 面积 (m * cm)R_cm = (b * h_f_cm) / (b + 2 * h_f_cm) # 水力半径 (m)friction_term = 100 * (Q**2 * n**2) / (R_cm**(4/3) * A_cm**2)f = dz0_dx + dh_dx + dkinetic_dx + friction_term# 损失函数# 1. 边界条件误差 (MSE_BC)mse_bc = torch.mean(torch.abs(h_bc_pred - h_bc))# 2. 物理方程残差 (MSE_f)mse_f = torch.mean(torch.abs(f))# 3. 几何数据误差 (MSE_G)mse_g = torch.mean(torch.abs(z0_g - z_g))# 总损失loss = mse_bc + mse_f + mse_greturn loss, mse_bc, mse_f, mse_g# 数据准备(案例1:亚临界流,矩形断面)
def generate_data():# 河道长度 1000mL = 1000.0# 流量 Q = 15 m^3/s, 曼宁粗糙度 n = 0.03, 宽度 b = 10mQ = 15.0n = 0.03b = 10.0# 配点(用于物理约束)N_f = 1000x_f = torch.linspace(0, L, N_f).reshape(-1, 1)# 边界条件(亚临界流,下游水深已知)N_bc = 1x_bc = torch.tensor([[L]]) # 下游边界 (x = 1000m)h_bc = torch.tensor([[2.0]]) # 下游水深 2m(假设值,需根据实际计算)# 几何数据(河床高度)N_g = 200x_g = torch.linspace(0, L, N_g).reshape(-1, 1)# 假设河床高度随 x 线性变化(简化,实际应根据案例1的拐点设计)z_g = 0.001 * x_g # 坡度 0.001return x_f, x_bc, h_bc, x_g, z_g, Q, n, b# 训练函数
def train(model, x_f, x_bc, h_bc, x_g, z_g, Q, n, b, num_epochs=5000, lr=0.001):optimizer = torch.optim.Adam(model.parameters(), lr=lr)device = torch.device("cuda" if torch.cuda.is_available() else "cpu")model.to(device)# 移动数据到设备x_f = x_f.to(device)x_bc = x_bc.to(device)h_bc = h_bc.to(device)x_g = x_g.to(device)z_g = z_g.to(device)# 训练循环for epoch in range(num_epochs):optimizer.zero_grad()loss, mse_bc, mse_f, mse_g = compute_loss(model, x_f, x_bc, h_bc, x_g, z_g, Q, n, b, device)loss.backward()optimizer.step()if (epoch + 1) % 500 == 0:print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4e}, "f"MSE_BC: {mse_bc.item():.4e}, MSE_f: {mse_f.item():.4e}, MSE_G: {mse_g.item():.4e}")# 可视化结果
def plot_results(model, x_f, x_bc, h_bc, x_g, z_g):model.eval()with torch.no_grad():x_plot = torch.linspace(0, 1000, 1000).reshape(-1, 1)z0_pred = model.forward_z0(x_plot).cpu().numpy()h_pred = model.forward_h(x_plot).cpu().numpy()# 绘制河床高度和水面轮廓plt.figure(figsize=(10, 6))plt.plot(x_plot.numpy(), z0_pred, label="Predicted Bed Elevation (z0)", color="blue")plt.plot(x_g.numpy(), z_g.numpy(), "o", label="True Bed Elevation", color="blue", alpha=0.5)plt.plot(x_plot.numpy(), z0_pred + h_pred, label="Predicted Water Surface (z0 + h)", color="red")plt.plot(x_bc.numpy(), h_bc.numpy() + z_g[-1].numpy(), "o", label="Boundary Condition", color="red")plt.xlabel("Distance (m)")plt.ylabel("Elevation (m)")plt.title("PINN Prediction: Water Surface and Bed Elevation")plt.legend()plt.grid(True)plt.show()# 主函数
def main():# 数据准备x_f, x_bc, h_bc, x_g, z_g, Q, n, b = generate_data()# 初始化模型model = PINN(num_hidden_layers=5, num_neurons=40)# 训练train(model, x_f, x_bc, h_bc, x_g, z_g, Q, n, b, num_epochs=10000)# 可视化plot_results(model, x_f, x_bc, h_bc, x_g, z_g)if __name__ == "__main__":main()
结论
本文测试了PINN在山区河流中华不同情况的性能。在使用大量配点时,PINN 有良好的近似特性,对水深剖面预测较好,但与 HEC-RAS 有细微差异。激活函数中Tanh表现最佳,Sin和 Sigmoid 在正问题急流情况结果不佳,ReLU 表现最差。解平滑时收敛率高,边界条件扰动影响因流态而异。
不足以及展望
作者认为PINN 预测阶梯 - 深潭水深剖面与 HEC - RAS 有细微差异。且部分激活函数在某些流态下表现不佳,如 Sigmoid 和 Sin 在急流情况、ReLU 在所有研究案例中结果较差。后续可以进一步优化 PINN 架构和激活函数,提高对复杂流态的预测精度。研究更多数据处理方法,更好地利用有限的横截面数据,提高粗糙度参数估计的准确性。