Assalaamu’alaikum wa rahmatullahi wa barakaatuh, perkenalkan saya Rafi Evansyah (2306238776), Pada kesempatan kali ini, saya akan membahas tentang konsep PINN atau Physical-Informed Neural Network. PINN adalah sebuah konsep yang menggabungkan pembelajaran mesin yang menggabungkan pendekatan atau fungsi fisika dengan jaringan saraf tiruan atau NN. PINN digunakan untuk melibatkan PDE atau ODE.
Konsep Dasar
- Jaringan Saraf digunakan untuk memodelkan solusi dari suatu sistem fisik yang menggunakan input koordinat X,Y,Z dengan waktu (t).
- Fungsi PINN dalam bentuk diferensial atau data.
- Fungsi Loss diperoleh dari selisih antara prediksi jaringan dan persamaan fisika.
Keunggulan
- Tidak butuh terlalu banyak data
- Digunakan untuk banyak permasalahan (ODE/PDE).
- Akurat dibanding simulasi fisika.
Sebelum memahami konsep tersebut, kita perlu meng-korelasikan konsep diatas kedalam framework DAI5.
- Deep Awareness of I : Kita menyadari bahwa konsep diatas mempunyai banyak keunggulan yang perlu kita pahami.
- Intention : Dengan kesadaran diatas, kita menyadari adanya keperluan untuk mempelajari konsep PINN. Selanjutnya kita meniatkan pembelajaran ini untuk mengerjakan Heat Conduction 1 Dimension menggunakan konsep PINN tersebut. Saya berniat juga menerapkan menyelesaikan masalah diatas dengan lebih efisien, akurat, dan memungkinkan saya untuk menyelesaikan permasalahan lain dengan konsep PINN tersebut.
- Initial Thinking : Setelah sadar akan tujuan dan niat saya, kita perlu menemukan bagaimana cara menyelesaikan HC 1D dengan PINN. Disitulah ketika saya menemukan rumus dasarn HC 1D :

