Линейное программирование — перенастройка переменной на основе ее кумулятивного количества

#linear-programming

#линейное программирование

Вопрос:

Подробная бизнес-задача:

Я пытаюсь решить бизнес-задачу планирования производства, как показано ниже:

  1. У меня есть два завода, производящие FG A и B соответственно.
  2. Оба продукта потребляют одно и то же сырье x
  3. Мне нужно создать 30-дневный производственный график с учетом доступности сырья.
  4. FG A и B могут быть получены, если в день имеется достаточное количество сырья.
  5. После каждых 6 дней производства завод должен проходить техническое обслуживание, и производство в этот день будет равно нулю.
  6. Цель состоит в том, чтобы максимизировать маржу, исходя из доступного сырья на уровне дня, и придерживаться производственных ограничений (т. Е. Остановка после каждого 6-го дня)

Мне нужно построить линейное программирование для решения приведенной ниже проблемы:

Переменная y: (двоичная) переменная z: кумулятивное значение y

Когда z> 6, то y = 0. Мне также нужно сбросить кумуляцию z после этой точки.

Желаемый результат:

введите описание изображения здесь

Как я могу построить оператор для ограничения MILP. Существуют ли какие-либо методы для решения этой проблемы. Спасибо.

Комментарии:

1. Для меня это не имеет особого смысла. Пожалуйста, будьте более краткими. В настоящее время вы хотите, чтобы y реагировал на некоторую кумуляцию, включающую также y : установка y в 0 из-за некоторой кумуляции по модулю подразумевает, что значение y не равно 0 из-за установки его в 0 . Однако с дополнительным столбцом все изменится, разделив y и обработанный / обрезанный / по модулю y.

2. Я подробно изложил бизнес-проблему для большей ясности, надеюсь, это поможет лучше установить контекст. Цените любую помощь, которую вы можете предложить для решения

Ответ №1:

Я думаю, вы можете моделировать свое обслуживание по-другому. Просто запретите любые последовательности из 7 единиц для y . Т.е.

  y[t-6] y[t-5] y[t-4] y[t-3] y[t-2] y[t-1] y[t] <= 6 for t=1,..,T
 

Это проще, чем использовать ваш аккумулятор. Обратите внимание, что начало требует некоторого внимания: для этого вы можете использовать исторические данные. Т.Е., at t=1 , значения для t=0,-1,-2,.. известны.

Ваш подход к накоплению не является изначально неправильным. Мы часто используем его для моделирования инвентаризации. Емкость запасов — это ограничение на то, насколько большими могут быть накопленные запасы.

Комментарии:

1. Спасибо, Эрвин, это было действительно полезно. Я смог решить проблему с помощью предложенного вами подхода.