







摘要:在非常规油气开发的高速赛道中,水力压裂数值模拟正经历从"力学建模"到"智能量化"的关键跨越。本文将深入拆解一套基于贝叶斯物理信息神经网络(B-PINN)的相场法水力压裂不确定性量化 MATLAB 代码体系,从物理背景、算法原理、代码架构到工程落地的全链路,为你揭示物理约束与贝叶斯推理如何优雅地融为一体。
一、研究背景:为什么需要 B-PINN?
1.1 行业痛点
水力压裂是页岩气、致密油等非常规油气藏开发的核心增产技术。传统数值模拟方法(如有限元法 FEM、扩展有限元法 XFEM)在该领域面临三个突出瓶颈:
| 痛点 | 具体表现 |
|---|---|
| 计算成本极高 | 相场法模拟单次裂缝扩展需要数十分钟至数小时,参数扫描面临维度灾难 |
| 参数不确定性 | 岩石弹性模量 EEE、泊松比 ν\nuν、临界能量释放率 GcG_cGc 等关键物性参数具有显著空间变异性和测量误差 |
| 推理能力缺失 | 确定性模型只能输出"点估计",无法提供裂缝形态的置信区间,不利于工程风险评估 |
1.2 技术契机
物理信息神经网络(Physics-Informed Neural Networks, PINN)将偏微分方程(PDE)物理约束嵌入神经网络的损失函数,使得在无监督或少数据条件下也能学习物理场。而贝叶斯物理信息神经网络(B-PINN),通过 Dropout 变分推断在 PINN 基础上增加不确定性估计能力,使模型不仅能"预测裂缝",还能"告诉你预测的把握有多大"------这对于工程决策的价值不言而喻。
二、核心建模:从物理方程到神经网络
2.1 控制方程体系
本研究基于变分相场断裂理论(PFM),将水力压裂的物理过程转化为三个耦合 PDE:
(1)相场演化方程
∂ϕ∂t=Mϕ⋅(p−ϕ)⋅(1−0.25⋅tanh2(ϕ))\frac{\partial \phi}{\partial t} = M_\phi \cdot (p - \phi) \cdot \left(1 - 0.25 \cdot \tanh^2(\phi)\right)∂t∂ϕ=Mϕ⋅(p−ϕ)⋅(1−0.25⋅tanh2(ϕ))
其中 ϕ∈0,1\phi \in 0, 1ϕ∈0,1 为相场变量(0 表示完好岩石,1 表示完全断裂),ppp 为流体压力,MϕM_\phiMϕ 为相场移动性。该方程描述了裂缝的不可逆演化------相场只能增长不能回退,与岩石断裂的物理规律一致。
(2)应力平衡方程
∇⋅u=∂u∂x+∂v∂y=αs⋅p\nabla \cdot \mathbf{u} = \frac{\partial u}{\partial x} + \frac{\partial v}{\partial y} = \alpha_s \cdot p∇⋅u=∂x∂u+∂y∂v=αs⋅p
其中 (u,v)(u, v)(u,v) 为位移场分量,αs\alpha_sαs 为有效应力系数(Biot 系数)。该式表达了孔隙弹性介质中流体压力驱动的体积应变。
(3)渗流方程
∂p∂t=Mp⋅(∂2p∂x2+∂2p∂y2)−L⋅ϕ⋅p\frac{\partial p}{\partial t} = M_p \cdot \left(\frac{\partial^2 p}{\partial x^2} + \frac{\partial^2 p}{\partial y^2}\right) - L \cdot \phi \cdot p∂t∂p=Mp⋅(∂x2∂2p+∂y2∂2p)−L⋅ϕ⋅p
其中 MpM_pMp 为压力迁移率,LLL 为滤失系数。渗流方程刻画了裂缝内外的压力扩散与逸散行为。
2.2 B-PINN 网络架构
代码采用三子网络并行架构,每个子网独立处理一组物理量:
输入层 [x, y, t, E, ν, Gc] (6维)
├── 子网1 (netUV) → 输出 [u, v] ------ 位移场预测
├── 子网2 (netPhi) → 输出 [φ] ------ 相场预测
└── 子网3 (netP) → 输出 [p] ------ 压力场预测
三个子网共享相同的结构模板:
特征输入层 → FC+Tanh → Dropout → FC+Tanh → Dropout → ... → 全连接输出层
|______每层重复 numHiddenLayers 次______|
设计要点:
- 激活函数:Tanh,其平滑性和 -1, 1 值域有利于求解二阶 PDE 残差
- 贝叶斯层:每个隐藏层后插入 Dropout 层(rate = 0.08~0.10),训练和推理阶段均保持激活
- 子网解耦:三个物理量的梯度不相互污染,稳定性和收敛速度均优于单一共享网络
2.3 损失函数:物理约束的数学翻译
B-PINN 的损失函数由五项加权求和构成:
Ltotal=wdLdata+Lphysics+wbcLbc+wicLic+wpLprior\mathcal{L}{\text{total}} = w_d \mathcal{L}{\text{data}} + \mathcal{L}{\text{physics}} + w{bc} \mathcal{L}{bc} + w{ic} \mathcal{L}{ic} + w_p \mathcal{L}{\text{prior}}Ltotal=wdLdata+Lphysics+wbcLbc+wicLic+wpLprior
其中物理残差项进一步展开:
Lphysics=wϕLϕ+wσLσ+wfLf\mathcal{L}{\text{physics}} = w\phi \mathcal{L}\phi + w\sigma \mathcal{L}_\sigma + w_f \mathcal{L}_fLphysics=wϕLϕ+wσLσ+wfLf
| 损失项 | 物理含义 | 公式来源 |
|---|---|---|
| Ldata\mathcal{L}_{\text{data}}Ldata | 与参考解的 MSE 匹配 | $ |
| Lϕ\mathcal{L}_\phiLϕ | 相场演化残差 | 公式(1) |
| Lσ\mathcal{L}_\sigmaLσ | 应力平衡残差 | 公式(2) |
| Lf\mathcal{L}_fLf | 渗流残差 | 公式(3) |
| Lbc\mathcal{L}_{bc}Lbc | 边界条件约束 | 边界点的压力/位移约束 |
| Lic\mathcal{L}_{ic}Lic | 初始条件约束 | t=0t=0t=0 时刻的预置裂缝 |
| Lprior\mathcal{L}_{\text{prior}}Lprior | L2 正则化(权重先验) | ∣W∣22| \mathbf{W} |_2^2∣W∣22 |
梯度计算全部通过 MATLAB 的 dlgradient 自动微分框架实现,无需手动推导雅可比矩阵。
三、技术路线与算法步骤
3.1 整体工作流
#mermaid-svg-f8YmHKlUBZ3DMufM{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-f8YmHKlUBZ3DMufM .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-f8YmHKlUBZ3DMufM .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-f8YmHKlUBZ3DMufM .error-icon{fill:#552222;}#mermaid-svg-f8YmHKlUBZ3DMufM .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-f8YmHKlUBZ3DMufM .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-f8YmHKlUBZ3DMufM .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-f8YmHKlUBZ3DMufM .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-f8YmHKlUBZ3DMufM .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-f8YmHKlUBZ3DMufM .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-f8YmHKlUBZ3DMufM .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-f8YmHKlUBZ3DMufM .marker{fill:#333333;stroke:#333333;}#mermaid-svg-f8YmHKlUBZ3DMufM .marker.cross{stroke:#333333;}#mermaid-svg-f8YmHKlUBZ3DMufM svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-f8YmHKlUBZ3DMufM p{margin:0;}#mermaid-svg-f8YmHKlUBZ3DMufM .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-f8YmHKlUBZ3DMufM .cluster-label text{fill:#333;}#mermaid-svg-f8YmHKlUBZ3DMufM .cluster-label span{color:#333;}#mermaid-svg-f8YmHKlUBZ3DMufM .cluster-label span p{background-color:transparent;}#mermaid-svg-f8YmHKlUBZ3DMufM .label text,#mermaid-svg-f8YmHKlUBZ3DMufM span{fill:#333;color:#333;}#mermaid-svg-f8YmHKlUBZ3DMufM .node rect,#mermaid-svg-f8YmHKlUBZ3DMufM .node circle,#mermaid-svg-f8YmHKlUBZ3DMufM .node ellipse,#mermaid-svg-f8YmHKlUBZ3DMufM .node polygon,#mermaid-svg-f8YmHKlUBZ3DMufM .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-f8YmHKlUBZ3DMufM .rough-node .label text,#mermaid-svg-f8YmHKlUBZ3DMufM .node .label text,#mermaid-svg-f8YmHKlUBZ3DMufM .image-shape .label,#mermaid-svg-f8YmHKlUBZ3DMufM .icon-shape .label{text-anchor:middle;}#mermaid-svg-f8YmHKlUBZ3DMufM .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-f8YmHKlUBZ3DMufM .rough-node .label,#mermaid-svg-f8YmHKlUBZ3DMufM .node .label,#mermaid-svg-f8YmHKlUBZ3DMufM .image-shape .label,#mermaid-svg-f8YmHKlUBZ3DMufM .icon-shape .label{text-align:center;}#mermaid-svg-f8YmHKlUBZ3DMufM .node.clickable{cursor:pointer;}#mermaid-svg-f8YmHKlUBZ3DMufM .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-f8YmHKlUBZ3DMufM .arrowheadPath{fill:#333333;}#mermaid-svg-f8YmHKlUBZ3DMufM .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-f8YmHKlUBZ3DMufM .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-f8YmHKlUBZ3DMufM .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-f8YmHKlUBZ3DMufM .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-f8YmHKlUBZ3DMufM .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-f8YmHKlUBZ3DMufM .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-f8YmHKlUBZ3DMufM .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-f8YmHKlUBZ3DMufM .cluster text{fill:#333;}#mermaid-svg-f8YmHKlUBZ3DMufM .cluster span{color:#333;}#mermaid-svg-f8YmHKlUBZ3DMufM div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-f8YmHKlUBZ3DMufM .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-f8YmHKlUBZ3DMufM rect.text{fill:none;stroke-width:0;}#mermaid-svg-f8YmHKlUBZ3DMufM .icon-shape,#mermaid-svg-f8YmHKlUBZ3DMufM .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-f8YmHKlUBZ3DMufM .icon-shape p,#mermaid-svg-f8YmHKlUBZ3DMufM .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-f8YmHKlUBZ3DMufM .icon-shape .label rect,#mermaid-svg-f8YmHKlUBZ3DMufM .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-f8YmHKlUBZ3DMufM .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-f8YmHKlUBZ3DMufM .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-f8YmHKlUBZ3DMufM :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 物理参数空间采样
有限差分生成参考解
构造训练集
B-PINN 训练
MC Dropout 后验推理
不确定性量化与可视化
确定性 PINN 基线训练
3.2 算法步骤详述
Step 1:参考解生成(generateReferenceData.m)
由于原始论文未提供 COMSOL 模拟数据,代码自研了一套MATLAB 有限差分/PDE 近似生成器:
- 参数网格扫描 :E∈30,60,90,120×109 PaE \in 30,60,90,120 \times 10^9 \text{ Pa}E∈30,60,90,120×109 Pa, ν∈0.15,0.20,0.25,0.30,0.35\nu \in 0.15, 0.20, 0.25, 0.30, 0.35ν∈0.15,0.20,0.25,0.30,0.35, Gc∈500,1000,1500,2000,2500 J/m2G_c \in 500, 1000, 1500, 2000, 2500 \text{ J/m}^2Gc∈500,1000,1500,2000,2500 J/m2
- 裂缝几何建模 :曲线裂缝 ϕ\phiϕ 场由高斯核沿径向衰减构建,支持单裂缝和双裂缝两种算例
- 时间积分子步骤 :自适应子步长压力扩散求解,裂缝渗透率随 ϕ2\phi^2ϕ2 增强
- 弹性顺应式位移:位移场通过压力梯度和开度-侧向关系解析估计
Step 2:B-PINN 训练(trainBPINN.m)
- 优化器:Adam,初始学习率 0.01,阶梯衰减(每 50 epoch 衰减 0.001)
- 梯度裁剪:阈值 5.0,防止残差计算中的梯度爆炸
- 激活 Dropout:B-PINN 模式全程保持 Dropout(贝叶斯近似的关键)
Step 3:不确定性推理(evaluateBPINN.m)
- 预测阶段对同一输入执行 NMCN_{MC}NMC 次独立前向传播(Dropout 不同随机掩码)
- 统计相场 ϕ\phiϕ、裂缝长度、注液压力的均值与标准差
- 构造 95% 置信区间 :CI95=1.96×σ/NMC\text{CI}{95} = 1.96 \times \sigma / \sqrt{N{MC}}CI95=1.96×σ/NMC
四、参数设定与运行环境
4.1 物理参数
| 参数 | 符号 | 数值 | 单位 |
|---|---|---|---|
| 计算域 | Lx×LyL_x \times L_yLx×Ly | 10 × 10 | m |
| 初始裂缝长度 | l0l_0l0 | 0.8 | m |
| 最大裂缝长度 | lmaxl_{\max}lmax | 6.8 | m |
| 岩石基质渗透率 | kmk_mkm | 1×10−81 \times 10^{-8}1×10−8 | m² |
| 裂缝渗透率 | kfk_fkf | 1×10−11 \times 10^{-1}1×10−1 | m² |
| 注液速率 | QQQ | 50(归一化) | --- |
| 流体密度 | ρ\rhoρ | 1000 | kg/m³ |
| 流体粘度 | μ\muμ | 1×10−31 \times 10^{-3}1×10−3 | Pa·s |
| 相场宽度 | lsl_sls | 0.12 | m |
4.2 神经网络超参数
| 参数 | Quick 模式 | Full 模式 |
|---|---|---|
| 隐藏层数 | 3 | 8 |
| 每层神经元 | 32 | 64 |
| 训练轮数 | 80 | 10,000 |
| Batch Size | 128 | 800 |
| 初始学习率 | 0.008 | 0.01 |
| Dropout Rate | 0.10 | 0.08 |
| MC 采样数 | 12 | 100 |
| 网格分辨率 | 31 × 31 | 71 × 71 |
| 最大训练样本 | 2,500 | 80,000 |
4.3 运行环境
- 操作系统:Windows / Linux / macOS
- MATLAB 版本:R2025b(需 Deep Learning Toolbox)
- 硬件加速:自动检测 NVIDIA GPU(支持 CUDA),不可用时静默回退 CPU
- 两种模式 :
quick模式用于快速验证代码链路;full模式用于论文级完整训练
五、输出结果与可视化
代码生成七组 SCI 风格的复现图件,覆盖从几何验证到不确定性分析的全链条:
| 图号 | 名称 | 核心信息 |
|---|---|---|
| Fig 04 | 几何与边界条件 | 计算域、射孔位置、初始裂缝形态 |
| Fig 06/11 | 裂缝演化 | 参考解 vs B-PINN 均值 vs 绝对误差的热力图对比 |
| Fig 07/08 | 裂缝长度与压力时程 | 裂缝长度/注液压力的时间演化 + 95% CI 带 |
| Fig 09/12 | 相场标准差云图 | σϕ\sigma_\phiσϕ 的空间分布,定位模型不确定性区域 |
| Fig 10 | 裂缝长度置信区间 | 95% CI 带完整展示预测可信度 |
| Fig 13/15 | 超参数敏感性 | 样本量、网络深度、宽度对预测误差的影响 |
| Fig 16 | 计算时间对比 | 有限差分参考解 vs B-PINN 训练 vs B-PINN 推理 |
| Fig 17 | PINN vs B-PINN 对比 | 确定性模型与贝叶斯模型的相场预测质量比较 |
六、应用场景与工程价值
6.1 适用场景
- 压裂方案优化:在参数不确定性空间内快速评估裂缝形态分布,筛选高鲁棒性施工方案
- 风险评估与决策:基于裂缝长度的 95% 置信区间,评估压裂穿透隔层的概率
- 实时压裂监测:训练后的 B-PINN 可在毫秒级完成一次预测,辅助现场调控
- 多参数敏感性分析:量化弹性模量、断裂能、泊松比对裂缝几何的敏感性优先级
6.2 方法论迁移潜力
该技术框架的核心思想------物理约束 + 贝叶斯推理------具有广泛的迁移潜力:
- 地热能储层改造模拟
- CO₂ 地质封存裂缝路径预测
- 隧道工程岩体稳定性评估
- 材料科学中的相变动力学建模
七、代码工程实践
7.1 工程结构
├── config/makeConfig.m # quick/full 双模式配置
├── src/
│ ├── generateReferenceData.m # 有限差分参考解生成器
│ ├── trainBPINN.m # B-PINN / PINN 训练引擎
│ ├── evaluateBPINN.m # MC Dropout 后验推理
│ ├── plotReproductionFigures.m # SCI 图件导出
│ └── computeMetrics.m # 误差与不确定性指标
├── main.m # 一键复现主入口
├── data/ # 参考解数据
├── results/ # 训练与推理结果
└── figures/ # 输出图件(PNG + PDF)
7.2 使用方式
matlab
% 快速验证(推荐首次运行)
run_reproduction("mode","quick","case","all")
% 完整训练(论文级结果)
run_reproduction("mode","full","case","all")
% 仅单裂缝/双裂缝
run_reproduction("mode","full","case","single")
run_reproduction("mode","full","case","double")
7.3 设计亮点
- 全 MATLAB 原生实现:无需 Python/PyTorch 环境,无跨语言调试成本
- 自动 GPU 识别 :
detectExecutionDevice()自动检测 CUDA 可用性,静默降级无报错 - SCI 级出图:450 DPI 分辨率,Arial 字体,Turbo 色阶,支持 PNG + PDF 矢量双格式
- 三子网解耦架构:梯度独立传播,训练稳定性显著优于单网络多输出方案
八、结语与展望
本文从零到一拆解了一套融合物理约束与贝叶斯推理的相场法水力压裂不确定性量化 MATLAB 工程。代码不仅完整复现了 B-PINN 的算法体系,更在独立设计的有限差分参考解生成器上验证了方法有效性------在不依赖 COMSOL 原始数据的情况下,成功获得了裂缝形态演化、注液压力时程及其 95% 不确定性区间。
展望未来,以下几个方向值得进一步探索:
- 多保真度数据融合:将低精度数值解与高精度实验观测纳入统一的贝叶斯框架
- 哈密顿蒙特卡洛(HMC):替代 MC Dropout 作为后验采样手段,可能进一步提高不确定性估计精度
- 三维扩展:当前框架限定于二维平面,向真实三维裂缝网络推广是工程应用的必然方向
代码已在 MATLAB R2025b + Deep Learning Toolbox 环境下完整验证通过。
------全文完------