Saltar al contenido

Restricciones condicionales de programación lineal entera

Hola, tenemos la solución a tu pregunta, deslízate y la verás un poco más abajo.

Solución:

La transitividad se puede manejar de la siguiente manera:

$$(1−x_i,j) + (1−x_j,k) ge (1−x_i,k)tag1$$

como se explica por ejemplo en el párrafo $2.2$ de esta referencia.

Me gustaría agregar que (1), expresado bajo la forma equivalente:

$$x_i,j+x_j,k-x_i,k leq 1$$

posee una formulación lógica equivalente (¿tiene alguna práctica del lenguaje Prolog?) Bajo la siguiente “cláusula de Horn”:

$$lno x_i,j lor lno x_j,k lor x_i,k$$

(ver páginas 11 y 12 de esta referencia).

Observación: nada sorprendente de hecho porque esta cláusula expresa el hecho de que:

$$x_i,j & x_j,k implica x_i,k$$

Personalmente he estado programando con Prolog; a diferencia de su reputación (con la condición de usar buenas implementaciones como SWI-Prolog), puede ser una alternativa eficiente para trabajar con variables booleanas si no se tienen demasiadas…

Puede obtener la restricción a través de la forma normal conjuntiva de la siguiente manera:
$$ (x_i,j land x_j,k) implica x_i,k \ lno (x_i,j land x_j,k) lor x_ i,k \ lnot x_i,j lor lnot x_j,k lor x_i,k \ (1- x_i,j) + (1- x_ j,k) + x_i,k ge 1 \ x_i,j + x_j,k – x_i,k le 1 $$
Solo necesita hacer cumplir estas restricciones para $i < j < k$.

Recuerda dar visibilidad a esta división si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *