Поскольку мне нужно создать инструмент автоматического планирования смены, R lpSolve
- это пакет, который я планирую использовать.Однако я не могу получить оптимальный результат с помощью кода, показанного ниже.Выход (почасовая поставка путем накопления всех доступных смен) не может удовлетворить спрос.Например, потребность в часе составляет 46, но предложение составляет только 25, что означает, что 21 единица спроса не может быть удовлетворена.
Справочная информация:
Цель
- Чтобы минимизировать разницу между общим предложением и общим спросом.
- Чтобы минимизировать разницу между спросом и предложением за каждый час.
Ограничение
- Ограничение смены - каждый час может иметь несколько смен, которые можно назначить.
- Максимальная вместимость - у меня есть крышка поставки.сумма общей смены не может превышать предела за каждый час.(46 - крышка в этом примере).
В матрице constr
24 строки представляют 24 часа, начиная с 7 часов утра, а 9 столбцов относятся к номеру.сдвигов у меня есть.
constr.val
относится к почасовой потребности.
Пожалуйста, дайте мне знать, если что-то неясно.спасибо!
library(lpSolve)
obj.fun<-c(1,1,1,1,1,1,1,1,1)
constr<-matrix(c(
1, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 1, 0, 0, 0, 0, 0,
1, 0, 0, 1, 0, 1, 0, 0, 0,
1, 0, 0, 1, 0, 1, 0, 1, 0,
1, 0, 0, 1, 0, 1, 0, 1, 0,
1, 0, 0, 1, 0, 1, 0, 1, 0,
0, 1, 0, 1, 0, 1, 0, 1, 0,
0, 1, 0, 1, 0, 1, 0, 1, 0,
0, 1, 0, 1, 0, 1, 0, 1, 0,
0, 1, 0, 0, 1, 1, 0, 1, 0,
0, 1, 0, 0, 1, 0, 1, 1, 0,
0, 1, 0, 0, 1, 0, 1, 0, 1,
0, 1, 0, 0, 1, 0, 1, 0, 1,
0, 1, 0, 0, 1, 0, 1, 0, 1,
0, 0, 1, 0, 1, 0, 1, 0, 1,
0, 0, 1, 0, 1, 0, 1, 0, 1,
0, 0, 1, 0, 1, 0, 1, 0, 1,
0, 0, 1, 0, 0, 0, 1, 0, 1,
0, 0, 1, 0, 0, 0, 0, 0, 1,
0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 0, 0), nrow = 24, byrow = TRUE)
constr.dir <- rep("<=", 24)
constr.val <- c(24, 20, 21, 22, 26, 34, 40, 44,
46, 46, 46, 46, 46, 46, 46, 46,
46, 46, 46, 46, 46, 46, 41, 27)
day.shift <- lp("max", obj.fun, constr, constr.dir,
constr.val, compute.sens = TRUE)
day.shift$solution