ccitonline.com

CCIT – Cara Cerdas Ingat Tuhan

| AI.DAI5 | DAI5 eBook Free Download | CFDSOF | VisualFOAM | PT CCIT Group Indonesia | 8N8 |

Prinsip & Algoritma PINN Heat Conduction 1D dengan Framework DAI5 – Damar Iman Muhammad Kautsar (2306219871)

Assalamualaikum Warahmatullahi Wabarakatuh

Perkenalkan nama saya Damar Iman Muhammad Kautsar dengan NPM 2306219871. Pada blog ini saya akan memaparkan Prinsip & Algoritma PINN Heat Conduction 1D dengan Framework DAI5.

PINN yang memiliki kepanjangan berupa Physics-Informed Neural Networks merupakan metode dalam pembelajaran mesin yang menggabungkan jaringan saraf tiruan (NN) dengan prinsip-prinsip fisika yang diungkapkan melalui persamaan diferensial parsial (PDE) atau aturan fisika lainnya. Pendekatan ini dilakukan dengan tujuan untuk meningkatkan akurasi dan efisiensi pemodelan sistem fisik dibandingkan dengan metode numerik tradisional.

Sementara itu, DAI5 merupakan sebuah framework pemikiran yang dibasiskan oleh gabungan dari pemahaman sains dan kesadaran pada iman. Hal ini membuat kita untuk tetap sadar atas yang akan, sedang, dan telah kita lakukan sehingga kita dapat terus mengingat Allah SWT. Pada kasus seperti ini, kita menjadi sadar bahwa semua fenomena yang terjadi di dunia ini hanya bisa terjadi atas izin Allah SWT, karena semua hal dalam alam semesta ini merupakan ciptaan Allah SWT.

DAI5 terdiri atas 5 langkah, yakni:

  1. Deep Awareness of I. Menyadari dimana semua hal yang kita amati, lakukan, dan renungkan telah ditentukan oleh Allah SWT.
  2. Intention. Menekankan niat bahwa ketika kita ingin mendalami suatu ilmu pengetahuan, kita bukan hanya lakukan untuk diri sendiri, tetapi juga untuk kebermanfaatan umat manusia.
  3. Initial Thinking. Memahami secara dalam fundamental dari suatu masalah yang akan diselesaikan. Hal ini akan dapat membantu menemukan solusi dan akar masalah.
  4. Idealization. Menaruh pemikiran yang kreatif sehingga mendapatkan solusi yang ideal. Selain itu kita juga harus dapat memvisualisasikan masalah yang sedang dianalisis. Pada step ini juga solusi yang divisualisasikan harus bersifat realistis, dapat dipertanggung jawabkan, dan sesuai dengan niat yang telah ditentukan diawal tadi.
  5. Instruction Set. Memberikan proses langkah-langkah penyelesaian dengan detail dan dapat dipertanggung jawabkan.

Deep Awareness of I

Dalam penerapan PINN Heat Conduction, kesadaran dapat ditekankan dalam pemahaman bahwa fenomena konduksi panas adalah bagian dari ciptaan Allah SWT yang dapat dipelajari. Hal ini akan mendorong kita untuk mempelajari konduksi panas tidak hanya sebagai masalah teknis, tetapi juga sebagai cara kita untuk lebih dekat dengan Allah SWT. Kesadaran diri dalam poin ini juga membantu kita untuk lebih mengingat dan lebih menghargai nikmat dan ciptaan yang diberikan Allah SWT.

Intention

Prinsip yang dimiliki PINN pada saat pembuatan yakni untuk membantu manusia dalam menyelesaikan sistem persamaan diferensial dengan cara yang lebih efisien dibandingkan metode numerik seperti metode elemen hingga (FEM) atau metode beda hingga (FDM). Hal itu berarti pada saat pembuatan PINN, niat yang dimiliki bersifat baik dan bermanfaat untuk kedepannya. Selain itu, kita sebagai pengguna yang memanfaatkan hal ini juga harus menggunakan hal ini dengan niat baik, seperti penerapan PINN pada fenomena Heat Conduction dapat membantu efisiensi energi dalam bangunan dan perumahan.

Initial Thinking

Dalam PINN, kita tidak menyelesaikan persamaan ini dengan metode numerik seperti beda hingga (Finite Difference Method) atau elemen hingga (Finite Element Method), tetapi dengan jaringan saraf tiruan (NN) yang langsung memenuhi persamaan diferensial. Untuk kasus konduksi panas 1D dapat diawali dengan persamaannya:

PINN bekerja dengan prinsip utama:

  1. Memaksa network mematuhi persamaan diferensial dengan memasukkan persamaan ke dalam fungsi loss
  2. Melatih neural network untuk memprediksi solusi u(x,t)

Algoritma PINN akan berfokus pada:

  1. Desain Neural Network
  2. Definisi Loss Function
  3. Automatic Differentiation
  4. Training

Dengan melakukan semua proses pemahaman fundamental dan perhitungan tersebut, dapat ditemukan akar dari masalah dan solusi-solusi yang dapat digunakan untuk mengurangi atau bahkan mencegah masalah tersebut terjadi.

Idealization

Proses merubah solusi menjadi lebih ideal ini bisa dilakukan dengan melakukan asumsi terhadap beberapa aspek.ย  Hal tersebut berarti pada kasus ini dapat dilakukan asumsi terhadap kondisi suatu model berada dalam keadaan steady-state. Asumsi yang kita buat tentunya juga harus sesuai dengan kondisi alam sebenarnya agar tetap realistis. Dengan asumsi yang realistis, solusi dapat bersifat lebih sesuai dengan hukum fisika dan dapat dipertanggung jawabkan.