Dengan rumus diatas, dapat kita aplikasikan ke konsep PINN, dan inilah inisiasi kita
4. Idealization : Untuk konsep PINN sendiri, saya mencari tahu bahwa konsep ini memadukan antara konsep fisika dengan jaringan saraf buatan. Konsep PINN sendiri banyak digunakan untuk permasalahan ODE ataupun PDE. Konsep PINN sendiri dapat digunakan salah satunya dalam permasalahan CFD dan itulah yang sedang saya kerjakan.
5. Instruction Set : Untuk memulai perjalanan diatas, kita tentunya memerlukan set untuk mengetahui apa yang ingin kita kerjakan dan cara mencapainya. Namun, sebelumnya kita perlu untuk berdoa kepada Allah SWT untuk diberi kemudahan dalam pengerjaan. Setelah itu baru kemudian kita membuat instruction set yang kurang lebih terdiri dari :
- Definisi domain dan kondisi batas
- Membangun model neural network
- Definisi physics – informed loss function
- Optimizer
- Visualisasi
Langsung saja kita mulai pengerjaan.
- Pembuatan Domain dan kondisi batas : Kita Perlu untuk membuat grif x dan t dalam rentang 0 – 1. Kita juga perlu untuk membuat kondisi awal T(x,0) = sin (phiX), kita tentukan nilai suhu setiap titik awal. Untuk kondisi batas, kita tetapkan T (0,t) = 0 dan T(1,t) = 0 di semua waktu.
- Berikut Kode phyton nya :
import numpy as np
Parameter domain
N_x = 50 # Jumlah titik ruang
N_t = 50 # Jumlah titik waktu
x = np.linspace(0, 1, N_x)
t = np.linspace(0, 1, N_t)
X, T = np.meshgrid(x, t) # Meshgrid untuk titik (x,t)
XT_train = np.hstack((X.flatten()[:, None], T.flatten()[:, None]))
Kondisi awal: T(x,0) = sin(pi*x)
T_initial = np.sin(np.pi * x)
XT_initial = np.hstack((x[:, None], np.zeros_like(x[:, None])))
Kondisi batas: T(0,t) = T(1,t) = 0
XT_bc = np.vstack((np.hstack((np.zeros_like(t[:, None]), t[:, None])),
np.hstack((np.ones_like(t[:, None]), t[:, None]))))
T_bc = np.zeros((XT_bc.shape[0], 1))
- Membangun Model Neural Network
Membuat jaringan saraf dengan beberapa hidden layer, dengan input : x,t dan output : T(x,t). Kita gunakan 3 hidden layer. Berikut kode nya :
import tensorflow as tf
class PINN(tf.keras.Model):
def init(self):
super(PINN, self).init()
self.hidden1 = tf.keras.layers.Dense(20, activation=’tanh’)
self.hidden2 = tf.keras.layers.Dense(20, activation=’tanh’)
self.hidden3 = tf.keras.layers.Dense(20, activation=’tanh’)
self.output_layer = tf.keras.layers.Dense(1, activation=None)
def call(self, inputs):
x = self.hidden1(inputs)
x = self.hidden2(x)
x = self.hidden3(x)
return self.output_layer(x)
Inisialisasi model
pinn = PINN()
- Definisi Physics-Informed Loss Function
Menghitung turunan terhadap x,t,dan x kuadrat. Setelah itu kita hitung residual loss dari pesamaan konduksi panas dan kita tambahkan loss kondisi awal dan batas.
Berikut kode phyton nya:
alpha = 0.01 # Difusivitas termal
def compute_loss():
with tf.GradientTape(persistent=True) as tape:
tape.watch(XT_train)
T_pred = pinn(XT_train)
T_x_t = tape.gradient(T_pred, XT_train) # โT/โx dan โT/โt
T_x = T_x_t[:, 0:1] # โT/โx
T_t = T_x_t[:, 1:2] # โT/โt
T_xx = tape.gradient(T_x, XT_train)[:, 0:1] # โยฒT/โxยฒ
residual = T_t - alpha * T_xx # Persamaan konduksi panas
loss_pde = tf.reduce_mean(tf.square(residual))
# Loss kondisi awal
T_pred_initial = pinn(XT_initial)
loss_ic = tf.reduce_mean(tf.square(T_pred_initial - T_initial[:, None]))
# Loss kondisi batas
T_pred_bc = pinn(XT_bc)
loss_bc = tf.reduce_mean(tf.square(T_pred_bc - T_bc))
total_loss = loss_pde + loss_ic + loss_bc
return total_loss
- Optimizer : Kita gunakan untuk meminimalisir fungsi loss
- Visualisasi : Kita buatkan prediksi suhu T (x,t) menggunakan model dan kita gunakan kontur plot untuk melihat hasil dengan kode :
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
Set parameter fisika
alpha = 0.01 # Difusivitas termal
Generate data latih (collocation points)
N_x = 50 # Jumlah titik ruang
N_t = 50 # Jumlah titik waktu
x = np.linspace(0, 1, N_x)
t = np.linspace(0, 1, N_t)
X, T = np.meshgrid(x, t)
Konversi ke Tensor
XT_train = tf.convert_to_tensor(np.hstack((X.flatten()[:, None], T.flatten()[:, None])), dtype=tf.float32)
Kondisi awal: T(x,0) = sin(pi*x)
T_initial = np.sin(np.pi * x)
XT_initial = tf.convert_to_tensor(np.hstack((x[:, None], np.zeros_like(x[:, None]))), dtype=tf.float32)
T_initial = tf.convert_to_tensor(T_initial[:, None], dtype=tf.float32)
Kondisi batas: T(0,t) = T(1,t) = 0
XT_bc = np.vstack((np.hstack((np.zeros_like(t[:, None]), t[:, None])),
np.hstack((np.ones_like(t[:, None]), t[:, None]))))
XT_bc = tf.convert_to_tensor(XT_bc, dtype=tf.float32)
T_bc = tf.convert_to_tensor(np.zeros((XT_bc.shape[0], 1)), dtype=tf.float32)
Model PINN
class PINN(tf.keras.Model):
def init(self):
super(PINN, self).init()
self.hidden1 = tf.keras.layers.Dense(20, activation=’tanh’)
self.hidden2 = tf.keras.layers.Dense(20, activation=’tanh’)
self.hidden3 = tf.keras.layers.Dense(20, activation=’tanh’)
self.output_layer = tf.keras.layers.Dense(1, activation=None)
def call(self, inputs):
x = self.hidden1(inputs)
x = self.hidden2(x)
x = self.hidden3(x)
return self.output_layer(x)
Inisialisasi model
pinn = PINN()
optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
Fungsi loss
def compute_loss():
with tf.GradientTape(persistent=True) as tape:
tape.watch(XT_train)
T_pred = pinn(XT_train)
T_x_t = tape.gradient(T_pred, XT_train) # โT/โx dan โT/โt
T_x = T_x_t[:, 0:1] # โT/โx
T_t = T_x_t[:, 1:2] # โT/โt
T_xx = tape.gradient(T_x, XT_train)[:, 0:1] # โยฒT/โxยฒ
residual = T_t - alpha * T_xx # Persamaan konduksi panas
loss_pde = tf.reduce_mean(tf.square(residual))
# Loss kondisi awal
T_pred_initial = pinn(XT_initial)
loss_ic = tf.reduce_mean(tf.square(T_pred_initial - T_initial))
# Loss kondisi batas
T_pred_bc = pinn(XT_bc)
loss_bc = tf.reduce_mean(tf.square(T_pred_bc - T_bc))
total_loss = loss_pde + loss_ic + loss_bc
return total_loss
Training loop
def train_pinn(epochs=500):
for epoch in range(epochs):
with tf.GradientTape() as tape:
loss = compute_loss()
gradients = tape.gradient(loss, pinn.trainable_variables)
optimizer.apply_gradients(zip(gradients, pinn.trainable_variables))
if epoch % 100 == 0:
print(f"Epoch {epoch}: Loss = {loss.numpy()}")
Latih model
train_pinn()
Prediksi hasil
XT_test = tf.convert_to_tensor(np.hstack((X.flatten()[:, None], T.flatten()[:, None])), dtype=tf.float32)
T_pred = pinn(XT_test).numpy().reshape(X.shape)
Plot hasil
plt.figure(figsize=(8, 6))
plt.contourf(X, T, T_pred, levels=50, cmap=”jet”)
plt.colorbar(label=”Temperature T(x,t)”)
plt.xlabel(“x”)
plt.ylabel(“t”)
plt.title(“Hasil Simulasi Konduksi Panas 1D dengan PINN”)
plt.show()
Maka akan didapatkan visualisasi seperti :

Sekian dari saya Wassalamualaikum warahmatullahi wabarakatuh.