Skip to content

Commit e9b0d9a

Browse files
committed
add rfc files
1 parent dd7e265 commit e9b0d9a

File tree

5 files changed

+205
-0
lines changed

5 files changed

+205
-0
lines changed
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
# OSPP2023--飞桨PaddleScience-PDE方程求解模型开发设计文档
2+
| API名称 | 新增API名称 |
3+
| --- | --- |
4+
| 提交作者 | zlynna |
5+
| 提交时间 | 2023-10-12 |
6+
| 版本号 | V1.0 |
7+
| 依赖CINN版本 | PaddlePaddle2.5.0 |
8+
| 文件名 | PINO.md |
9+
# 1. 概述
10+
## 1.1 相关背景
11+
在参考论文中提出了物理信息神经算子(PINO),它利用数据和/或物理约束来学习一组参数化偏微分方程(PDE)的解算子。这种混合方法使PINO能够克服纯粹基于数据和基于物理的方法的限制。例如,基于数据的方法在数据数量和/或质量有限时无法学习,而基于物理的方法无法优化具有挑战性的PDE约束。通过结合数据和PDE约束,PINO克服了所有这些挑战。此外,PINO相对于其他混合学习方法享有的一个独特特性是它能够在不同分辨率下合并数据和PDE约束。这使我们能够将来自数值求解器的低分辨率数据与更高分辨率的PDE约束相结合,而得到的PINO即使在高分辨率的测试实例上也不会失去准确性。PINO的这种离散不变性属性是由神经算子框架引起的,该框架学习了函数空间之间的映射,而无需重新训练即可在不同分辨率下进行评估。此外,PINO在纯粹的物理环境中也取得了成功,即没有可用的数据,而其他方法,如基于物理的神经网络(PINN),由于优化挑战而失败,例如在多尺度动态系统中。这是因为PINO通过在多个实例上优化PDE约束来学习解算子,而PINN则通过优化单个PDE实例的PDE约束。此外,在PINO中,我们还整合了傅立叶神经算子(FNO)架构,它在数值求解器上实现了数量级的加速,并且还能够高效地计算函数空间上的显式梯度。
12+
## 1.2 功能目标
13+
本任务中,作者依据文章[Physics-informed neural operator for learning partial differential equations](https://arxiv.org/abs/2111.03794),完成以下任务:
14+
- 根据论文代码,基于PaddlePaddle复现论文中相关结果,并与参考结果进行比较。
15+
## 1.3 意义
16+
基于PaddlePaddle实现Physics informed neural operator (PINO),拓展PaddlePaddle科学计算模型。
17+
# 2. 飞桨现状
18+
PaddlePaddle目前无相关模型实现。
19+
# 3. 业内方案调研
20+
## 3.1 解决的问题
21+
本项目基于嵌入物理信息的神经算子求解偏微分方程,方程主要以以下形式出现:
22+
$$
23+
P(u,a)=0,\: in \ D \in \mathbf \R^d \\
24+
u=g, \: in \ \partial D
25+
$$
26+
27+
## 3.2 解决的方法
28+
参考模型结构如下:
29+
![模型结构](figs/fig2.png)
30+
首先构建傅里叶卷积层:
31+
```python
32+
class FactorizedSpectralConv(nn.Layer):
33+
def __init__(
34+
self,
35+
in_channels,
36+
out_channels,
37+
n_modes,
38+
n_layers=1,
39+
scale="auto",
40+
separable=False,
41+
fft_norm="backward",
42+
bias=False,
43+
implementation="reconstructed",
44+
joint_factorization=False,
45+
rank=0.5,
46+
factorization="cp",
47+
fixed_rank_modes=False,
48+
decomposition_kwargs=dict(),
49+
):
50+
...
51+
```
52+
对于二维问题来说,构建模型FNO2D:
53+
```python
54+
class FNO2d(nn.Layer):
55+
def __init__(self, modes1, modes2,
56+
width=64, fc_dim=128,
57+
layers=None,
58+
in_dim=3, out_dim=1,
59+
act='gelu',
60+
pad_ratio=[0., 0.]):
61+
super(FNO2d, self).__init__()
62+
63+
...
64+
```
65+
对于物理信息嵌入部分,以burgers方程为例:
66+
```python
67+
def FDM_Burgers(u, v, D=1):
68+
batchsize = u.shape[0]
69+
nt = u.shape[1]
70+
nx = u.shape[2]
71+
72+
u = u.reshape([batchsize, nt, nx])
73+
dt = D / (nt-1)
74+
dx = D / (nx)
75+
76+
u_h = paddle.fft.fft(u, axis=2)
77+
# Wavenumbers in y-direction
78+
k_max = nx//2
79+
k_x = paddle.concat((paddle.arange(start=0, end=k_max, step=1, dtype='float32'),
80+
paddle.arange(start=-k_max, end=0, step=1, dtype='float32')), 0).reshape([1,1,nx])
81+
ux_h = 2j *np.pi*k_x*u_h
82+
uxx_h = 2j *np.pi*k_x*ux_h
83+
ux = paddle.fft.irfft(ux_h[:, :, :k_max+1], axis=2, n=nx)
84+
uxx = paddle.fft.irfft(uxx_h[:, :, :k_max+1], axis=2, n=nx)
85+
ut = (u[:, 2:, :] - u[:, :-2, :]) / (2 * dt)
86+
Du = ut + (ux*u - v*uxx)[:,1:-1,:]
87+
return Du
88+
```
89+
90+
## 3.3 复现目标
91+
![result1](figs/fig1.png)
92+
## 3.4 可能存在的难点
93+
- PaddlePaddle中已有相关Fourier Neural Operator (FNO)实现,使得模型复现过程较为简单。
94+
# 4. 设计思路与实现方案
95+
参考参考[PaddleScience复现指南](https://paddlescience-docs.readthedocs.io/zh/latest/zh/reproduction/#2),复现步骤如图所示:
96+
97+
![复现步骤](https://paddlescience-docs.readthedocs.io/zh/latest/images/overview/reproduction_process.png)
98+
## 4.1 基于PaddlePaddle复现
99+
根据**参考文献:Physics informed neural operator**,基于Paddle API实现该模型的设计思路与实现步骤如下:
100+
1. 导入依赖
101+
2. 导入数据
102+
3. 构造网络模型
103+
5. 定义基于物理信息的损失函数$R$
104+
6. 定义模型的前向传播方法forward
105+
7. 模型训练及推理
106+
8. 实现PINO,进行对比分析
107+
9. 计算误差
108+
109+
110+
完整复现代码见:
111+
[PINO](https://aistudio.baidu.com/projectdetail/6625305)
112+
113+
# 5. 测试和验收的考量
114+
测试与验收参考[PaddleScience模型复现流程及验收标准](https://paddlescience-docs.readthedocs.io/zh/latest/zh/reproduction/)
115+
116+
1. 提供完整的基于Paddle API的复现方法
117+
# 6. 可行性分析和排期规划
118+
119+
## 6.1 可行性分析
120+
121+
- 根据已有项目[FNO论文复现](https://aistudio.baidu.com/projectdetail/6733508?contributionType=1)可以顺利实现PINO中SpectralConv卷积层。
122+
123+
可行
124+
125+
## 6.2 排期规划
126+
127+
- 202308 : 调研
128+
- 202309 :基于Paddle API的复现
129+
- 202310 :整理项目产出,撰写案例文档
88.1 KB
Loading
182 KB
Loading
437 KB
Loading
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# OSPP2023--飞桨PaddleScience-PDE方程求解模型开发设计文档
2+
| API名称 | 新增API名称 |
3+
| --- | --- |
4+
| 提交作者 | zlynna |
5+
| 提交时间 | 2023-10-12 |
6+
| 版本号 | V1.0 |
7+
| 依赖CINN版本 | PaddlePaddle2.5.0 |
8+
| 文件名 | graphGalerin.md |
9+
# 1. 概述
10+
## 1.1 相关背景
11+
尽管物理信息神经网络(PINNs)在解决正向和反向问题方面具有巨大的潜力,但存在一些技术挑战,阻碍了其在更复杂和现实应用中的应用。首先,大多数现有的PINNs基于点对点的表达方式,使用全连接网络来学习连续函数,但这种方法在可扩展性和硬边界实施方面存在问题。其次,无限的搜索空间使网络训练的非凸优化变得过于复杂。第三,尽管基于卷积神经网络(CNN)的离散学习可以显著提高训练效率,但CNN难以处理不规则几何形状和无结构网格。
12+
13+
为了妥善解决这些问题,文章提出了一种基于图卷积网络(GCN)和PDE的变分结构的新型离散PINN框架,以统一的方式解决正向和反向偏微分方程(PDE)。使用分段多项式基可以减小搜索空间的维度,有助于训练和收敛。在不需要调整经典PINNs中的损失函数的情况下,所提出的方法可以严格强制边界条件,并在正向和反向设置中加入稀疏数据。GCN的灵活性用于处理不规则的几何形状和无结构的网格。所提出的方法的有效性和优点在各种由线性和非线性PDEs管理的正向和反向计算力学问题上得到了证明。
14+
## 1.2 功能目标
15+
本任务中,作者依据文章[Physics-informed graph neural Galerkin networks: A unified framework for solving PDE-governed forward and inverse problems](https://www.sciencedirect.com/science/article/pii/S0045782521007076),完成以下任务:
16+
- 根据论文代码,基于PaddlePaddle复现论文中相关结果,并与参考结果进行比较。
17+
## 1.3 意义
18+
基于PaddlePaddle实现物理信息嵌入的图神经网络(GNN)求解偏微分方程(PDE),拓展PaddlePaddle科学计算模型。
19+
# 2. 飞桨现状
20+
PaddlePaddle目前无相关模型实现。
21+
# 3. 业内方案调研
22+
## 3.1 解决的问题
23+
本项目基于嵌入物理信息的图神经网络求解偏微分方程,方程主要以以下形式出现:
24+
$$ \nabla \cdot F(u, \nabla u; \boldsymbol\mu) = S(u, \nabla u; \boldsymbol\mu) \: in \: \Omega $$
25+
边界条件为:
26+
$$ \mathbf\R_u(U_u(\boldsymbol\mu),U_e;\boldsymbol\mu)=0$$
27+
## 3.2 解决的方法
28+
| Algorithm 1 : Solve forward PDE-governed problems via GCN|
29+
| ------|
30+
|Input: PDE parameter $\overline \mu$ , node coordinates $\chi$ and adjacency matrix A|
31+
|Output: The solution $\hat U$|
32+
1. Pre-compute the matrix basis function $\Phi$ on the qudrature points to obtain $\Phi(\widetilde x^v)$, $\Phi(\widetilde x^s)$, $\nabla \Phi(\widetilde x^v)$,$\nabla \Phi(\widetilde x^s)$;
33+
2. Formulate the residual function $R(\widetilde U;\mu)$;
34+
3. Apply the static condensation;
35+
4. Partition the degrees of freedom $\hat U(\Theta)=(\hat U_u(\Theta)^T,\hat {U_e}^T)^T$ and enforce the essential condition, $\hat U_e=U_e$, to formulate the physics-informed loss function;
36+
5. Solve the optimization problem to obtain $\hat U=(\hat U_u(\Theta^*)^T,{U^T}_e)^T$;
37+
## 3.3 复现目标
38+
![result1](figs/fig1.png)
39+
## 3.4 可能存在的难点
40+
- PaddlePaddle中没有torch_geomitric中有关Chebconv图卷积层的相关API实现
41+
# 4. 设计思路与实现方案
42+
参考参考[PaddleScience复现指南](https://paddlescience-docs.readthedocs.io/zh/latest/zh/reproduction/#2),复现步骤如图所示:
43+
44+
![复现步骤](https://paddlescience-docs.readthedocs.io/zh/latest/images/overview/reproduction_process.png)
45+
## 4.1 基于PaddlePaddle复现
46+
根据**参考文献:graphGalerkin**,基于Paddle API实现该模型的设计思路与实现步骤如下:
47+
1. 导入依赖
48+
2. 生成数据
49+
3. 构造网络模型
50+
5. 定义基于物理信息的损失函数$R$
51+
6. 定义模型的前向传播方法forward
52+
7. 模型训练及推理
53+
8. 实现graphGalerkin,进行对比分析
54+
9. 绘制结果
55+
56+
57+
完整复现代码见:
58+
[graphGalerkin](https://aistudio.baidu.com/projectdetail/6625305)
59+
60+
# 5. 测试和验收的考量
61+
测试与验收参考[PaddleScience模型复现流程及验收标准](https://paddlescience-docs.readthedocs.io/zh/latest/zh/reproduction/)
62+
63+
1. 提供完整的基于Paddle API的复现方法
64+
# 6. 可行性分析和排期规划
65+
66+
## 6.1 可行性分析
67+
68+
- 根据torch_geomitric中有关Chebconv图卷积层的相关API实现转换为Paddle API以实现原始论文模型结构。
69+
70+
可行
71+
72+
## 6.2 排期规划
73+
74+
- 202307 : 调研
75+
- 202308 :基于Paddle API的复现
76+
- 202309 :整理项目产出,撰写案例文档

0 commit comments

Comments
 (0)