Load Packages

library(lpSolve)
library(linprog)

Load Data

dat<- data.frame("AX" = c("Harga", "BK", "PK", "TDN", "Bahan pakan sapi pedaging","Bahan pakan hijauan","Bahan pakan ransum"),  "x1" = c( 600, 0.4, 0.0172, 0.1728, 1,1,0), 
                 "x2" = c(500, 0.21, 0.02, 0.11, 1,1,0), "x3" = c(4000,0.891,0.096,0.801,1,0,1), 
                 "x4" = c(6500,0.893,0.149,0.625,1,0,1), "x5" = c(6000,0.897,0.439,0.529,1,0,1),
                 "x6" = c(3000,0.114,0.021,0.044,1,0,1), "x7" = c(750,0.262,0.062,0.206,1,0,1),
                 "x8" = c(1500,0.322,0.010,0.263,1,0,1), "x9" = c(6500,0.896,0.142,0.6,1,0,1))

dat
##                          AX       x1     x2       x3       x4       x5       x6
## 1                     Harga 600.0000 500.00 4000.000 6500.000 6000.000 3000.000
## 2                        BK   0.4000   0.21    0.891    0.893    0.897    0.114
## 3                        PK   0.0172   0.02    0.096    0.149    0.439    0.021
## 4                       TDN   0.1728   0.11    0.801    0.625    0.529    0.044
## 5 Bahan pakan sapi pedaging   1.0000   1.00    1.000    1.000    1.000    1.000
## 6       Bahan pakan hijauan   1.0000   1.00    0.000    0.000    0.000    0.000
## 7        Bahan pakan ransum   0.0000   0.00    1.000    1.000    1.000    1.000
##        x7       x8       x9
## 1 750.000 1500.000 6500.000
## 2   0.262    0.322    0.896
## 3   0.062    0.010    0.142
## 4   0.206    0.263    0.600
## 5   1.000    1.000    1.000
## 6   0.000    0.000    0.000
## 7   1.000    1.000    1.000

data diatas merupkan data yang akan digunakan pada dalam optimasi cost minimizing yaitu pada pakan sapi.

set decision variables

berikut fungsi tujuan atau disebut juga fungsi objektif yang ingin di minimalkan

objective.in <- c(600,  500, 4000, 6500, 6000, 3000, 750, 1500, 6500)

constraint matrix

berikut inimerupakan fungsi kendala yang diberikan untuk masing masing X

const.mat<- matrix(c(0.400, 0.210, 0.891, 0.893, 0.897, 0.114, 0.262, 0.322, 0.896,
                     0.0172, 0.020, 0.096, 0.149, 0.439, 0.021, 0.062, 0.010, 0.142,
                     0.1728, 0.110, 0.8019, 0.6251, 0.52923, 0.04465, 0.20698, 0.263396, 0.6,
                     1,1,1,1,1,1,1,1,1,
                     1,1,0,0,0,0,0,0,0,
                     0,0,1,1,1,1,1,1,1,
                     1,0,0,0,0,0,0,0,0,
                     0,1,0,0,0,0,0,0,0,
                     0,0,1,0,0,0,0,0,0,
                     0,0,0,1,0,0,0,0,0,
                     0,0,0,0,1,0,0,0,0,
                     0,0,0,0,0,1,0,0,0,
                     0,0,0,0,0,0,1,0,0,
                     0,0,0,0,0,0,0,1,0,
                     0,0,0,0,0,0,0,0,1), nrow = 15, byrow = TRUE)

Defining constraints

berikut merupkan batas fungsi kendala yang dikehendaki

a1<- 13.5    #Kilogram  
a2<- 1.4159  #Kilogram  
a3<- 8.396   #Kilogram  
a4<- 45      #Kilogram  
a5<- 31.5    #Kilogram  
a6<- 13.5    #Kilogram  
a7<- 100
a8<- 100
a9<- 30
a10<-30
a11<-30
a12<-30
a13<-30
a14<-30
a15<-30   

RHS for constraints

penggabungan batasan fungsi kendala

const.rhs<- c(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15)

Direction for constraints

berikut merupakan arah yang menginformasikan bahwa setiap kendala memiliki nilai max atau nilai min yang dikehendaki

const.dir<- c("<=", ">=", ">=", "<=","<=","<=","<=","<=","<=","<=","<=","<=","<=","<=","<=")

Finding Optimum Solution

fungsi yang digunakan dalam optimasi yaitu sebagai berikut : akan di peroleh nilai cost minimizing

optm<- lp(direction = "min", objective.in , const.mat, const.dir, const.rhs)

summary(optm)
##                  Length Class  Mode     
## direction          1    -none- numeric  
## x.count            1    -none- numeric  
## objective          9    -none- numeric  
## const.count        1    -none- numeric  
## constraints      165    -none- numeric  
## int.count          1    -none- numeric  
## int.vec            1    -none- numeric  
## bin.count          1    -none- numeric  
## binary.vec         1    -none- numeric  
## num.bin.solns      1    -none- numeric  
## objval             1    -none- numeric  
## solution           9    -none- numeric  
## presolve           1    -none- numeric  
## compute.sens       1    -none- numeric  
## sens.coef.from     1    -none- numeric  
## sens.coef.to       1    -none- numeric  
## duals              1    -none- numeric  
## duals.from         1    -none- numeric  
## duals.to           1    -none- numeric  
## scale              1    -none- numeric  
## use.dense          1    -none- numeric  
## dense.col          1    -none- numeric  
## dense.val          1    -none- numeric  
## dense.const.nrow   1    -none- numeric  
## dense.ctr          1    -none- numeric  
## use.rw             1    -none- numeric  
## tmp                1    -none- character
## status             1    -none- numeric
optm$objval
## [1] 34881.58

Biaya termurah yang dapat dicapai adalah 34.888,58

optm$solution
## [1] 13.586047 11.612429  3.322689  0.000000  0.000000  0.000000 10.177311
## [8]  0.000000  0.000000

untuk mencari kombinasi terbaik diantara bahan pakan untuk mencapai tujuan dan memenuhi semua batasan-batasan yang telah ditetapkan. Berdasarkan hasil optimasi, kombinasi bahan pakan paling baik dan mengutungkan terdiri dari Jerami padi basah (X1) sebesar 13,586 , rumput gajah (X2) sebesar 11,612 , tepung jagung (X3) sebesar 3,323 , dan Ampas tahu basah (X7) sebesar 10,177.

x1<-optm$solution[1];x1
## [1] 13.58605
x2<-optm$solution[2];x2
## [1] 11.61243
x3<-optm$solution[3];x3
## [1] 3.322689
x4<-optm$solution[4];x4
## [1] 0
x5<-optm$solution[5];x5
## [1] 0
x6<-optm$solution[6];x6
## [1] 0
x7<-optm$solution[7];x7
## [1] 10.17731
x8<-optm$solution[8];x8
## [1] 0
x9<-optm$solution[9];x9
## [1] 0