Instruction Set

Berikut langkah-langkah simulasi konduksi panas 1D dengan PINN:

  1. Meningkatkan kesadaran dalam melakukan simulasi dengan bersyukur dan meminta kelancaran dalam menjalani simulasi kepada Allah SWT
  2. Menentukan bahwa niat kita untuk melakukan ini demi kebaikan dan keberlangsungan masyarakat.
  3. Memahami konsep dasar konduksi panas dan PINN sehingga dapat memahami konsep integritas atas kedua hal tersebut. Proses simulasi juga akan lebih mudah dipahami jika konsep dasarnya sudah dipahami terlebih dahulu.
  4. Melakukan simulasi dengan Python dengan urutan berikut:

A. Mengimpor libraries yang akan digunakan

import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
import tkinter as tk
from tkinter import ttk

B. Fungsi Class untuk PINN

class PINN(nn.Module):
    def _init_(self):
        super(PINN, self)._init_()
        self.net = nn.Sequential(
            nn.Linear(1, 20),
            nn.Tanh(),
            nn.Linear(20, 20),
            nn.Tanh(),
            nn.Linear(20, 1)
        )
    
    def forward(self, x):
        return self.net(x)

C. Fungsi untuk menghitung Loss

def compute_loss(model, x, T0, T1):
    x = x.requires_grad_(True)
    T = model(x)
    
    # Compute derivatives
    dT_dx = torch.autograd.grad(T, x, grad_outputs=torch.ones_like(T), create_graph=True)[0]
    d2T_dx2 = torch.autograd.grad(dT_dx, x, grad_outputs=torch.ones_like(dT_dx), create_graph=True)[0]
    
    # Physics loss
    physics_loss = torch.mean(d2T_dx2**2)
    
    # Boundary conditions
    T_left = model(torch.tensor([[0.0]]))
    T_right = model(torch.tensor([[1.0]]))
    bc_loss = (T_left - T0)**2 + (T_right - T1)**2
    
    return physics_loss + bc_loss

D. Fungsi untuk Pelatihan PINN

def train_pinn(T0, T1, epochs=1000):
    model = PINN()
    optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
    x = torch.linspace(0, 1, 100).reshape(-1, 1)
    
    for epoch in range(epochs):
        optimizer.zero_grad()
        loss = compute_loss(model, x, T0, T1)
        loss.backward()
        optimizer.step()
        
        if epoch % 100 == 0:
            print(f"Epoch {epoch}, Loss: {loss.item():.6f}")
    
    return model

E. Fungsi untuk Plot Hasil

def plot_results(model, T0, T1):
    x = torch.linspace(0, 1, 100).reshape(-1, 1)
    with torch.no_grad():
        T_pred = model(x).numpy()
    x = x.numpy()
    T_analytical = T0 + (T1 - T0) * x
    
    plt.figure(figsize=(8, 6))
    plt.plot(x, T_pred, label="PINN Solution")
    plt.plot(x, T_analytical, '--', label="Analytical Solution")
    plt.xlabel("x")
    plt.ylabel("Temperature")
    plt.title("1D Steady-State Heat Conduction")
    plt.legend()
    plt.grid(True)
    plt.show()

F. Fungsi Class untuk GUI

class PINNApp:
    def _init_(self, root):
        self.root = root
        self.root.title("PINN 1D Heat Conduction Solver")
        
        # Labels and Entries
        ttk.Label(root, text="T0 (Left Boundary, ยฐC):").grid(row=0, column=0, padx=5, pady=5)
        self.T0_entry = ttk.Entry(root)
        self.T0_entry.grid(row=0, column=1, padx=5, pady=5)
        self.T0_entry.insert(0, "100")
        
        ttk.Label(root, text="T1 (Right Boundary, ยฐC):").grid(row=1, column=0, padx=5, pady=5)
        self.T1_entry = ttk.Entry(root)
        self.T1_entry.grid(row=1, column=1, padx=5, pady=5)
        self.T1_entry.insert(0, "0")
        
        ttk.Label(root, text="Epochs:").grid(row=2, column=0, padx=5, pady=5)
        self.epochs_entry = ttk.Entry(root)
        self.epochs_entry.grid(row=2, column=1, padx=5, pady=5)
        self.epochs_entry.insert(0, "1000")
        
        # Solve Button
        self.solve_button = ttk.Button(root, text="Solve & Plot", command=self.solve)
        self.solve_button.grid(row=3, column=0, columnspan=2, pady=10)
    
    def solve(self):
        try:
            T0 = float(self.T0_entry.get())
            T1 = float(self.T1_entry.get())
            epochs = int(self.epochs_entry.get())
            
            model = train_pinn(T0, T1, epochs)
            plot_results(model, T0, T1)
        except ValueError:
            tk.messagebox.showerror("Error", "Please enter valid numerical values.")

G. Menjalankan GUI

if _name_ == "_main_":
    root = tk.Tk()
    app = PINNApp(root)
   ย root.mainloop()

5. Output plot dari simulasi dengan Python

Epoch 5000

Epoch 10000

Kedua gambar tersebut merepresentasikan hasil PINN dengan solusi analitik. Berdasarkan kedua gambar tersebut, semakin banyak PINN dilakukan perlatihan atau jumlah Epoch, akan semakin akurat juga hasilnya.

Sekian dari saya, mohon maaf bila terdapat kekurangan. Wabilahitaufik walhidayah, wassalamualaikum warahmatullahi wabarakatuh