Получение другого решения задачи линейного программирования при добавлении слабых переменных - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь решить основную задачу линейного программирования, используя lpSolve в R.

Исходная проблема:

original problem

В расширенной форме (то есть с добавленными переменными) это:

augmented form

Когда я решаю исходную задачу следующим образом:

M = matrix(c(1, 2, 3, 1), nrow = 2, byrow = TRUE)
lp("max", c(1,1), M, c("<=", "<="), c(100, 75))$solution

Я получаю решение: 10 45, которое является правильным.

Когда я решаю расширенную проблему следующим образом:

A = matrix(c(1, 2, 1, 3, 1, 1), nrow = 2, byrow = TRUE)
lp("max", c(1,1,0,0), A, c("=", "="), c(100, 75))$solution

Я получаю 1e+30 0e+00 0e+00 0e+00, что неверно. Поэтому я подумал, что это может не понравиться моим коэффициентам целевой функции, и попытался:

A = matrix(c(1, 2, 1, 3, 1, 1), nrow = 2, byrow = TRUE)
lp("max", c(1,1), A, c("=", "="), c(100, 75))$solution

, который вернул 0.0000000 0.3333333 - тоже неверно.

Решения исходной и дополненной проблемы должны бытьтот же самый. Я не вижу, что я делаю неправильно. Почему я получаю два разных ответа?

1 Ответ

1 голос
/ 23 октября 2019

Это довольно очевидно. В вашей задаче 4 переменные, а в матрице - 3 столбца.

Посмотрите на ограничения как:

 x1 + 2x2 + s1        = 100
3x1 +  x2      + s2   =  75

(Интересно, как всего несколько пробелов могут изменить восприятие).

...