
Email : juliansalomo2@gmail.com
RPubs : https://rpubs.com/juliansalomo/
Github : https://github.com/juliansalomo/
Jurusan : Statistika
Address : ARA Center, Matana University Tower
Jl. CBD Barat Kav, RT.1, Curug Sangereng, Kelapa Dua, Tangerang, Banten 15810.
Soal
Sebuah perusahaan memproduksi dua model kursi: A dan B. Model A membutuhkan 4 balok, 1 dudukan kursi, dan 1 sandaran kursi. Sedangkan model B membutuhkan 3 balok dan 1 dudukan kursi. Perusahaan memiliki stok awal 200 balok, 500 dudukan kursi, dan 100 sandaran kursi. Jika perusahaan membutuhkan lebih banyak balok, dudukan kursi, dan sandaran kursi, mereka dapat membeli kayu balok standar, yang harganya 80 euro per balok. Perusahaan dapat memproduksi 20 balok, 10 dudukan kursi, dan 2 sandaran kursi dari balok kayu standar. Biaya produksi model A adalah 30 euro/kursi, sedangkan biaya model B adalah 40 euro/kursi. Jika perusahaan menginformasikan bahwa jumlah minimum kursi yang harus diproduksi adalah 1000 unit per bulan. Tentukan model program linier, yang dapat meminimalkan total biaya.
Penentuan Variabel
- \(A\) adalah jumlah kursi A yang akan diproduksi
- \(B\) adalah jumlah kursi B yang akan diproduksi
- \(C\) adalah jumlah balok kayu yang akan dibeli
Tabel Batasan
| \(A\) |
4 |
1 |
1 |
30 |
| \(B\) |
3 |
1 |
|
40 |
| \(C\) |
20 |
10 |
2 |
80 |
| Ketersediaan |
200 |
500 |
100 |
|
Fungsi Tujuan
Dengan memperhatikan biaya produksi model A adalah 30 euro/kursi, biaya model B adalah 40 euro/kursi, dan biaya balok 80 euro/kursi
\[
Min(30x_A+40x_B+80x_C)
\]
Fungsi Batasan
Balok
\[
4x_A+3x_B \le 200+20x_C\\
4x_A+3x_B-20x_C \le 200
\]
Dudukan kursi
\[
x_A+x_B \le 500+10x_C\\
x_A+x_B-10x_C \le 500
\]
Sandaran kursi
\[
x_A \le 100 +2x_C \\
x_A -2x_C \le 100
\]
Jumlah minimum produksi kursi
\[
x_A+x_B \ge 1000
\] # Matriks Koefisien {-}
\[
M=\begin{bmatrix}
1 & 1 & -10\\
4&3&-20\\
1&0&-2\\
-1&-1&0\\
\end{bmatrix}\\
N=\begin{bmatrix}
500\\
200\\
100\\
-1000\\
\end{bmatrix}
\]
Menggunakan R
lpSolve
# Load lpSolve
library(lpSolve)
## koefisien variabel / fungsi objectif
O <- c(30, 40, 80)
# Buat matrix sebelah kiri
M <- matrix(c(1, 1, -10,
4, 3, -20,
1, 0, -2,
1, 1, 0), nrow=4, byrow=TRUE)
# Buat matrix sebelah kanan
N <- c(500, 200, 100, 1000)
# set operator perbandingannya
constranints_direction <- c("<=", "<=", "<=", ">=")
# panggil fungsi linear programming
optimum <- lp(direction="min", #minimalkan biaya
objective.in = O,
const.mat = M,
const.dir = constranints_direction,
const.rhs = N,
all.int = T)
# jika menghasilkan 0 maka feasible!
print(optimum$status)
## [1] 0
# nilai optimal dari x_A, x_B and x_C
best_sol <- optimum$solution
names(best_sol) <- c("x_A", "x_B", "x_C")
print(best_sol)
## x_A x_B x_C
## 420 580 161
#fungsi biaya
print(paste("Total cost: ", optimum$objval, sep=""))
## [1] "Total cost: 48680"
lpSolveAPI
library(lpSolveAPI)
lprec <- make.lp(nrow = 4, ncol = 3)
lp.control(lprec, sense="min")
## $anti.degen
## [1] "fixedvars" "stalling"
##
## $basis.crash
## [1] "none"
##
## $bb.depthlimit
## [1] -50
##
## $bb.floorfirst
## [1] "automatic"
##
## $bb.rule
## [1] "pseudononint" "greedy" "dynamic" "rcostfixing"
##
## $break.at.first
## [1] FALSE
##
## $break.at.value
## [1] -1e+30
##
## $epsilon
## epsb epsd epsel epsint epsperturb epspivot
## 1e-10 1e-09 1e-12 1e-07 1e-05 2e-07
##
## $improve
## [1] "dualfeas" "thetagap"
##
## $infinite
## [1] 1e+30
##
## $maxpivot
## [1] 250
##
## $mip.gap
## absolute relative
## 1e-11 1e-11
##
## $negrange
## [1] -1e+06
##
## $obj.in.basis
## [1] TRUE
##
## $pivoting
## [1] "devex" "adaptive"
##
## $presolve
## [1] "none"
##
## $scalelimit
## [1] 5
##
## $scaling
## [1] "geometric" "equilibrate" "integers"
##
## $sense
## [1] "minimize"
##
## $simplextype
## [1] "dual" "primal"
##
## $timeout
## [1] 0
##
## $verbose
## [1] "neutral"
set.type(lprec, 1:3, type=c("integer"))
set.objfn(lprec, O)
# Tambahkan kendala
add.constraint(lprec, M[1, ], "<=", N[1])
add.constraint(lprec, M[2, ], "<=", N[2])
add.constraint(lprec, M[3, ], "<=", N[3])
add.constraint(lprec, M[4, ], ">=", N[4])
lprec
## Model name:
## C1 C2 C3
## Minimize 30 40 80
## R1 0 0 0 free 0
## R2 0 0 0 free 0
## R3 0 0 0 free 0
## R4 0 0 0 free 0
## R5 1 1 -10 <= 500
## R6 4 3 -20 <= 200
## R7 1 0 -2 <= 100
## R8 1 1 0 >= 1000
## Kind Std Std Std
## Type Int Int Int
## Upper Inf Inf Inf
## Lower 0 0 0
## [1] 0
0 berarti ditemukan solusi optimum
Nilai untuk \(x_a\), \(x_B\), dan \(x_C\) adalah:
## [1] 420 580 161
Nilai optimum tujuannya adalah:
## [1] 48680
LS0tDQp0aXRsZTogIk9wdGltaXphdGlvbiINCnN1YnRpdGxlOiAiQXNzaWdubWVudCBXZWVrIDUiDQphdXRob3I6ICJKdWxpYW4gU2Fsb21vICgyMDE5NDkyMDAwMykiDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50OiANCiAgICBodG1sX2RvY3VtZW50OiBudWxsDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6DQogICAgICBjb2xsYXBzZWQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgdGhlbWU6IHNhbmRzdG9uZQ0KICAgIGNzczogRDovSnVsaWFuIFNhbG9tby9NYXRhbmEvMDAwMC9zdHlsZS5jc3MNCiAgICBoaWdobGlnaHQ6IG1vbm9jaHJvbWUNCi0tLQ0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGNsYXNzLnNvdXJjZSA9ICJub2NvcHkiLA0KICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLm91dHB1dCA9ICJub2NvcHkiLA0KICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGLA0KICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGKQ0KYGBgDQoNCmBgYHtyIG1lLCBlY2hvPUZBTFNFLGZpZy5hbGlnbj0nY2VudGVyJywgb3V0LndpZHRoID0gJzMwJSd9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiRDovSnVsaWFuIFNhbG9tby9NYXRhbmEvMDAwMC9sb2dvLnBuZyIpDQpgYGANCg0KRW1haWwgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Jm5ic3A7OiAganVsaWFuc2Fsb21vMkBnbWFpbC5jb20gPGJyPg0KUlB1YnMgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzogaHR0cHM6Ly9ycHVicy5jb20vanVsaWFuc2Fsb21vLyA8YnI+DQpHaXRodWIgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsgJm5ic3A7IDogaHR0cHM6Ly9naXRodWIuY29tL2p1bGlhbnNhbG9tby8gPGJyPg0KSnVydXNhbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7OiBbU3RhdGlzdGlrYV0oaHR0cHM6Ly9tYXRhbmF1bml2ZXJzaXR5LmFjLmlkLz9seT1hY2FkZW1pYyZjPXNiKSA8YnI+DQpBZGRyZXNzICAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgOiBBUkEgQ2VudGVyLCBNYXRhbmEgVW5pdmVyc2l0eSBUb3dlciA8YnI+DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyZuYnNwOyBKbC4gQ0JEIEJhcmF0IEthdiwgUlQuMSwgQ3VydWcgU2FuZ2VyZW5nLCBLZWxhcGEgRHVhLCBUYW5nZXJhbmcsIEJhbnRlbiAxNTgxMC4NCg0KKioqKg0KIyB7LX0NCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkobHBTb2x2ZSkNCmBgYA0KDQoNCiMgU29hbCB7LX0NCg0KU2VidWFoIHBlcnVzYWhhYW4gbWVtcHJvZHVrc2kgZHVhIG1vZGVsIGt1cnNpOiBBIGRhbiBCLiBNb2RlbCBBIG1lbWJ1dHVoa2FuIDQgYmFsb2ssIDEgZHVkdWthbiBrdXJzaSwgZGFuIDEgc2FuZGFyYW4ga3Vyc2kuIFNlZGFuZ2thbiBtb2RlbCBCIG1lbWJ1dHVoa2FuIDMgYmFsb2sgZGFuIDEgZHVkdWthbiBrdXJzaS4gUGVydXNhaGFhbiBtZW1pbGlraSBzdG9rIGF3YWwgMjAwIGJhbG9rLCA1MDAgZHVkdWthbiBrdXJzaSwgZGFuIDEwMCBzYW5kYXJhbiBrdXJzaS4gSmlrYSBwZXJ1c2FoYWFuIG1lbWJ1dHVoa2FuIGxlYmloIGJhbnlhayBiYWxvaywgZHVkdWthbiBrdXJzaSwgZGFuIHNhbmRhcmFuIGt1cnNpLCBtZXJla2EgZGFwYXQgbWVtYmVsaSBrYXl1IGJhbG9rIHN0YW5kYXIsIHlhbmcgaGFyZ2FueWEgODAgZXVybyBwZXIgYmFsb2suIFBlcnVzYWhhYW4gZGFwYXQgbWVtcHJvZHVrc2kgMjAgYmFsb2ssIDEwIGR1ZHVrYW4ga3Vyc2ksICBkYW4gMiBzYW5kYXJhbiBrdXJzaSBkYXJpIGJhbG9rIGtheXUgc3RhbmRhci4gQmlheWEgcHJvZHVrc2kgbW9kZWwgQSBhZGFsYWggMzAgZXVyby9rdXJzaSwgc2VkYW5na2FuIGJpYXlhIG1vZGVsIEIgYWRhbGFoIDQwIGV1cm8va3Vyc2kuIEppa2EgcGVydXNhaGFhbiBtZW5naW5mb3JtYXNpa2FuIGJhaHdhIGp1bWxhaCBtaW5pbXVtIGt1cnNpIHlhbmcgaGFydXMgZGlwcm9kdWtzaSBhZGFsYWggMTAwMCB1bml0IHBlciBidWxhbi4gVGVudHVrYW4gbW9kZWwgcHJvZ3JhbSBsaW5pZXIsIHlhbmcgZGFwYXQgbWVtaW5pbWFsa2FuIHRvdGFsIGJpYXlhLg0KIA0KIyBQZW5lbnR1YW4gVmFyaWFiZWwgey19DQoNCiogJEEkIGFkYWxhaCBqdW1sYWgga3Vyc2kgQSB5YW5nIGFrYW4gZGlwcm9kdWtzaQ0KKiAkQiQgYWRhbGFoIGp1bWxhaCBrdXJzaSBCIHlhbmcgYWthbiBkaXByb2R1a3NpDQoqICRDJCBhZGFsYWgganVtbGFoIGJhbG9rIGtheXUgeWFuZyBha2FuIGRpYmVsaQ0KDQojIFRhYmVsIEJhdGFzYW4gey19DQoNCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rDQp8ICAgICAgICAgICAgIHwgQmFsb2sgICAgfGR1ZHVrYW4ga3Vyc2l8c2FuZGFyYW4gIHxCaWF5YSAgICAgICAgfA0KKz09PT09PT09PT09PT0rPT09PT09PT09PSs9PT09PT09PT09PT09Kz09PT09PT09PT0rPT09PT09PT09PT09PSsNCnwgJEEkICAgICAgICAgfDQgICAgICAgICB8MSAgICAgICAgICAgIHwxICAgICAgICAgfDMwICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKw0KfCAkQiQgICAgICAgICB8MyAgICAgICAgIHwxICAgICAgICAgICAgfC0gICAgICAgICB8NDAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rDQp8ICRDJCAgICAgICAgIHwyMCAgICAgICAgfDEwICAgICAgICAgICB8MiAgICAgICAgIHw4MCAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSsNCnxLZXRlcnNlZGlhYW4gfDIwMCAgICAgICB8NTAwICAgICAgICAgIHwxMDAgICAgICAgfC0gICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKw0KDQojIEZ1bmdzaSBUdWp1YW4gey19DQoNCkRlbmdhbiBtZW1wZXJoYXRpa2FuIGJpYXlhIHByb2R1a3NpIG1vZGVsIEEgYWRhbGFoIDMwIGV1cm8va3Vyc2ksIGJpYXlhIG1vZGVsIEIgYWRhbGFoIDQwIGV1cm8va3Vyc2ksIGRhbiBiaWF5YSBiYWxvayA4MCBldXJvL2t1cnNpDQoNCiQkDQpNaW4oMzB4X0ErNDB4X0IrODB4X0MpDQokJA0KDQojIEZ1bmdzaSBCYXRhc2FuIHstfQ0KDQo+IEJhbG9rDQoNCiQkIA0KNHhfQSszeF9CIFxsZSAyMDArMjB4X0NcXA0KNHhfQSszeF9CLTIweF9DIFxsZSAyMDANCiQkDQoNCj4gRHVkdWthbiBrdXJzaQ0KDQokJA0KeF9BK3hfQiBcbGUgNTAwKzEweF9DXFwNCnhfQSt4X0ItMTB4X0MgXGxlIDUwMA0KJCQNCg0KPiBTYW5kYXJhbiBrdXJzaQ0KDQokJA0KeF9BIFxsZSAxMDAgKzJ4X0MgXFwNCnhfQSAtMnhfQyBcbGUgMTAwDQokJA0KDQo+IEp1bWxhaCBtaW5pbXVtIHByb2R1a3NpIGt1cnNpDQoNCiQkDQp4X0EreF9CIFxnZSAxMDAwDQokJA0KIyBNYXRyaWtzIEtvZWZpc2llbiB7LX0NCg0KJCQNCk09XGJlZ2lue2JtYXRyaXh9DQoxICYgMSAmIC0xMFxcDQo0JjMmLTIwXFwNCjEmMCYtMlxcDQotMSYtMSYwXFwNClxlbmR7Ym1hdHJpeH1cXA0KTj1cYmVnaW57Ym1hdHJpeH0NCjUwMFxcDQoyMDBcXA0KMTAwXFwNCi0xMDAwXFwNClxlbmR7Ym1hdHJpeH0NCiQkDQoNCiMgTWVuZ2d1bmFrYW4gUg0KDQojIyBscFNvbHZlDQoNCmBgYHtyfQ0KIyBMb2FkIGxwU29sdmUNCmxpYnJhcnkobHBTb2x2ZSkNCg0KIyMga29lZmlzaWVuIHZhcmlhYmVsIC8gZnVuZ3NpIG9iamVjdGlmDQpPIDwtIGMoMzAsIDQwLCA4MCkNCg0KIyBCdWF0IG1hdHJpeCBzZWJlbGFoIGtpcmkNCk0gPC0gbWF0cml4KGMoMSwgMSwgLTEwLA0KICAgICAgICAgICAgICA0LCAzLCAtMjAsDQogICAgICAgICAgICAgIDEsIDAsIC0yLA0KICAgICAgICAgICAgICAxLCAxLCAwKSwgbnJvdz00LCBieXJvdz1UUlVFKQ0KDQojIEJ1YXQgbWF0cml4IHNlYmVsYWgga2FuYW4NCk4gPC0gYyg1MDAsIDIwMCwgMTAwLCAxMDAwKQ0KDQojIHNldCBvcGVyYXRvciBwZXJiYW5kaW5nYW5ueWENCmNvbnN0cmFuaW50c19kaXJlY3Rpb24gIDwtIGMoIjw9IiwgIjw9IiwgIjw9IiwgIj49IikNCg0KIyBwYW5nZ2lsIGZ1bmdzaSBsaW5lYXIgcHJvZ3JhbW1pbmcNCm9wdGltdW0gPC0gIGxwKGRpcmVjdGlvbj0ibWluIiwgI21pbmltYWxrYW4gYmlheWENCiAgICAgICAgICAgICAgIG9iamVjdGl2ZS5pbiA9IE8sDQogICAgICAgICAgICAgICBjb25zdC5tYXQgPSBNLA0KICAgICAgICAgICAgICAgY29uc3QuZGlyID0gY29uc3RyYW5pbnRzX2RpcmVjdGlvbiwNCiAgICAgICAgICAgICAgIGNvbnN0LnJocyA9IE4sDQogICAgICAgICAgICAgICBhbGwuaW50ID0gVCkNCiMgamlrYSBtZW5naGFzaWxrYW4gMCBtYWthIGZlYXNpYmxlIQ0KcHJpbnQob3B0aW11bSRzdGF0dXMpDQojIG5pbGFpIG9wdGltYWwgZGFyaSB4X0EsIHhfQiBhbmQgeF9DDQpiZXN0X3NvbCA8LSBvcHRpbXVtJHNvbHV0aW9uDQpuYW1lcyhiZXN0X3NvbCkgPC0gYygieF9BIiwgInhfQiIsICJ4X0MiKSANCnByaW50KGJlc3Rfc29sKQ0KDQojZnVuZ3NpIGJpYXlhDQpwcmludChwYXN0ZSgiVG90YWwgY29zdDogIiwgb3B0aW11bSRvYmp2YWwsIHNlcD0iIikpDQpgYGANCg0KIyMgbHBTb2x2ZUFQSQ0KDQpgYGB7cn0NCmxpYnJhcnkobHBTb2x2ZUFQSSkNCg0KbHByZWMgPC0gbWFrZS5scChucm93ID0gNCwgbmNvbCA9IDMpDQoNCmxwLmNvbnRyb2wobHByZWMsIHNlbnNlPSJtaW4iKQ0KDQpzZXQudHlwZShscHJlYywgMTozLCB0eXBlPWMoImludGVnZXIiKSkNCg0Kc2V0Lm9iamZuKGxwcmVjLCBPKQ0KDQojIFRhbWJhaGthbiBrZW5kYWxhDQphZGQuY29uc3RyYWludChscHJlYywgTVsxLCBdLCAiPD0iLCBOWzFdKQ0KYWRkLmNvbnN0cmFpbnQobHByZWMsIE1bMiwgXSwgIjw9IiwgTlsyXSkNCmFkZC5jb25zdHJhaW50KGxwcmVjLCBNWzMsIF0sICI8PSIsIE5bM10pDQphZGQuY29uc3RyYWludChscHJlYywgTVs0LCBdLCAiPj0iLCBOWzRdKQ0KDQpscHJlYw0KDQpzb2x2ZShscHJlYykNCmBgYA0KDQowIGJlcmFydGkgZGl0ZW11a2FuIHNvbHVzaSBvcHRpbXVtDQoNCk5pbGFpIHVudHVrICR4X2EkLCAkeF9CJCwgZGFuICR4X0MkIGFkYWxhaDoNCg0KYGBge3J9DQpnZXQudmFyaWFibGVzKGxwcmVjKQ0KYGBgDQoNCk5pbGFpIG9wdGltdW0gdHVqdWFubnlhIGFkYWxhaDoNCg0KYGBge3J9DQpnZXQub2JqZWN0aXZlKGxwcmVjKQ0KYGBgDQoNCiMgTWVuZ2d1bmFrYW4gUHl0aG9uDQoNCltQZW5nZXJqYWFuIGRlbmdhbiBweXRob25dKGh0dHBzOi8vY29sYWIucmVzZWFyY2guZ29vZ2xlLmNvbS9kcml2ZS8xcFRHODBrX3Ric2VzQVB5dm1PcW41SW5SSlVPaW1RNlc/dXNwPXNoYXJpbmcp