Beberapa waktu lalu, saya tertarik untuk mendalami Physics-Informed Neural Networks (PINN), sebuah metode pembelajaran mesin yang mengintegrasikan hukum-hukum fisika ke dalam jaringan saraf tiruan. Sebagai seorang mahasiswa teknik mesin yang sedang mempelajari metode numerik dan Computational Fluid Dynamics (CFD), saya melihat potensi besar dalam penerapan PINN untuk memodelkan fenomena fisika, khususnya dalam kasus konduksi panas satu dimensi (1D).โ
Dalam upaya memahami dan memprediksi distribusi suhu sepanjang batang, saya memutuskan untuk menerapkan PINN. Metode ini memungkinkan kita untuk menyelesaikan PDE dengan menggabungkan pengetahuan fisika langsung ke dalam struktur jaringan saraf tiruan, sehingga tidak hanya bergantung pada data eksperimen semata.
Untuk memastikan pendekatan yang terstruktur dalam memahami dan menerapkan PINN, saya menggunakan kerangka kerja DAI5, yang dikembangkan oleh Dr. Ahmad Indra. Kerangka kerja ini terdiri dari lima langkah utama yang membantu dalam pemecahan masalah secara sadar:โ
Deep Awareness of I (Kesadaran Mendalam tentang Diri): Saya mulai dengan merefleksikan pemahaman pribadi saya tentang konduksi panas dan metode numerik yang telah saya pelajari sebelumnya. Kesadaran ini membantu saya mengidentifikasi area di mana saya perlu memperdalam pengetahuan sebelum melangkah lebih jauh.โ
Intention (Niat): Tujuan saya adalah menerapkan PINN untuk memodelkan konduksi panas 1D, dengan harapan metode ini dapat memberikan solusi yang lebih efisien dibandingkan metode numerik tradisional.โ
Initial-Thinking (Pemikiran Awal): Saya mengumpulkan informasi tentang PINN, termasuk prinsip dasar, keunggulan, dan tantangan dalam penerapannya. Selain itu, saya mempelajari persamaan diferensial parsial yang mendasari konduksi panas 1D.โ
Idealization (Idealiasi): Saya membayangkan bagaimana PINN dapat diterapkan dalam kasus konduksi panas 1D, mempertimbangkan faktor-faktor seperti desain arsitektur jaringan saraf, integrasi hukum fisika ke dalam fungsi loss, dan metode pelatihan yang sesuai.โ
Instruction-Set (Set Instruksi): Saya menyusun rencana langkah demi langkah untuk menerapkan PINN, termasuk:โ
1. Merancang PINN
- Gunakan Multi-Layer Perceptron (MLP) yang terdiri dari beberapa lapisan tersembunyi.
- Input model adalah koordinat x, dan outputnya adalah prediksi suhu T(x)
- Fungsi aktivasi yang digunakan adalah tanh, karena dapat menangani fungsi kontinu dengan baik.
2. Menentukan Fungsi Loss
Total loss (kesalahan) dalam model ini terdiri dari dua bagian utama:
- Physics Loss
- Physics loss mengukur sejauh mana prediksi model mengikuti hukum fisika, yaitu persamaan diferensial perpindahan panas steady-state: d2T/dx2=0
- Boundary Loss
- Boundary loss memastikan bahwa suhu yang diprediksi oleh PINN memenuhi kondisi batas yang telah ditentukan, misalnya: T(0)=100,T(1)=0
3. Melatih Model
- Gunakan Adam optimizer untuk memperbarui bobot jaringan saraf, lalu gunakan L-BFGS optimizer untuk mencapai hasil yang lebih optimal.
- Gunakan metode Latin Hypercube Sampling (LHS) untuk memilih titik training agar lebih efektif.
4. Mengevaluasi Model
Uji model dengan berbagai kondisi batas dan material yang berbeda untuk mengetahui apakah model bekerja dengan baik dalam berbagai skenario.
Bandingkan hasil PINN dengan solusi numerik (misalnya metode FEM atau FDM) untuk melihat akurasi model.
Setelah itu saya akan menjadikan instruksi tersebut dalam betuk koding untuk divisualisasikan agar kita menjadi lebih mudah untuk memahaminya.
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import matplotlib.pyplot as plt
# Set seed untuk reproducibility
torch.manual_seed(42)
np.random.seed(42)
# Fungsi untuk Sampling Latin Hypercube
def latin_hypercube_sampling(n, dim):
return np.random.rand(n, dim)
# Definisi Model Neural Network untuk PINN
class PINN(nn.Module):
def __init__(self):
super(PINN, self).__init__()
self.hidden_layers = nn.Sequential(
nn.Linear(1, 20), nn.Tanh(),
nn.Linear(20, 20), nn.Tanh(),
nn.Linear(20, 20), nn.Tanh(),
nn.Linear(20, 1)
)
def forward(self, x):
return self.hidden_layers(x)
# Fungsi Loss: Physics-Informed + Boundary Conditions
def pinn_loss(model, x):
x.requires_grad = True
T_pred = model(x) # Prediksi suhu T(x)
# Hitung turunan pertama dT/dx
dTdx = torch.autograd.grad(T_pred, x, torch.ones_like(T_pred), create_graph=True)[0]
# Hitung turunan kedua dยฒT/dxยฒ
d2Tdx2 = torch.autograd.grad(dTdx, x, torch.ones_like(dTdx), create_graph=True)[0]
# Physics loss: dยฒT/dxยฒ = 0
loss_pde = torch.mean(d2Tdx2**2)
# Boundary loss: T(0) = 100, T(1) = 0
loss_bc = (model(torch.tensor([[0.0]])) - 100)**2 + (model(torch.tensor([[1.0]])) - 0)**2
return loss_pde + loss_bc
# Inisialisasi Model
model = PINN()
# Optimizer pertama: Adam untuk update awal
adam_optimizer = optim.Adam(model.parameters(), lr=0.01)
# Optimizer kedua: L-BFGS untuk konvergensi yang lebih baik
lbfgs_optimizer = optim.LBFGS(model.parameters(), history_size=50, max_iter=500)
# Data training menggunakan Latin Hypercube Sampling
x_train = torch.tensor(latin_hypercube_sampling(100, 1), dtype=torch.float32)
# Training dengan Adam
epochs = 5000
loss_history = []
for epoch in range(epochs):
adam_optimizer.zero_grad()
loss = pinn_loss(model, x_train)
loss.backward()
adam_optimizer.step()
# Simpan loss
loss_history.append(loss.item())
# Print setiap 500 epoch
if epoch % 500 == 0:
print(f"Epoch {epoch}, Loss: {loss.item()}")
# Training dengan L-BFGS
def closure():
lbfgs_optimizer.zero_grad()
loss = pinn_loss(model, x_train)
loss.backward()
return loss
lbfgs_optimizer.step(closure)
# Plot Hasil
x_test = torch.linspace(0, 1, 100).view(-1, 1)
T_pred = model(x_test).detach().numpy()
# Solusi analitik: T(x) = 100 - 100x
T_exact = 100 * (1 - x_test.numpy())
plt.figure(figsize=(8,4))
plt.plot(x_test.numpy(), T_pred, label="PINN Solution", color="blue")
plt.plot(x_test.numpy(), T_exact, "--", label="Analytical Solution", color="orange")
plt.xlabel("x")
plt.ylabel("Temperature")
plt.title("1D Steady-State Heat Conduction")
plt.legend()
plt.grid(True)
plt.show()
berikut adalah hasilnya
epoch 1000

