Optimization Story: Memilih dan Menentukan Produksi yang Optimal dengan MILP
Menyambut tahun 2021, saya rasa tema analisa yang akan sering saya temui di pekerjaan tahun depan adalah optimization. Jadi ada baiknya saya bersiap dengan ngoprek lebih jauh terkait ini.
Setidaknya sudah ada empat metode yang sudah pernah saya lakukan dan tulis di blog ini terkait dengan optimization, yakni:
- Simulasi Monte Carlo,
- Visual (grafik),
- Aljabar-based framework menggunakan
library(lpSolve)
, - Formulasi model matematis menggunakan
ompr
.
Berdasarkan kasus-kasus yang pernah saya bahas, kasus optimization
yang sifatnya sukar hingga sukar sekali bisa diselesaikan dengan
lebih mudah dengan ompr
karena saya tidak perlu membangun matriks.
Namun tricky parts-nya adalah saya harus menuliskan model
matematikanya.
Sekarang saya akan berikan contoh satu kasus dimana optimization bisa dilakukan untuk kasus yang relatif rumit.
Problem
Suatu pabrik makanan/minuman sedang berencana untuk membuat 3
produk
baru yang rencananya akan diproduksi di 2
plant yang berbeda.
## Tabel Keterangan Produksi
keterangan | produk_1 | produk_2 | produk_3 | limit_production_time_per_plant_per_day |
---|---|---|---|---|
Plant 1, jam | 3 | 4 | 2 | 30 |
Plant 2, jam | 4 | 6 | 2 | 40 |
Profit per ton | 5 | 7 | 3 | |
Sales Potential per ton | 7 | 5 | 9 |
Masalah timbul saat mereka harus memilih maksimal 2
dari 3
produk
baru yang harus diproduksi. Selain itu, mereka juga harus memilih hanya
1
dari 2
plant yang memproduksi produk-produk tersebut.
Bagaimana cara mereka memilihnya? Lalu berapa ton yang harus diproduksi dari produk yang dipilih tersebut?
Formulasi Matematika
Oke, sekarang saya akan membuat formulasi matematika dari masalah di atas. Berbeda dengan masalah optimization yang telah saya tulis sebelumnya, masalah ini merupakan kombinasi dari binary integer dan continuous.
Maksudnya gimana yah?
- Kita harus memilih maksimal
2
produk: binary integer. - Kita harus menentukan berapa ton yang harus di produksi: continuous.
- Kita harus memilih
1
plant: binary integer.
Sudah mulai terbayang? Oke, saya mulai yah.
Definisi awal
Misalkan:
- untuk menandakan berapa ton yang harus diproduksi dari produk ke .
- untuk menandakan produk apa saja yang akan dipilih.
- Nilai
1
menandakan produk ke dipilih. - Nilai
0
menandakan produk ke tidak dipilih.
- Nilai
- untuk
menandakan
plant mana yang akan dipilih.
- Nilai
0
menandakan plant pertama akan dipilih. - Nilai
1
menandakan plant kedua akan dipilih.
- Nilai
Saya akan definisikan suatu angka dummy: . Bernilai angka yang besar sebagai reinforce model optimization agar bisa memilih produk dan plant secara bersamaan.
Decision Variable
Objective Function
Tujuan utama dari model optimization ini adalah memaksimalkan profit yang akan didapatkan oleh perusahaan:
Constraints
Berikut adalah constraints dari model ini:
Tonase produksi per produk tidak boleh melebihi tonase sales potential:
Sekarang saya harus memilih maksimal 2
dari 3
produk sekalian
menghitung tonase:
Sekarang saya harus memilih 1
dari 2
plant berdasarkan jam
produksi:
Solusi
Solusi yang saya dapatkan dari model di atas adalah:
Kesimpulan
- Dari ketiga produk baru, perusahaan bisa memilih produk
1
dan3
dengan konfigurasi produk1
sebanyak5.5
ton dan produk3
sebanyak9
ton. - Dari plant yang ada, perusahaan bisa memilih plant
2
agar bisa menyelesaikan tonase produksi tersebut tanpa melanggar limit jam produksi. - Profit yang bisa diraih adalah sebesar
54.5
.