forked from PaddlePaddle/community
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
【Hackathon 5th No.56】A Physics-Informed Neural Network to solve 2D st…
…eady-state heat equation (PaddlePaddle#692) * Add Hackathon 5th Science 56 RFC * 1. Fix $T$ display * Add punctuation after each equation
- Loading branch information
1 parent
89ff813
commit 0e21200
Showing
1 changed file
with
168 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,168 @@ | ||
# Science 56 设计文档 | ||
|
||
| API 名称 | 新增 API 名称 | | ||
| ---------------------------------------------------------------- | ---------------------- | | ||
| 提交作者<input type="checkbox" class="rowselector hidden"> | Gxinhu | | ||
| 提交时间<input type="checkbox" class="rowselector hidden"> | 2023-10-09 | | ||
| 版本号 | V1.0 | | ||
| 依赖 CINN 版本<input type="checkbox" class="rowselector hidden"> | PaddlePaddle 2.5.0 | | ||
| 文件名 | 20231009_science_56.md | | ||
|
||
# 1. 概述 | ||
|
||
## 1.1 相关背景 | ||
|
||
热传导是自然界中的常见现象,广泛应用于工程、科学和技术领域。了解和模拟传热过程对于设计和优化热传导设备、材料和系统至关重要。2D 定常传热方程描述了稳态热传导过程,其数学表达形式为: | ||
|
||
$$ | ||
\frac{\partial^2 T}{\partial x^2} + \frac{\partial^2 T}{\partial y^2}=0, | ||
$$ | ||
|
||
其中, $T$ 表示温度分布,传统的求解方法涉及使用数值方法如有限元法或有限差分法,这些方法通常需要离散化领域并求解大规模矩阵系统。近年来,基于物理信息的神经网络(Physics-informed neural networks, PINN)逐渐成为求解偏微分方程的新方法。PINN 结合了神经网络的灵活性和对物理约束的建模能力,能够直接在连续领域中解决偏微分方程问题。 | ||
|
||
## 1.2 功能目标 | ||
|
||
基于 PaddleScience API 复现 [Heat-PINN](https://github.com/314arhaam/heat-pinn/tree/main) | ||
|
||
## 1.3 意义 | ||
|
||
本文档的目标是介绍基于物理信息的神经网络(PINN)以及如何将其应用于求解 2D 定常传热方程。我们将探讨神经网络的架构设计、损失函数的构建、数据准备和模型训练等关键步骤,以及如何在求解传热方程过程中保持与复现项目的一致性。 | ||
|
||
# 2. PaddleScience 现状 | ||
|
||
由于 Heat-PINN 里面的传热方程就是 2D-Laplace 方程,恰好 PaddleScience API 也已经实现了 [2D-Laplace 方程](https://github.com/PaddlePaddle/PaddleScience/blob/develop/examples/laplace/laplace2d.py),因此可以直接调用。 | ||
|
||
复现算法使用的模型 MLP 在 PaddleScience 也有现成的例子可以直接调用。 | ||
|
||
# 3. 目标调研 | ||
|
||
## 3.1 要解决的问题和使用的方法 | ||
|
||
在参考项目中,使用基于物理信息的神经网络(PINN)来解决二维热传导方程,并将最终结果与基于有限差分法(FDM)的解进行比较。 | ||
|
||
控制方程为: | ||
|
||
$$ | ||
\frac{\partial^2 T}{\partial x^2} + \frac{\partial^2 T}{\partial y^2}=0, | ||
$$ | ||
|
||
在以下区域内: | ||
|
||
$$ | ||
D = \\{(x, y)|-1 \leq x \leq +1,-1 \leq y \leq +1 \\}, | ||
$$ | ||
|
||
具有以下边界条件: | ||
|
||
$$ | ||
\begin{cases} | ||
T(-1, y) = 75.0 ^\circ{C}, \\ | ||
T(+1, y) = 0.0 ^\circ{C}, \\ | ||
T(x, -1) = 50.0 ^\circ{C},\\ | ||
T(x, +1) = 0.0 ^\circ{C}. | ||
\end{cases} | ||
$$ | ||
|
||
## 3.2 复现目标 | ||
|
||
1. 对齐 train loss | ||
2. 对齐 PINN 预测的结果与 FDM 求出来的结果误差 | ||
|
||
# 4. 设计思路与实现方案 | ||
|
||
以下是一个可能的实现步骤: | ||
|
||
## 4.1 定义 PDE 约束 | ||
|
||
首先,需要明确定义需要求解的 2D 定常传热方程,幸运的是 PaddleScience 存在相关的 2D Laplace 方程,因此直接调用即可: | ||
|
||
```python | ||
# set equation | ||
equation = {"heat": ppsci.equation.Laplace(dim=2)} | ||
|
||
# set geometry | ||
geom = {"rect": ppsci.geometry.Rectangle((-1.0, -1.0), (1.0, 1.0))} | ||
|
||
# set train dataloader config | ||
train_dataloader_cfg = { | ||
"dataset": "IterableNamedArrayDataset", | ||
"iters_per_epoch": ITERS_PER_EPOCH, | ||
} | ||
|
||
NPOINT_PDE = 99**2 | ||
# set constraint | ||
pde_constraint = ppsci.constraint.InteriorConstraint( | ||
equation["heat"].equations, | ||
{"laplace": 0}, | ||
geom["rect"], | ||
{**train_dataloader_cfg, "batch_size": NPOINT_PDE}, | ||
ppsci.loss.MSELoss("mean"), | ||
weight_dict={ | ||
"laplace": 1, | ||
}, | ||
evenly=True, | ||
name="EQ", | ||
) | ||
``` | ||
|
||
## 4.2 构建边界条件约束 | ||
|
||
根据参考项目所示,边界条件为 Dirichlet 边界条件,即边界条件为固定的值。可以参考 PaddleScience 其他相关项目 [ldc2d_steady_Re10.py](https://paddlescience-docs.readthedocs.io/zh/latest/zh/examples/ldc2d_unsteady/?h=ldc) 来构建边界条件约束。 | ||
|
||
```python | ||
bc_top = ppsci.constraint.BoundaryConstraint( | ||
{"u": lambda out: out["u"]}, | ||
{"u": 0}, | ||
geom["rect"], | ||
{**train_dataloader_cfg, "batch_size": NPOINT_TOP}, | ||
ppsci.loss.MSELoss("mean"), | ||
weight_dict={ | ||
"u": 0.25, | ||
}, | ||
criteria=lambda x, y: np.isclose(y, 1), | ||
name="BC_top", | ||
) | ||
|
||
# Other boundary constraints (bc_bottom, bc_left, bc_right) follow a similar structure. | ||
``` | ||
|
||
## 4.3 构建神经网络模型 | ||
|
||
构建一个神经网络模型,该模型可以表示温度分布 $T$ 。模型的输入是 2D 空间中的坐标 $(x,y)$,输出是对应点的温度 $T$。 | ||
|
||
神经网络的架构可以根据具体问题进行设计,通常包括多层感知机。参考项目使用的为9层、隐藏层维度为20的多层感知机网络模型。将上面的描述转化为 PaddleScience 代码为: | ||
|
||
```python | ||
model = ppsci.arch.MLP(("x", "y"), ("T",), 9, 20, "tanh") | ||
``` | ||
|
||
## 4.4 训练模型 | ||
|
||
使用优化算法(如梯度下降或 Adam)来最小化损失函数,以训练神经网络模型。 | ||
|
||
## 4.5 评估模型 | ||
|
||
在训练完成后,与 FDM 求解的结果进行对比。 | ||
|
||
# 5. 测试和验收的考量 | ||
|
||
测试与验收参考 [PaddleScience 模型复现流程及验收标准](https://paddlescience-docs.readthedocs.io/zh/latest/zh/reproduction/)。 | ||
|
||
1. 提供完整的基于 PaddleScience 的复现代码。 | ||
2. 提供复现完成后需提供必要的训练产物,包括训练结束后保存的打印信息日志文件、`.pdparams` 格式的模型权重参数文件、撰写的案例文档。 | ||
|
||
# 6. 可行性分析和排期规划 | ||
|
||
## 6.1 可行性分析 | ||
|
||
参考项目的难度较小,能够有效准时完成项目。 | ||
|
||
## 6.2 排期规划 | ||
|
||
- 202309:调研 | ||
- 202310:完成基于 PaddleScience 的复现 | ||
- 202310:整理项目产出,撰写案例文档 | ||
|
||
# 7. 影响面 | ||
|
||
对其他部分毫无影响。 |