R проект | симплекс метод | как указать переменные в этом случае?
Я собираюсь узнать все о симплекс-методе в проекте R, к сожалению, в этом случае я потерпел крах: у нас круглосуточный магазин, и нам нужно знать, сколько сотрудников нам нужно, если есть шесть смен (8-12,12-16 и т. Д.) В течение дня, и один сотрудник может работать макс. 8 часов. Лимиты сотрудников в одну смену:
- 0: 00-4: 00 <5 4: 00-8: 00 <7 8: 00-12: 00 <15 12: 00-16: 00 <10 16: 00-20: 00 <15 20: 00-24: 00 <9
Я попробовал это:
library(boot)
a=c(1,1,1,1,1,1)
w1=c(1,1)
w2=c(1,1)
w3=c(1,1)
w4=c(1,1)
w5=c(1,1)
w6=c(1,1)
A1=rbind(w1,w2,w3,w4,w5,w6)
b1=c(5,7,15,10,15,9)
simplex(a=a,A1=A1,b1=b1,maxi=TRUE)
Error in`[<-`(`*tmp*`, , basic, value = iden(M)) :
index is out of borders
Но не работает, я знаю, но все перепробовал и сдался:) Буду признателен за любую помощь в расчете этого дела!
2 ответа
Хорошо, я получил это через 4 дня:)) Я публикую результаты здесь, если у кого-то еще будет такая же проблема. Основная трудность здесь состоит в том, чтобы рассчитать "людей" как "количество часов в смену"
a=c(1,1,1,1,1,1)
> w1=c(4,0,0,0,0,4)
> w2=c(4,4,0,0,0,0)
> w3=c(0,4,4,0,0,0)
> w4=c(0,0,4,4,0,0)
> w5=c(0,0,0,4,4,0)
> w6=c(0,0,0,0,4,4)
> b1=c(20,28,60,40,60,36)
> library(boot)
> simplex(a=a,A1=rbind(w1,w2,w3,w4,w5,w6)
+ ,b1=b1,maxi=T)
Результаты линейного программирования
Вызов: симплекс (a = a, A1 = rbind(w1, w2, w3, w4, w5, w6), b1 = b1, maxi = T)
Задача максимизации с целевыми коэффициентами функции
x1 x2 x3 x4 x5 x6
1 1 1 1 1 1
Оптимальное решение имеет следующие значения
x1 x2 x3 x4 x5 x6
5 2 10 0 9 0
Оптимальное значение целевой функции - 26. ЗАКРЫТО, Удалить предмет или оставить для других. Спасибо админам за редактирование и @WhiteViking!
Ошибка возникает из-за неправильных размеров входных матриц и векторов.
Поскольку вектор коэффициентов a в вашем примере имеет размерность 6, также вектор x в целевой функции должен иметь размерность 6. А поскольку b1, который передается в simplex(), также имеет размерность 6, из этого следует, что A1 в ограничении
A1 * x <= b1
должна быть матрица 6 х 6. Тем не менее, A в вашем примере это только матрица 6 x 2. Это вызывает сообщение об ошибке. (Было бы лучше, если бы simplex() сначала проверил свои входные данные и выдал более удобное сообщение...)
Вот пример с правильными размерами, который работает:
library(boot)
a = rep(1, 6) # vector with 6 ones
A1 = matrix(1, nrow=6, ncol=6) # 6x6 matrix with all ones
b1 = c(5, 7, 15, 10, 15, 9)
simplex(a=a, A1=A1, b1=b1, maxi=TRUE)
Обратите внимание, что этот исправленный пример не пытается на самом деле решить вашу конкретную проблему симплекса, он только иллюстрирует правильное использование simplex().
В общем случае стоит тщательно проверить входные размеры входов в simplex(). Они хорошо объяснены на страницах справки:
?simplex