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
Другие вопросы по тегам