diff --git a/hackathon/hackathon_5th/20231009_science_56.md b/hackathon/hackathon_5th/20231009_science_56.md new file mode 100644 index 000000000..706474b7d --- /dev/null +++ b/hackathon/hackathon_5th/20231009_science_56.md @@ -0,0 +1,168 @@ +# Science 56 设计文档 + +| API 名称 | 新增 API 名称 | +| ---------------------------------------------------------------- | ---------------------- | +| 提交作者 | Gxinhu | +| 提交时间 | 2023-10-09 | +| 版本号 | V1.0 | +| 依赖 CINN 版本 | 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. 影响面 + +对其他部分毫无影响。