epoch 3000

epoch 8000

epoch 10000

Pada 1000 epoch, solusi yang dihasilkan oleh PINN masih memiliki perbedaan yang cukup jelas dibandingkan solusi analitik.
Pada 3000 epoch, hasil prediksi mulai lebih mendekati bentuk garis lurus yang sesuai dengan solusi analitik.
Pada 8000 epoch, prediksi hampir sepenuhnya sesuai dengan persamaan analitik
Pada 10.000 epoch, solusi PINN sudah sangat mirip dengan solusi analitik, menunjukkan bahwa model telah berhasil menangkap pola fisis yang berlaku.
Hal ini membuktikan bahwa kombinasi pembelajaran berbasis data dan hukum fisika memungkinkan jaringan saraf untuk memahami dan merepresentasikan keteraturan alam secara lebih baik seiring dengan proses pelatihan.
Kesimpulan
Physics-Informed Neural Networks (PINNs) adalah metode deep learning yang mengintegrasikan data eksperimen dan prinsip fisika untuk menyelesaikan persamaan diferensial secara lebih efisien, tanpa memerlukan proses meshing seperti metode numerik tradisional. Dalam kasus konduksi panas 1D, PINN tetap mengikuti Hukum Fourier dan Kesetimbangan Energi, serta dapat diterapkan pada simulasi kompleks seperti dinamika fluida dan mekanika kuantum. Lebih dari sekadar inovasi teknologi, metode ini mencerminkan harmoni antara ilmu pengetahuan dan keteraturan alam semesta, mengajarkan kita tentang keterbatasan manusia, pentingnya berbagi manfaat, serta bagaimana ilmu dan spiritualitas dapat berjalan beriringan dalam memahami kebesaran ciptaan Allah SWT.