2016-12-09 7 views
0

R에서 해결하려고하는 선형 프로그래밍 문제가 있습니다. 나는 lpSolve 패키지를 사용했다. lpSolve는 기본적으로 primal simplex 알고리즘을 사용하여 솔루션을 얻습니다. 알고리즘을 이중 단면으로 바꾸려면 어떻게해야합니까? 결과는 두 알고리즘간에 크게 다릅니다. 이중 단방향 알고리즘을 사용하여 아래의 문제를 해결하는 데 도움이되는 다른 패키지가 있습니까?이중 심플 렉스 선형 프로그래밍으로

library("lpSolve") 

f.obj <- c(rep(1,12),rep(0,4)) 
f.cons <- matrix(c(1,-1,0,0,0,0,0,0,0,0,0,0,1,-1,0,0, 
        0,0,1,-1,0,0,0,0,0,0,0,0,1,0,-1,0, 
        0,0,0,0,1,-1,0,0,0,0,0,0,1,0,0,-1, 
        0,0,0,0,0,0,1,-1,0,0,0,0,0,1,-1,0, 
        0,0,0,0,0,0,0,0,1,-1,0,0,0,1,0,-1, 
        0,0,0,0,0,0,0,0,0,0,1,-1,0,0,1,-1),nrow=6,byrow=T) 

f.dir <- rep("=",6) 

f.rhs <- c(-1.0986,1.6094,-1.0986,1.94591,1.3863,-1.7917) 

g <- lp ("min", f.obj, f.cons, f.dir, f.rhs,compute.sens=TRUE) 
g$solution 
다음 R

불안 단면 사용 lpSolve이다 :

0 0 0 0 0 0.91630 0.0 0.76209 0.47 0 0 0 1.60940 2.70800 0 1.79170 

다음 듀얼 링고 소프트웨어를 사용하여 단순하고 SAS는 :

0 0.76214 0 0 1.23214 0 0 0 0.15415 0 0 0 0.8473 1.9459 0 1.7918 

목적 함수 모두에 대해 동일 알고리즘은 2.14839

+1

'lpSolveAPI'를 사용한다면, 예를 들면 다음과 같은 간단한 형식을 제어 할 수 있습니다. 'lp.control (lprec, simplextype = "dual")' –

+0

@KarstenW. 훌륭해, 고마워. 수락 할 수 있도록 답장을 달아주세요. – forecaster

답변

1

lpSolveAPI, 당신은 당신의 해결사를 세부적으로 조정 할 수 있습니다

lprec <- make.lp(0, ncol=16) 
set.objfn(lprec, obj=c(rep(1,12), rep(0,4))) 

add.constraint(lprec, xt=c(1,-1,1,-1), indices=c(1, 2, 13, 14), type="=", rhs=-1.0986) 
add.constraint(lprec, xt=c(1,-1,1,-1), indices=c(3, 4, 13, 15), type="=", rhs=1.6094) 
add.constraint(lprec, xt=c(1,-1,1,-1), indices=c(5, 6, 13, 16), type="=", rhs=-1.0986) 
add.constraint(lprec, xt=c(1,-1,1,-1), indices=c(7, 8, 14, 15), type="=", rhs=1.94591) 
add.constraint(lprec, xt=c(1,-1,1,-1), indices=c(9, 10, 14, 16), type="=", rhs=1.3863) 
add.constraint(lprec, xt=c(1,-1,1,-1), indices=c(11, 12, 15, 16), type="=", rhs=-1.7917) 

lp.control(lprec, simplextype="dual", pivoting="dantzig", verbose="detailed") 
solve(lprec) 
get.variables(lprec) 
# [1] 0.00000 0.00000 0.76209 0.00000 0.00000 0.15421 0.00000 0.00000 1.23209 
# [10] 0.00000 0.00000 0.00000 0.84731 1.94591 0.00000 1.79170 

은 자세한 내용 ?lp.control.options를 참조하십시오. 그러나 LINGO/SAS가 제공 한 솔루션을 재현 할 수 없었습니다.