Formulación LP para condiciones if

10

Tengo el siguiente LP:

/* Función objetiva */
min: 1 w + 2 x + 0,5 y + z;

/ * Límites variables * /
w + x <= T1;
w + y = U1;
x + z = U2;
T1 = 50;
U1 = 70;
U2 = 25;

En este caso, U1 + U2> T1 y la solución óptima es y = 70 y z = 25. Quiero hacer cumplir la condición de que a las variables w y x se les asignen valores antes de asignar valores a y y z. Si U1 + U2 <T1, entonces solo quiero que w y x tengan valores e y = z = 0. ¿Hay alguna manera de imponer tal restricción en un LP o un MILP?

Bala
fuente
no estoy seguro de por qué el voto negativo: es una pregunta razonable, aunque limitada en LPs
Suresh Venkat

Respuestas:

11

Aquí hay respuestas a sus dos preguntas. Los detalles dependerán de qué solucionador esté utilizando:

  • Asegurarse de que y son valores asignados antes de y menudo se puede hacer mediante programación al expresar el orden de las variables utilizado por el solucionador. Es decir, especificar qué variables el solucionador intenta encontrar primero los valores. Esto es posible, por ejemplo, en el solucionador de choco (que es un solucionador de problemas de satisfacción de restricciones (CSP) no uno para LP o MILP), aunque estoy seguro de que otros solucionadores también ofrecen esta posibilidad.x y zwxyz

  • El kit de programación lineal GNU en realidad tiene una if-then-elseconstrucción para expresar condicionales. Busque "condicional" en el manual . Usted puede envolver las cláusulas Usted está interesado en tal declaración en una: if U1 + U2 < T2 then y = 0 and z = 0 else true. (Tenga en cuenta que en realidad no he intentado esto, por lo que la sintaxis puede ser incorrecta).

  • Una respuesta alternativa a la segunda pregunta aprovecha el hecho de que , y son constantes. Simplemente, tenga dos variantes del problema LP, una para cuando y otra para cuando .U 2 T 1 U 1 + U 2 < T 1 U 1 + U 2 T 1U1U2T1U1+U2<T1U1+U2T1

Dave Clarke
fuente
Gracias por las opciones Iré con la opción 3 por ahora.
Bala