library(optimization)
## Loading required package: Rcpp
library(lpSolve)
Optimasi numerik adalah cabang ilmu matematika dan komputer yang berkaitan dengan penemuan nilai optimum atau solusi terbaik dalam sebuah masalah, ketika solusi tersebut tidak dapat ditemukan secara analitis. Metode ini sangat penting dalam berbagai bidang, seperti ilmu komputer, ilmu ekonomi, ilmu rekayasa, dan masih banyak lagi. Dalam artikel ini, akan dibahas konsep dasar optimasi numerik dan beberapa contoh penerapannya.
Optimasi numerik berusaha untuk menemukan nilai yang meminimalkan atau memaksimalkan suatu fungsi objektif, yang umumnya diwakili sebagai:
\[f(x) \rightarrow \min \text{ atau } \max\]
di mana \(f(x)\) adalah fungsi
objektif dan \(x\) adalah vektor
variabel. Dalam beberapa kasus, fungsi objektif ini dikenal sebagai
fungsi tujuan (objective function) dan bisa
memiliki beberapa batasan atau kendala (constraints) yang harus
dipenuhi.
Ada dua jenis utama optimasi numerik:
Misalkan dalam permasalahan regresi linear, akan dicari nilai minimum dari fungsi f(x) = \(x^2\)
# Fungsi objektif
objective_function <- function(x) {
return(x^2)
}
# Inisialisasi parameter awal
initial_values <- c(2, -3, 5)
# Optimasi parameter untuk setiap inisialisasi(Di sini, akan menggunakan fungsi optimize() dalam R)
results <- lapply(initial_values, function(initial_x) {
result <- optimize(objective_function, interval = c(-10, 10), maximum = FALSE)
return(result$minimum)
})
# Hasil optimasi
for (i in 1:length(initial_values)) {
cat("Inisialisasi Awal:", initial_values[i], " - Nilai Minimum:", results[[i]], "\n")
}
## Inisialisasi Awal: 2 - Nilai Minimum: 0
## Inisialisasi Awal: -3 - Nilai Minimum: 0
## Inisialisasi Awal: 5 - Nilai Minimum: 0
Misalkan sebuah pabrik ingin memaksimalkan profit dari penjualan dua jenis produk (produk A dan produk B) dengan batasan waktu dan bahan baku yang terbatas.
Informasi dan batasan:
Akan ditentukan jumlah produk A dan produk B yang harus diproduksi untuk memaksimalkan profit sambil memperhatikan kendala waktu dan bahan baku.
Berikut adalah penyelesaian masalah ini menggunakan optimasi linear:
# Koefisien profit per unit untuk masing-masing produk
profit_coef <- c(10, 15)
# Koefisien penggunaan waktu per unit untuk masing-masing produk
waktu_coef <- c(2, 3)
# Batasan waktu produksi
batasan_waktu <- 50
# Batasan bahan baku
batasan_bahan_baku <- 80
# Membuat model LP
lp <- lp(direction = "max",
objective.in = profit_coef,
const.mat = waktu_coef,
const.dir = "<=",
const.rhs = c(batasan_waktu, batasan_bahan_baku))
# Menyelesaikan model LP
solve(lp)
# Menampilkan hasil
cat("Jumlah Produk A yang diproduksi:", lp$solution[1], "\n")
cat("Jumlah Produk B yang diproduksi:", lp$solution[2], "\n")
cat("Profit maksimum: $", lp$objval, "\n")
Dalam contoh ini, pabrik mencari/menentukan jumlah produk A dan produk B
yang harus diproduksi untuk memaksimalkan profit. Akan dihitung alokasi
produksi yang akan menghasilkan profit maksimum dengan memperhatikan
kendala waktu dan bahan baku yang tersedia. Hasilnya akan menunjukkan
jumlah produk dari masing-masing jenis yang harus diproduksi dan profit
maksimum yang dapat dicapai.
Ada banyak metode optimasi numerik yang digunakan untuk menyelesaikan permasalahan optimasi. Beberapa di antaranya adalah:
Metode Gradien: Metode ini memanfaatkan gradien atau turunan dari fungsi objektif untuk mencari titik minimum atau maksimum. Contoh penerapannya adalah Algoritma Gradient Descent dalam machine learning.
Metode Newton-Raphson: Metode ini menggabungkan informasi gradien dan turunan kedua (Hessian) untuk mendekati akar atau titik optimum.
Metode Evolutionary Algorithms: Metode ini terinspirasi dari evolusi biologis dan menciptakan populasi solusi yang berkembang seiring waktu.
Metode Swarm Intelligence: Metode ini mengambil inspirasi dari perilaku kelompok hewan sosial, seperti lebah atau semut, untuk menemukan solusi optimum.
Referensi:
Kaplan, Daniel. 2022. MOSAIC Calculus. GitHub Pages. https://dtkaplan.github.io/MC2/