Es un problema en el cual se tiene:
- Un conjunto de variables enteras
- Una función a maximizar
- Un conjunto de desigualdades
- Un entero B para limitar la función a maximizar
Problema de decisión: ¿Existe alguna asignación de los enteros de tal forma que se cumplan las desigualdades y se cumpla \(f(v) \geq B\)?
Soluciones:
- \(v_1 = 1, v_2 = 0\), \(f(v) = 0\) No cumple por \(0 \geq 3\)
- \(v_1 = 1, v_2 = 1\), \(f(v) = 2\) No cumple por \(2 \geq 3\)
- \(v_1 = 1, v_2 = 2\), \(f(v) = 4\) Cumple \(4 \geq 3\)
- \(v_1 = 2, v_2 = 0\), \(f(v) = 0\) No cumple
- \(v_1 = 2, v_2 = 1\), \(f(v) = 2\) No cumple
Modelo en MiniZinc sería:
var int: v1;
var int: v2;
int: B = 3;
constraint v1 >= 1;
constraint v2 >= 0;
constraint v1+v2 <= 3;
constraint 2*v2 >= B;
solve maximize 2*v2;
Demostración de que IP es NP-Completo¶
- Probar que \(IP \in NP\)
- Probar que \(IP \in NP-Hard\)
- Seleccionar un problema A NP-Completo conocido
- Describir cómo una instancia de A se transforma en B, es decir, \(A \leq_{p} IP\)
- Probar que este algoritmo se ejecuta en tiempo polinomial (reducción)
- Probar que el algoritmo es correcto
- Instancias positivas de A son instancias positivas de B
- Instancias negativas de A son instancias negativas de B
Demostrar que IP es NP¶
Debemos certificar que una solución de IP se puede verificar en tiempo polinomial.
Dado que se tienen \(n\) variables y \(m\) restricciones, las cuales pueden tener un máximo de \(n\) variables: \(O(nm)\).
¿Cuánto tiempo toma verificar \(f(v) \geq B\)? Es \(O(n)\).
En total \(O(nm)+O(n) = O(nm)\). Por lo tanto, este problema es NP.
Demostrar que es NP-Completo¶
- \(3-SAT \leq_p IP\) Partimos de este supuesto.
- Para cada variable del 3-SAT vamos a crear dos variables \(x\) y \(\bar{x}\).
- Vamos a generar las restricciones:
- \(0 \leq x \leq 1\) y \(0 \leq \bar{x} \leq 1\)
- \(1 \leq x + \bar{x} \leq 1\)
- Tenemos las cláusulas de tamaño 3 \((l_1 \vee l_2 \vee l_3)\) y vamos a crear la restricción \(l_1 + l_2 + l_3 \geq 1\).
- La función objetivo no es importante dado que solo se busca asignar variables: \(f(v) = v_1\), \(B = 0\).
Ejemplo¶
Tenemos un 3-SAT con 4 variables \((v_1,v_2,v_3,v_4)\). Tenemos las cláusulas:
Transformar a IP:
Restricciones:
Función objetivo:
Estudio de la reducción¶
¿Se realiza en tiempo polinomial?¶
Asumiendo un 3-SAT con \(n\) variables y \(m\) cláusulas.
- ¿Cuántas variables se crean en IP? \(2*n = O(n)\)
- ¿Cuántas restricciones se crean?
- 2 por el número de variables: \(O(n)\)
- 1 por la suma de las variables (variable y su negativa): \(O(n)\)
- Por el número de cláusulas: \(O(m)\)
- Función objetivo: \(O(1)\) En total la reducción se realiza en tiempo \(O(n+m)\), polinomial.
Instancias positivas de 3-SAT son instancias positivas en IP¶
Para que una instancia sea positiva en 3-SAT debe cumplir que todos los literales deben dar verdadero, al menos una variable en cada literal debe dar verdadero, o 1 en la transformación.
- Las restricciones \(0 \leq x_i \leq 1\) SIEMPRE SE CUMPLEN.
- Las restricciones \(1 \leq x_i + \bar{x_i} \leq 1\) fuerzan a que una sea cero y la otra 1.
- Si los literales se cumplen, debe existir en cada uno de ellos una variable que dé VERDADERO o 1, eso quiere decir que la suma TIENE que ser mayor o igual que 1, satisfaciendo las restricciones de los literales.
Instancias negativas de 3SAT son instancias negativas en IP¶
Para que el 3-SAT no se satisfaga, debe pasar que al menos una cláusula dé siempre FALSO, eso significa que todas sus variables son FALSO, por ende su suma será igual a 0, lo que no satisface \(0 \geq 1\).
Ejemplo adicional¶
Supongamos el 3-SAT con variables \((a,b,c)\) y cláusulas \((a \vee b \vee c)\), \((\bar{a} \vee \bar{b} \vee c)\).
Transformación a IP: - Variables: \(x_a, x_b, x_c, \bar{x_a}, \bar{x_b}, \bar{x_c}\) - Restricciones: - \(0 \leq x_a \leq 1\), \(0 \leq x_b \leq 1\), \(0 \leq x_c \leq 1\) - \(0 \leq \bar{x_a} \leq 1\), \(0 \leq \bar{x_b} \leq 1\), \(0 \leq \bar{x_c} \leq 1\) - \(x_a + \bar{x_a} = 1\), \(x_b + \bar{x_b} = 1\), \(x_c + \bar{x_c} = 1\) - \(x_a + x_b + x_c \geq 1\) - \(\bar{x_a} + \bar{x_b} + x_c \geq 1\) - Función objetivo: \(f(x) = x_a\), \(B = 0\)