Я пытаюсь преобразовать третье условие ниже в линейное ограничение. Я включил полную проблему и мой прогресс для иллюстративных целей.
Производитель рассматривает возможность производства трех продуктов a, b, c. Материалы, труд и прибыль для каждого продукта следующие.
продукт: (количество входного материала, рабочее время, прибыль)
a: (3,6,200)
b: (6,5,300)
c: (10,8,400)
В настоящее время доступно 12 000 единиц исходного материала и 12 000 часов рабочей силы. Установлены следующие дополнительные ограничения.
Если компания решает производить «а», то она должна произвести не менее 100 единиц.
Если компания решает производить автомобили категории «В», то она должна произвести не менее 80 единиц.
Если компания решает производить «с», то она может произвести в общей сложности не более 120 единиц «а» и «b» (что я интерпретирую как а + b ‹ = 120, если производится «с», и а + b). в зависимости от материалов и трудовых ограничений в противном случае).
Мне нужно сформулировать целочисленную линейную программу, чтобы максимизировать прибыль компании, удовлетворяя при этом трудовые и материальные ограничения, а также 3 дополнительных ограничения, перечисленных выше.
До сих пор я сделал следующее.
Я определяю Xa, Xb и Xc как произведенные количества a, b и c. Я ввожу бинарные переменные следующим образом:
Ya = 1, если Xa > 0, 0 в противном случае.
Yb = 1, если Xb > 0, 0 в противном случае.
Yc = 1, если Xc > 0, 0 в противном случае.
Тогда проблема:
максимизировать 200Xa + 300Xb + 400Xc
s.t.
Xa >= 0, Xb >= 0, Xc >= 0
Ya in {0,1}, Yb in {0,1}, Yc in {0,1}
3Xa + 6Xb + 10Xc < = 12,000
6Xa + 5Xb + 8Xc < = 12,000
Xa >= 100Ya
Xb >= 80Yb
Как сформулировать последнее дополнительное ограничение?
Обновлять:
После еще нескольких исследований. Ха + Xb ‹= 120 + M(1-Yc). Где M достаточно велико, чтобы Xa + Xb не было искусственно ограничено за пределами материалов и трудовых ограничений. Оставьте это на случай, если кому-то еще это может помочь.
M
выбирается как минимальное значение, которое не отсекает никаких возможных решений. Фактическое значение зависит от вашей структуры проблемы. ЗдесьM = min{12000/3, 12000/5} - 120
является хорошим кандидатом (почему?) Современные решатели в настоящее время довольно хорошо справляются с уточнением больших значений M, но все же формулировка задачи с использованием маленького большого M никогда не помешает. - person Ioannis   schedule 25.04.2018Ya = Yb = 0
иXa, Xb > 0
в оптимальном решении. Вы применили этоYa = 1 --> Xa >= 100
, но не применилиYa = 0 --> Xa = 0
. Я надеюсь, вы это поймете :) Наконец, кажется, что вы не можете произвести все A , B и C на положительных уровнях, поэтому мы могли бы также добавитьYa + Yb + Yc <= 2
(если вы не ожидаете, что ваши данные изменятся). - person Ioannis   schedule 25.04.2018