Я решаю задачу планирования нефтепереработки, в которой технологические установки могут работать в разных режимах. Допустим, технологическая установка X имеет два режима работы A и B. Я ищу эффективную формулировку, которая заставит мою модель планирования MILP составлять расписание на 10 дней, например AAAAAA BBBB вместо A B A B AA B A B A, т.е. количество переключателей режимов должно быть минимальным.
В настоящее время в моей модели есть двоичная переменная use_caps (mode, day), которая равна 1, тогда режим работы выбирается на день. Я использую эту переменную для создания следующей переменной 1-0: same_mode (mode, day) = e = use_caps (mode, day) + use_caps (mode, day + 1) - 1. Рассчитываю на все дни кроме последнего. Как видите, переменная same_mode (mode, day) принимает значение 1, тогда day и day + 1 используют один и тот же режим работы, в противном случае это 0.
Затем я использую его, чтобы вознаградить модель за построение расписания с минимальными переключениями. Я делаю это, добавляя к своей цели бонус: same_mode_bonus = e = sum ((режим, дни), same_mode (режим, день) * бонус_значение), где Bonus_value - это относительно большой параметр. Поскольку у меня есть проблема максимизации прибыли, моя модель пытается составить требуемый график. Моя стратегия во многих случаях работает хорошо, но иногда терпит неудачу. Итак, мой вопрос заключается в следующем: есть ли другая лучшая стратегия / формулировка для построения такого расписания или единственный способ улучшить расписание - это настройка значения параметра Bonus_value?