Lanskap SciML

Pengenalan ModelingToolkit dan suite SciML yang lebih luas untuk pemodelan berbasis persamaan.

Daftar isi

Suite SciML mengorganisasi komputasi berbasis persamaan ke dalam beberapa package yang saling melengkapi, mulai dari solver numerik hingga pemodelan simbolik. Topik ini memperkenalkan struktur suite tersebut, peran tiap package utama, serta posisi ModelingToolkit sebagai lapisan pemodelan simbolik beserta situasi ketika ModelingToolkit memberi manfaat. Setelah topik ini dibaca, pilihan package untuk sebuah kebutuhan pemodelan dapat ditentukan dengan sengaja, bukan sekadar mengikuti kebiasaan.

Antarmuka bersama pada SciMLBase#

SciMLBase mendefinisikan bahasa bersama yang dipakai seluruh package SciML. Tipe masalah seperti ODEProblem dan SDEProblem merupakan turunan dari AbstractSciMLProblem, sedangkan fungsi solve menerima masalah apa pun bersama sebuah algoritma dan mengembalikan objek solusi dengan struktur yang sama. Package solver tidak perlu mendefinisikan ulang bentuk masalahnya, cukup menyediakan algoritma untuk masalah yang sudah terdefinisi pada lapisan ini.

Pemisahan itu berdampak langsung pada pekerjaan sehari-hari. Kode yang menyatakan masalah tidak terikat pada satu package solver, sehingga pergantian algoritma hanya mengubah argumen solve, bukan perumusan masalahnya. Objek solusi juga dibaca dengan cara yang sama lintas jenis masalah, yaitu melalui sol.t dan sol.u. Tipe ODEProblem dan fungsi solve yang digunakan pada topik DifferentialEquations.jl berasal dari lapisan inilah, sehingga pola penulisan yang sudah dipraktikkan tetap berlaku untuk jenis masalah lain.

Lapisan ini juga menjadi tempat perilaku umum didefinisikan sekali untuk semua package. Pola argumen kata kunci pada solve, struktur indeksasi dan interpolasi objek solusi, serta pesan error yang terjadi sebelum integrasi dimulai semuanya ditetapkan di sini. Karena itu, dokumentasi resmi SciMLBase menjadi rujukan yang tepat ketika perilaku yang sama dijumpai pada beberapa package sekaligus.

Package utama dalam suite#

Suite SciML tersusun berlapis: lapisan antarmuka di dasar, package solver di tengah, dan meta-package yang menghimpun semuanya di atas. Tabel berikut merangkum peran package utama.

PackagePeran utama
SciMLBaseAntarmuka bersama: tipe masalah AbstractSciMLProblem dan fungsi solve.
OrdinaryDiffEqSolver ODE eksplisit dan implisit, dari Tsit5 hingga keluarga Rodas.
StochasticDiffEqSolver persamaan diferensial stokastik (stochastic differential equation, SDE) beserta metode adaptifnya.
DifferentialEquations.jlMeta-package yang memasang package solver dan fitur suite sekaligus.
ModelingToolkitPemodelan simbolik: sistem persamaan, penyederhanaan struktural, dan pembangkit masalah.

Setiap baris pada tabel adalah package terpisah yang dipasang dan dirilis secara independen. OrdinaryDiffEq dan StochasticDiffEq tidak saling menjadi dependensi, sehingga lingkungan proyek tetap ramping apabila hanya salah satu yang dibutuhkan. Lapisan SciMLBase menjadi titik temu keduanya karena tipe masalah dan objek solusinya berasal dari sana. Pola organisasi semacam ini membuat suite dapat berkembang tanpa menaikkan biaya bagi pengguna yang kebutuhannya terbatas.

Daftar di atas bukan daftar lengkap karena suite masih memuat package lain, misalnya pustaka callback tambahan dan package analisis sensitivitas. Meskipun demikian, lima nama tersebut sudah mencakup kebutuhan utama pembahasan pada jalur ini, dan sisanya dapat dicari dari dokumentasi meta-package ketika memang diperlukan.

DifferentialEquations.jlmeta-package suite SciMLOrdinaryDiffEqsolver ODEStochasticDiffEqsolver SDEModelingToolkitpemodelan simbolikSciMLBaseantarmuka bersama: AbstractSciMLProblem dan solve
Struktur suite SciML dari meta-package hingga antarmuka bersama

ModelingToolkit: pemodelan simbolik#

ModelingToolkit menggeser titik berangkat dari fungsi numerik menjadi persamaan simbolik. Variabel dinyatakan dengan makro @variables, parameter dengan @parameters, dan turunan waktu dengan operator Differential. Himpunan persamaan kemudian dirangkai menjadi ODESystem yang masih berupa deskripsi matematis, bukan fungsi yang siap dipanggil. Bentuk kerjanya tampak seperti berikut:

julia
# tidak-dijalankan
# ModelingToolkit tidak terpasang di sandbox; contoh hanya memperlihatkan bentuknya.
using ModelingToolkit

