Базовый пример симплекс-функции в R с ошибками
Доброе утро, у меня есть вопрос к проблеме оптимизации, которую я не могу решить в R, но в Excel:
Я хотел бы оптимизировать следующую ситуацию (Перевозка материалов и людей):
Авиакомпания x1 может перевозить 50 т материала и 500 человек.
Авиакомпания x2 может перевозить 150 т материала и 250 человек.
50x1 + 150x2 >= 900 -> Транспортировка материала мин. 900
500x1 + 250x2> = 2500 -> Перевозка людей мин. 2500
x1 - авиакомпания со стоимостью рейса 2500 за рейс. x2 - авиакомпания со стоимостью рейса 3500 за рейс. Затраты должны быть минимизированы!
x1> = 0
х2>=0
Вот мое решение в R (функция simplex из пакета "boot"):
library("boot")
a <- c(2500, 3500)
A2 <- matrix(c(50, 150, 500, 250), ncol=2, nrow=2, byrow=TRUE)
b2 <- c(900, 2500)
simplex(a, A2 = A2, b2 = b2, maxi=FALSE)
Я получаю следующую ошибку:
Fehler in the pivot(tableau, prow, pcol):
NAs nicht zugelassen in Teilbereichszuweisungen
Решение Excels Solver дает мне точное решение: x1 = 2.4 и x2 = 5.2
Где моя ошибка в R? Я должен использовать аргументы A2 и b2 из-за>= ... Спасибо за любую помощь!
Просто короткое расширение: я решил данную проблему, используя функцию "solveLP" из пакета "linprog", используя следующий синтаксис:
solveLP(cvec = a, bvec = b, Amat = A,
maximum=FALSE, const.dir=c(">=",">="))
а также:
A <- matrix(c(-50,-150,-500,-250),nrow=2,ncol=2,byrow=TRUE)
a <- c(2500, 3500)
b <- c(-900, -2500)
solveLP(a,b,A,maximum=FALSE)
Все еще удивляетесь, почему функция simplex дает мне такие ошибки?
1 ответ
Я не знаю точную причину (так что это не существенное решение). Но я знаю, что ошибка решается, когда вы устанавливаете верхний предел с A1
а также b1
даже если b1
это огромная ценность.
simplex(a, A1 = c(1, 1), b1 = 1.0E+12, A2 = A2, b2 = b2, maxi = FALSE)