위계와 그룹이 있는 선형계획법을 풀어보자

install.packages(“lpSolveAPI”)

library(lpSolveAPI)

dick0 <- make.lp(0, 5)
lp.control(dick0, sense="max")
## $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] "maximize"
## 
## $simplextype
## [1] "dual"   "primal"
## 
## $timeout
## [1] 0
## 
## $verbose
## [1] "neutral"
set.objfn(dick0, c(560,138, 120, 0, 0 ))
add.constraint(dick0, c(0, 0, 0, 290,770), "=", 1)
add.constraint(dick0, c(573,  95, 110, -538, -895), "<=", 0)
add.constraint(dick0, c(560, 138, 120, -290, -770), "<=", 0)
add.constraint(dick0, c(637, 151, 150, -386, -886), "<=", 0)
add.constraint(dick0, c(685, 139, 160, -290, -760), "<=", 0)
add.constraint(dick0, c(542, 157, 130, -343, -721), "<=", 0)
add.constraint(dick0, c(520, 100, 120, -470, -810), "<=", 0)
add.constraint(dick0, c(531, 122,  60, -439, -820), "<=", 0)
add.constraint(dick0, c(511, 135, 160, -293, -888), "<=", 0)

solve(dick0)
## [1] 0
get.objective(dick0)
## [1] 0.9928058
get.variables(dick0)
## [1] 0.000000000 0.007194245 0.000000000 0.003448276 0.000000000
dick1 <- make.lp(0, 19)
lp.control(dick1, sense="max")
## $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] "maximize"
## 
## $simplextype
## [1] "dual"   "primal"
## 
## $timeout
## [1] 0
## 
## $verbose
## [1] "neutral"
set.objfn(dick1, c(430,100,140,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))
add.constraint(dick1, c(0,0,0,302,850,0,0,0,0,0,0,0,0,10921092,0,0,0,0,0), "=", 1)
add.constraint(dick1, c(582,130,126,-381,-818,0,0,0,0,0,0,0,0,0,0,125,500,-71,-1), "<=", 0)
add.constraint(dick1, c(606,106,100,-317,-801,0,0,0,0,0,0,0,0,0,0,147,300,-68,-1), "<=", 0)
add.constraint(dick1, c(569,103,108,-455,-795,0,0,0,0,0,0,0,0,0,0,121,500,-70,-1), "<=", 0)
add.constraint(dick1, c(430,105,140,-190,-810,0,0,0,0,0,0,0,0,0,0,111,100,-65,-1), "<=", 0)
add.constraint(dick1, c(420,105,100,-350,-815,0,0,0,0,0,0,0,0,0,0,125,150,-75,-1), "<=", 0)
add.constraint(dick1, c(605,140,125,-348,-717,0,0,0,0,0,0,0,0,0,0,141,500,-74,-1), "<=", 0)
add.constraint(dick1, c(480,95,125,-348,-800,0,0,0,0,0,0,0,0,0,0,117,200,-78,-1), "<=", 0)
add.constraint(dick1, c(305,80,115,-263,-808,0,0,0,0,0,0,0,0,0,0,110,100,-56,-1), "<=", 0)
add.constraint(dick1, c(458,103,125,-266,-799,0,0,0,0,0,0,0,0,0,0,116,200,-58,-1), "<=", 0)
add.constraint(dick1, c(493,128,110,-152,-780,0,0,0,0,0,0,0,0,0,0,135,50,-52,-1), "<=", 0)
add.constraint(dick1, c(573,95,110,-538,-895,-1,0,0,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(560,138,120,-290,-770,-1,0,0,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(637,151,150,-386,-886,-1,0,0,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(685,139,160,-290,-760,-1,0,0,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(542,157,130,-343,-721,-1,0,0,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(520,100,120,-470,-810,-1,0,0,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(531,122,60,-439,-820,-1,0,0,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(511,135,160,-293,-888,-1,0,0,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(521,102,93,-440,-771,0,-1,0,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(634,93,102,-324,-780,0,-1,0,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(610,86,75,-378,-825,0,-1,0,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(538,95,106,-380,-815,0,-1,0,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(591,116,119,-241,-880,0,-1,0,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(650,123,105,-141,-766,0,-1,0,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(621,107,91,-355,-823,0,-1,0,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(686,125,110,-270,-750,0,-1,0,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(620,120,130,-350,-750,0,0,-1,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(550,81,95,-630,-770,0,0,-1,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(525,105,125,-495,-860,0,0,-1,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(580,125,106,-345,-800,0,0,-1,0,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(430,105,140,-190,-810,0,0,0,-1,0,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(560,110,105,-280,-770,0,0,0,0,-1,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(510,125,95,-180,-820,0,0,0,0,-1,0,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(650,170,140,-300,-7000,0,0,0,0,0,-1,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(550,120,120,-275,-800,0,0,0,0,0,-1,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(580,160,110,-447,-650,0,0,0,0,0,-1,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(640,110,130,-370,-720,0,0,0,0,0,-1,0,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(480,95,125,-228,-880,0,0,0,0,0,0,-1,0,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(320,70,110,-230,-790,0,0,0,0,0,0,0,-1,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(250,60,110,-220,-790,0,0,0,0,0,0,0,-1,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(370,100,140,-320,-840,0,0,0,0,0,0,0,-1,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(280,90,100,-280,-810,0,0,0,0,0,0,0,-1,0,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(520,120,100,-281,-750,0,0,0,0,0,0,0,0,-1,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(430,100,140,-302,-850,0,0,0,0,0,0,0,0,-1,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(470,110,150,-227,-770,0,0,0,0,0,0,0,0,-1,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(410,80,110,-254,-825,0,0,0,0,0,0,0,0,-1,0,0,0,0,0), "<=", 0)
add.constraint(dick1, c(475,100,120,-179,-750,0,0,0,0,0,0,0,0,0,-1,0,0,0,0), "<=", 0)
add.constraint(dick1, c(560,150,120,-143,-800,0,0,0,0,0,0,0,0,0,-1,0,0,0,0), "<=", 0)
add.constraint(dick1, c(510,120,110,-114,-750,0,0,0,0,0,0,0,0,0,-1,0,0,0,0), "<=", 0)
add.constraint(dick1, c(425,140,90,-172,-820,0,0,0,0,0,0,0,0,0,-1,0,0,0,0), "<=", 0)
add.constraint(dick1, c(0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,1), ">=", 0)
add.constraint(dick1, c(0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,1), ">=", 0)
add.constraint(dick1, c(0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,1), ">=", 0)
add.constraint(dick1, c(0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,1), ">=", 0)
add.constraint(dick1, c(0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,1), ">=", 0)
add.constraint(dick1, c(0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,1), ">=", 0)
add.constraint(dick1, c(0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,1), ">=", 0)
add.constraint(dick1, c(0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,1), ">=", 0)
add.constraint(dick1, c(0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,1), ">=", 0)
add.constraint(dick1, c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,1), ">=", 0)


solve(dick1)
## [1] 0
get.objective(dick1)
## [1] 0.8454902
get.variables(dick1)
##  [1] 0.000000000 0.000000000 0.006039216 0.000000000 0.001176471
##  [6] 0.072156863 0.000000000 0.000000000 0.000000000 0.000000000
## [11] 0.000000000 0.000000000 0.000000000 0.000000000 0.072156863
## [16] 0.000000000 0.000000000 0.000000000 0.072156863
get.objective(dick0)
## [1] 0.9928058
get.variables(dick0)
## [1] 0.000000000 0.007194245 0.000000000 0.003448276 0.000000000