@variables t x(t) v(t)
@parameters k c m
D = Differential(t)

eqs = [
    D(x) ~ v,
    m * D(v) ~ -k * x - c * v,
]
@named sistem = ODESystem(eqs, t)
sistem_sederhana = structural_simplify(sistem)
masalah = ODEProblem(sistem_sederhana, [x => 1.0, v => 0.0],
                     (0.0, 10.0), [k => 1.0, c => 0.25, m => 1.0])

Tahapan pada contoh tersebut memperlihatkan pola kerja ModelingToolkit. Persamaan ditulis dengan operator ~, satu per satu, mengikuti bentuk matematisnya. Fungsi structural_simplify kemudian menyederhanakan struktur sistem, misalnya membuang persamaan redundan dan mereduksi sistem menjadi bentuk yang dapat diselesaikan, lalu ODEProblem dikonstruksi dari sistem simbolik yang sudah bersih. Solver dari OrdinaryDiffEq dapat dipakai tanpa perubahan karena hasilnya tetap berupa ODEProblem pada lapisan antarmuka SciMLBase.

Kerja yang otomatis dilakukan ModelingToolkit dapat dilihat dengan melakukannya secara manual. Persamaan pegas-peredam orde dua mx¨+cx˙+kx=0 m\ddot{x} + c\dot{x} + kx = 0 dipecah menjadi dua persamaan orde satu dengan menambah variabel kecepatan vv:

julia Pegas-peredam orde dua yang diuraikan manual menjadi orde satu
using OrdinaryDiffEq

# Sistem pegas-peredam ditulis manual sebagai sistem orde satu
function pegas!(du, u, p, t)
    x, v = u
    k, c, m = p
    du[1] = v
    du[2] = (-k * x - c * v) / m
end

masalah = ODEProblem(pegas!, [1.0, 0.0], (0.0, 10.0), (1.0, 0.25, 1.0))
solusi = solve(masalah, Tsit5())
println("Posisi x(10)     : ", round(solusi.u[end][1], digits = 4))
println("Kecepatan v(10)  : ", round(solusi.u[end][2], digits = 4))
text Keluaran
Posisi x(10)     : -0.269
Kecepatan v(10)  : 0.1377

Uraian manual tersebut benar, tetapi pekerjaannya berulang untuk setiap sistem baru: menguraikan orde tinggi, menuliskan fungsi in-place, dan menjaga konsistensi parameter. Pekerjaan itulah yang diambil alih ModelingToolkit, bersama dengan pembangkitan Jacobian dan penyederhanaan persamaan yang menyertainya.

Kapan ModelingToolkit memberi manfaat#

Manfaat pertama ModelingToolkit terletak pada penyederhanaan sistem persamaan yang besar. Model riil sering ditulis sebagai banyak persamaan perantara yang tidak langsung menyatakan turunan keadaan, dan structural_simplify mereduksi sistem semacam itu menjadi bentuk minimal sebelum integrasi. Penyederhanaan struktural semacam ini mudah keliru bila dilakukan secara manual pada sistem yang memuat puluhan persamaan.

Manfaat kedua adalah pembangkitan fungsi dari ekspresi simbolik. Turunan Jacobian ∂f/∂u \partial f/\partial u dihitung secara analitik dari persamaan, lalu dikompilasi menjadi fungsi yang efisien, sehingga solver implisit tidak perlu menghampirinya secara numerik. Kesalahan struktur seperti sistem yang kekurangan persamaan juga terdeteksi saat penyederhanaan, jauh sebelum integrasi dijalankan.

Manfaat ketiga adalah pemodelan acau (acausal). Komponen didefinisikan dengan konektor, lalu disambungkan dengan connect mengikuti topologi sistem, dan persamaan antarmuka dirakit otomatis. Pendekatan ini cocok untuk pustaka komponen yang dipakai ulang, misalnya pegas dan peredam yang disusun ulang dalam banyak konfigurasi. Sebaliknya, untuk sistem kecil yang sudah berupa orde satu dan ditulis sekali saja, fungsi in-place biasa tanpa lapisan simbolik tetap merupakan pilihan yang wajar karena biaya tambahannya tidak sebanding.

Ringkasan#

  • Suite SciML bertingkat: SciMLBase menetapkan antarmuka bersama, package solver menyediakan algoritma, dan DifferentialEquations.jl menghimpunnya sebagai meta-package.
  • AbstractSciMLProblem memisahkan perumusan masalah dari pilihan algoritma, sehingga pergantian solver hanya mengubah argumen solve.
  • ModelingToolkit bekerja pada persamaan simbolik: ODESystem dan structural_simplify menyederhanakan sistem sebelum dikonversi menjadi ODEProblem yang dapat diselesaikan solver biasa.
  • Pemanfaatannya paling terasa pada sistem besar, persamaan orde tinggi, dan pemodelan acau berbasis komponen yang dapat dipakai ulang.

Referensi#