Вывод LPSolver не является оптимальным результатом - PullRequest
0 голосов
/ 30 мая 2019

Поскольку мне нужно создать инструмент автоматического планирования смены, R lpSolve - это пакет, который я планирую использовать.Однако я не могу получить оптимальный результат с помощью кода, показанного ниже.Выход (почасовая поставка путем накопления всех доступных смен) не может удовлетворить спрос.Например, потребность в часе составляет 46, но предложение составляет только 25, что означает, что 21 единица спроса не может быть удовлетворена.

Справочная информация:

  • Цель

    1. Чтобы минимизировать разницу между общим предложением и общим спросом.
    2. Чтобы минимизировать разницу между спросом и предложением за каждый час.
  • Ограничение

    1. Ограничение смены - каждый час может иметь несколько смен, которые можно назначить.
    2. Максимальная вместимость - у меня есть крышка поставки.сумма общей смены не может превышать предела за каждый час.(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
...