/ / линейно програмиране с двойно симплекс в R - r, линейно програмиране, симплекс - алгоритъм

линейно програмиране с двоен симплекс в R - r, линейно програмиране, simplex-алгоритъм

Имам проблем с линейното програмиране, който се опитвам да реша R, Използвал съм го lpSolve пакет. lpSolve по подразбиране използва първичен симплекс алгоритъм за получаване на решение. Какво ще стане, ако искам да променя алгоритъма на двойния симплекс? Резултатите варират в широки граници между двата алгоритъма. Има ли други пакети, които биха помогнали за решаване на проблема по-долу, използвайки двоен симплекс алгоритъм.

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

Първичен симплекс с помощта на lpSolve R е както следва:

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

Двойният симплекс с използване на софтуер Lingo и 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 за отговор № 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.