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?
linear-programming
Bala
fuente
fuente
Respuestas:
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 zw x y z
El kit de programación lineal GNU en realidad tiene una
if-then-else
construcció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 1U1 U2 T1 U1+U2<T1 U1+U2≥T1
fuente