| __pycache__ | ||
| .DS_Store | ||
| deepritz1d_test.ipynb | ||
| deepritz_1d.py | ||
| deepritz_2d.py | ||
| deepritz_2d_test.ipynb | ||
| err_for1d_test.ipynb | ||
| readme.md | ||
| requirements.txt | ||
⚛️ Deep Ritz Methode (DRM) Implementierung
Dieses Projekt implementiert die Deep Ritz Methode (DRM), einen Deep-Learning-basierten numerischen Algorithmus zur Lösung von Variationsproblemen, die aus partiellen Differentialgleichungen (PDGs) entstehen (E & Yu, 2018).
Das Repository enthält PyTorch-Implementierungen zur Lösung der Poissongleichung (\mathbf{-\Delta u = f}) mit homogenen Dirichlet-Randbedingungen in 1D und 2D. Der Kern der Methode ist das Training eines Neuronalen Netzes u_{\Theta}, um das zugehörige Ritz-Energie-Funktional \mathcal{R}(u) zu minimieren.
🧠 Mathematisches Prinzip (Kurzfassung)
Die DRM approximiert die Lösung u der PDG durch ein Neuronales Netz $u_{\Theta}$ (mit Parametern \Theta). Das Netz wird so trainiert, dass es das zugehörige Ritz-Energie-Funktional \mathcal{R}(u) minimiert.
1. Penalisiertes Energie-Funktional (Verlustfunktion)
Das Funktional wird um einen Boundary Penalty (Randstrafe)-Term ergänzt, um die Dirichlet-Randbedingungen (u|_{\partial\Omega}=0) durchzusetzen:
\mathcal{R}_{\delta}(u_{\Theta}) = \underbrace{\frac{1}{2} \int_{\Omega} |\nabla u_{\Theta}|^{2}\,dx - \int_{\Omega} f u_{\Theta}\,dx}_{\text{Ritz-Funktional (Innenintegral)}} + \underbrace{\frac{1}{2\delta} \int_{\partial\Omega} (\gamma u_{\Theta})^{2}\,ds}_{\text{Randstrafe (Randintegral)}}
2. Monte-Carlo Diskretisierung & Training
Die Integrale werden mittels Monte-Carlo-Quadratur über zufällig gezogene Innenpunkte x_{i}^{\Omega} und Randpunkte x_{j}^{\partial\Omega} approximiert (\widehat{\mathcal{R}}_{\delta}(\Theta)).
Das Training erfolgt durch Minimierung dieses diskretisierten Funktionals \widehat{\mathcal{R}}_{\delta}(\Theta) mittels Stochastic Gradient Descent (SGD) / Adam:
\Theta^{(k+1)} = \Theta^{(k)} - \eta\,\nabla_{\!\Theta}\widehat{\mathcal{R}}_{\delta}\bigl(\Theta^{(k)}\bigr)
⚙️ Projektstruktur und Nutzung
Das Projekt ist modular aufgebaut und ermöglicht die einfache Ausführung der 1D- und 2D-Löser. Die Jupyter Notebooks dienen zur Durchführung von Testläufen, Visualisierung und Experimenten.
Dateistruktur
deepritz/
├── deepritz\_1d.py \# Implementierung der DRM für das 1D-Poisson-Problem
├── deepritz\_2d.py \# Implementierung der DRM für das 2D-Poisson-Problem
├── deepritz\_1d.ipynb \# Jupyter Notebook für 1D-Testläufe und Analysen
├── deepritz\_2d.ipynb \# Jupyter Notebook für 2D-Testläufe und Analysen
├── requirements.txt \# Erforderliche Python-Pakete (z.B. PyTorch, NumPy)
├── .env \# Umgebungsvariablen (optional, z.B. für Konfigurationen)
└── readme.md \# Diese Dokumentation
Installation und Ausführung
-
Virtuelle Umgebung: Es wird empfohlen, eine virtuelle Umgebung (
venv) zu verwenden, um die Abhängigkeiten zu isolieren.python -m venv .venv source .venv/bin/activate # Unter Windows: .venv\Scripts\activate -
Abhängigkeiten: Installieren Sie die erforderlichen Pakete aus der
requirements.txtDatei.pip install -r requirements.txt -
Konfiguration: Falls erforderlich, kann die
.envDatei Umgebungsvariablen für die Ausführung definieren (z.B. Pfade, Hyperparameter). -
Testläufe und Experimente: Führen Sie die Experimente direkt in den Jupyter Notebooks aus:
deepritz_1d.ipynbdeepritz_2d.ipynb
🛠️ Implementierung
Die Lösungen verwenden eine 4-Block-MLP-Architektur (Multi-Layer Perceptron), die die skalare Lösung u(x) oder u(x,y) approximiert.
| Datei | Problem | Domain/RHS | Randbedingungen (RB) | Netzwerk |
|---|---|---|---|---|
deepritz_1d.py |
1D Poisson | \Omega=[0,\pi], f(x)=1 |
Shape Function (xpix, sin) oder Penalty (delta) |
FourBlock1D |
deepritz_2d.py |
2D Poisson | \Omega=[-1,1]^2 |
Penalty (delta) |
FourBlock2D |
Pseudocode (Deep-Ritz-Methode, klassisch)
# ALGORITHMUS: Deep-Ritz-Methode
# Eingabe: u_Theta (Netzwerk), f (RHS), delta (Penalty), K (Iterationen)
initialisiere_parameter(Theta)
FOR k = 0 TO K-1:
# 1. Sampling (Innen- und Randpunkte werden in jedem Schritt neu gezogen)
X_interior = sample_interior(N)
X_boundary = sample_boundary(M)
# 2. Verlustberechnung (Monte-Carlo-Approximation des Funktionals)
Loss = deep_ritz_energy(u_Theta, X_interior, X_boundary, f, delta)
# 3. Optimierungsschritt
optimizer.zero_grad()
Loss.backward() # Gradienten g = ∇_Theta(Loss) mittels Autograd
optimizer.step() # Theta(k+1) = Theta(k) - eta * g
RETURN Theta_K
📉 Fehleranalyse
Der Gesamtfehler \Vert u-u_{\mathcal N}\Vert_\delta der Methode setzt sich formal aus vier Komponenten zusammen:
\Vert u-u_{\mathcal N}\Vert_\delta \le \underbrace{\Vert u-u_\delta\Vert_\delta}_{\text{1. Randfehler}} + \underbrace{\Vert u_\delta - u_{\mathcal N,\mathrm{ex}}\Vert_\delta}_{\text{2. Approximationsfehler}} + \underbrace{\Vert u_{\mathcal N,\mathrm{ex}} - u_{\mathcal N,\mathrm{mc}}\Vert_\delta}_{\text{3. Diskretisierungsfehler}} + \underbrace{\Vert u_{\mathcal N,\mathrm{mc}} - u_{\mathcal N}\Vert_\delta}_{\text{4. Optimierungsfehler}}
| Fehlerbeitrag | Ursache | Theoretische Rate | Status |
|---|---|---|---|
| 1. Randfehler | Abweichung von exakter RB-Lösung aufgrund des Penalty-Parameters \delta. |
Konvergiert mit \delta \to 0. |
kontrolliert |
| 2. Approximationsfehler | Unfähigkeit des NN-Raums V_{\mathcal N} die Lösung exakt abzubilden. |
\mathcal{O}(\frac{\sqrt{\log N}}{\sqrt{N}}) für ReLU-Netze. |
kontrolliert |
| 3. Diskretisierungsfehler | Fehler durch Monte-Carlo-Quadratur (N, M Samples). |
\mathcal O(\min\{N,M\}^{-1/2}). |
kontrolliert |
| 4. Optimierungsfehler | Stagnation oder Nicht-Konvergenz des nicht-konvexen SGD/Adam-Trainingsprozesses. | Nicht a priori kontrolliert. | ❗ kritisch |
📚 Quelle
@Article{EYu2018DeepRitz,
author={E, Weinan and Yu, Bing},
title={The Deep Ritz Method: A Deep Learning-Based Numerical Algorithm for Solving Variational Problems},
journal={Communications in Mathematics and Statistics},
year={2018},
volume={6},
number={1},
pages={1-12},
doi={10.1007/s40304-018-0127-z}
}