2015-05-15 2 views
2

Я смущен возвратом функции get.basis(). Например,get.basis() в lpSolveAPI

lprec <- make.lp(0, 4) 
set.objfn(lprec, c(1, 3, 6.24, 0.1)) 
add.constraint(lprec, c(0, 78.26, 0, 2.9), ">=", 92.3) 
add.constraint(lprec, c(0.24, 0, 11.31, 0), "<=", 14.8) 
add.constraint(lprec, c(12.68, 0, 0.08, 0.9), ">=", 4) 
set.bounds(lprec, lower = c(28.6, 18), columns = c(1, 4)) 
set.bounds(lprec, upper = 48.98, columns = 4) 
RowNames <- c("THISROW", "THATROW", "LASTROW") 
ColNames <- c("COLONE", "COLTWO", "COLTHREE", "COLFOUR") 
dimnames(lprec) <- list(RowNames, ColNames) 
solve(lprec) 

Затем основные переменные

> get.basis(lprec) 
[1] -7 -2 -3 

Однако раствор

> get.variables(lprec) 
[1] 28.60000 0.00000 0.00000 31.82759 

Из решения, представляется переменной 1 и переменной 4 являются основанием. Следовательно, откуда происходит вектор (-7, -2, -3)?

Я предполагаю, что это из 3 ограничений и 4 переменных решения.

ответ

0

После того как я рассмотрел метод симплексов для ограниченных переменных, я, наконец, понял, как это происходит. Эти две ссылки полезны. Example; Video

Вернись к этой проблеме, структура подобна enter image description here

lpSolveAPI (R интерфейс для lp_solve) будет переписать структуру ограничения в качестве следующего формата после добавления соответствующей переменной слабины. Первые три столбца для слабых переменных. Следовательно, возвращение get.basis(), который -7, -2, -3, являются столбец 7, 2, 3, которые представляют собой переменную 4, фиктивная переменная 2 и 3.

enter image description here

В отношении такого рода из LP с ограниченными переменными переменная может быть небазической ни на нижней границе, ни на верхней границе. Возврат get.basis(lp, nonbasic=TRUE) равен -1, -4, -5, -6. Минус означает, что эти переменные находятся на нижней границе. Это означает слабую переменную 1 = 0, переменную 4 = 28,6, переменную 5 = 0, переменную 6 = 0.

Таким образом, оптимальное решение составляет 28,6 (неосновное), 0 (неосновное), 0 (неосновное), 31,82 (базовый)

Смежные вопросы