Linear Programming atau Pemrograman Linier adalah suatu model umum yang dapat digunakan dalam pemecahan masalah pengalokasian sumber-sumber yang terbatas secara optimal. Model yang digunakan dalam memecahkan masalah alokasi sumber daya perusahaan adalah model matematis. Semua fungsi matematis yang disajikan dalam model haruslah dalam bentuk fungsi linier.
Terdapat dua fungsi dalam linier programming, diantaranya:
Maksimasi dapat diartikan sebagai cara agar suatu perusahaan dapat memaksimalkan keuntungan atau hasil. Masalah maksimasi dapat diselesaikan dalam pemrograman linier. berikut contoh masalah maksimasi:
PT LAQUNATEKSTIL memiliki sebuah pabrik yang akan memproduksi 2 jenis produk, yaitu kain sutera dan kain wol. Untuk memproduksi kedua produk diperlukan bahan baku benang sutera, bahan baku benang wol dan tenaga kerja. Maksimum penyediaan benang sutera adalah 60 kg per hari, benang wol 30 kg per hari dan tenaga kerja 40 jam per hari. Kebutuhan setiap unit produk akan bahan baku dan jam tenaga kerja dapat dilihat dalam tabel berikut:
Kedua jenis produk memberikan keuntungan sebesar Rp 40 juta untuk kainsutera dan Rp 30 juta untuk kain wol. Masalahnya adalah bagaimanamenentukan jumlah unit setiap jenis produk yang akan diproduksi setiap hariagar keuntungan yang diperoleh bisa maksimal.
Menentukan Variabel
X1 = kain sutera
X2 = kain wol
# Import lpSolve package
library(lpSolve)
Fungsi Tujuan
Tujuan pabrik adalah maksimasi keuntungan, sehingga kita dapat menuliskan fungsi tujuan secara matematis yaitu sebagai berikut:
Zmax = 40X1 + 30X2
#Menetapkan koefisien dari fungsi tujuan
f.obj <- c(40, 30)
#Menetapkan matriks yang sesuai dengan koefisien kendala berdasarkan baris
f.con <- matrix(c(2, 3,
0, 2,
2, 1), nrow = 3, byrow = TRUE)
#Menetapkan tanda-tanda ketidaksetaraan
f.dir <- c("<=",
"<=",
"<=")
#Menetapkan koefisien sisi kanan
f.rhs <- c(60,
30,
40)
Membuat Grafik
2X1 + 3X2 = 60 X1 = 0, X2 = 60/3 = 20
X2 = 0, X1 = 60/2 = 30
2X2 ≤ 30
X2 = 15
2X1 + X2 ≤ 40
X1 = 0, X2 = 40
X2 = 0, X1 = 40/2 = 20
Mendapat Solusi Optimal
#Mendapatkan nilai maksimum
lp("max", f.obj, f.con, f.dir, f.rhs)
## Success: the objective function is 900
#Mendapatkan variabel akhir
lp("max", f.obj, f.con, f.dir, f.rhs)$solution
## [1] 15 10
#Merubah koefisien sensitivitas
lp("max", f.obj, f.con, f.dir, f.rhs, compute.sens=TRUE)$sens.coef.from
## [1] 20 20
lp("max", f.obj, f.con, f.dir, f.rhs, compute.sens=TRUE)$sens.coef.to
## [1] 60 60
#Mendapat bayangan/harga ganda dari kendala dan variabel keputusan
lp("max", f.obj, f.con, f.dir, f.rhs, compute.sens=TRUE)$duals
## [1] 5 0 15 0 0
#Mendapat batas bawah batasan harga bayangan/ganda dan masing masing variabel keputusan
lp("max", f.obj, f.con, f.dir, f.rhs, compute.sens=TRUE)$duals.from
## [1] 4e+01 -1e+30 3e+01 -1e+30 -1e+30
#Mendapat batas atas batasan harga bayangan/ganda dan masing masing variabel keputusan
lp("max", f.obj, f.con, f.dir, f.rhs, compute.sens=TRUE)$duals.to
## [1] 7e+01 1e+30 6e+01 1e+30 1e+30
Nilai z maksimum yang dapat diperoleh saat memenuhi kendala yang diberikan adalah 900 atau keuntungan sebesar Rp 900 juta, di mana x1 = 15 dan x2 = 10. Koefisien sensitivitas berubah dari 20 dan 20 menjadi 60 dan 60. Bayangan/harga ganda dari kendala adalah 5,0 dan 15, sedangkan untuk variabel keputusan adalah 0 dan 0, masing-masing. Batas bawah batasan harga bayangan/ganda adalah 4e+01, -1e+30 dan 3e+01, sedangkan untuk variabel keputusan berturut-turut adalah -1e+30 dan -1e+30. Terakhir, batas atas batasan harga bayangan/ganda adalah 7e+01, 1e+30 dan 6e+01, sedangkan untuk variabel keputusan masing-masing adalah 1e+30 dan 1e+30.
Sumber :
https://rpubs.com/suhartono-uinmaliki/885865#
https://towardsdatascience.com/linear-programming-in-r-444e9c199280
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00