У меня есть следующий LP:
/ * Объективная функция * / мин: 1 ш + 2 х + 0,5 у + z; / * Переменные границы * / w + x <= T1; w + y = U1; х + z = U2; Т1 = 50; U1 = 70; U2 = 25;
В этом случае U1 + U2> T1 и оптимальное решение - y = 70 и z = 25. Я хочу обеспечить условие, чтобы переменным w и x были присвоены значения, прежде чем присваивать значения y и z. Если U1 + U2 <T1, то я хочу, чтобы только w и x имели значения, а y = z = 0. Есть ли способ применить такое ограничение в LP или MILP?
Ответы:
Вот ответы на два ваших вопроса. Детали будут зависеть от того, какой решатель вы используете:
Набор для линейного программирования GNU фактически имеет
if-then-else
конструкцию для выражения условных выражений. Ищите «условный» в руководстве . Вы можете обернуть пункты вы заинтересованы в в таком заявлении:if U1 + U2 < T2 then y = 0 and z = 0 else true
. (Обратите внимание, что я на самом деле не пробовал это, поэтому синтаксис может быть неправильным.)источник