Problema del conjunto de cobertura

De testwiki
Ir a la navegación Ir a la búsqueda

El problema del Set Covering, también conocido por sus siglas SCP es un problema clásico en combinatoria, ciencias de la computación y teoría de la complejidad computacional. Es un problema que ha llevado al desarrollo de técnicas fundamentales para el campo de los algoritmos de aproximación.[1] También es uno de los problemas de la Lista de 21 problemas NP-completos de Karp cuya NP-completitud fue demostrada en 1972.

Dado un conjunto de elementos {1,2,...,m} (llamado universo) y n conjuntos cuya unión comprende el universo, el problema del conjunto de cobertura consiste en identificar el menor número de conjuntos cuya unión aun contiene todos los elementos del universo. Por ejemplo, sea U={1,2,3,4,5} y los conjuntos S={{1,2,3},{2,4},{3,4},{4,5}}. Claramente, la unión de todos los conjuntos de S contiene todos los elementos de U. Sin embargo, podemos cubrir todos los elementos con el siguiente conjunto de elementos, con menor número de elementos: {{1,2,3},{4,5}}.

Definición formal

Formalmente, se puede definir un problema de cobertura de conjuntos de la siguiente forma: Sea el universo 𝒰 y la familia 𝒮 de subconjuntos de 𝒰, una cobertura es una subfamilia 𝒞𝒮 de conjuntos cuya unión es 𝒰.

Problema de decisión de cobertura de conjuntos

En el problema de decisión de cobertura de conjuntos, la entrada es un par (𝒰,𝒮) y un entero k y la pregunta es si existe un conjunto de cobertura de tamaño k o menos.

Esta versión es un problema NP-completo.

Problema de optimización de cobertura de conjuntos

En el problema de optimización de cobertura de conjuntos, la entrada es un par (𝒰,𝒮) y la tarea es encontrar un conjunto de cobertura que use los menos conjuntos posibles.

Esta versión es un problema NP-hard.

Formulación con programación lineal entera

El problema de cobertura de conjuntos se puede formular como la siguiente programación lineal de enteros (ILP por su nombre en inglés).[2]

minimizar S𝒮c(S)xS (minimizar el coste total)
cumpliendo S:eSxS1 para todo e𝒰 (cubriendo todos los elementos del universo)
xS{0,1} para todo S𝒮. (todo conjunto, esté o no en conjunto de cobertura)

Esta ILP pertenece a la clase más general de ILPs para problemas de cobertura. La diferencia de integralidad de esta ILP es, como máximo, logn, por lo tanto su relajación ofrece un algoritmo de aproximación de factor logn para el problema de cobertura mínima de conjuntos (donde n es el tamaño del universo).[3]

Algoritmo voraz

El algoritmo voraz para cobertura de conjuntos elige conjuntos de acuerdo a una regla: en cada paso, elegir el conjunto que tiene el mayor número de elementos no elegidos. Se puede demostrar que este algoritmo consigue un ratio de aproximación de H(s),[4] donde s es el tamaño del conjunto a cubrir y H(n) es el n-esimo número armónico:

H(n)=k=1n1klnn+1

Ejemplo del algoritmo voraz para k=3

Hay un ejemplo estándar donde el algoritmo voraz obtiene un ratio de aproximación de log2(n)/2. El universo consta de n=2(k+1)2 elementos. El sistema de conjuntos consiste en k pares de conjuntos disjuntos S1,,Sk con tamaños 2,4,8,,2k respectivamente, así como dos conjuntos disjuntos adicionales T0,T2, cada uno de los cuales contiene la mitad de los elementos de cada Si. Con estas entradas, el algoritmo voraz coge los conjuntos Sk,,S1, en ese orden, mientras que la solución óptima consistiría en escoger solamente T0 y T1.

Un ejemplo de estas entradas para k=3 se puede observar en la figura de la derecha.

Estos resultados tan poco cercanos a la solución óptima muestran que el algoritmo voraz es esencialmente el mejor algoritmo de aproximación en tiempo polinómico para el problema de cobertura de conjuntos, entre supuestos de complejidad plausible.

Sistemas de baja frecuencia

Si cada elemento se encuentra en f conjuntos como máximo, se puede encontrar una solución en tiempo polinómico que se aproxime al óptimo con dentro de un factor f usando relajación de programación lineal.[5]

Resultados poco óptimos

Plantilla:Harvtxt demostraron que el problema de cobertura de conjuntos no puede aproximarse en tiempo polinómico dentro de un factor de 12log2n0.72lnn, a menos que NP tenga algoritmos de tiempo cuasi-polinómico. Feige (1998) mejoró este límite a (1o(1))lnn bajo las mismas condiciones, que prácticamente coincide con el ratio de aproximación del algoritmo voraz.Plantilla:Harvtxt estableció la frontera inferior de clnn, donde c es una constante, asumiendo que P=NP.[6] Un resultado similar, pero con mayor valor de c fue recientemente probado por Plantilla:Harvtxt.

Ejemplo

Figura 1: Ejemplo de set covering para la cobertura de comunas.

Una estación de bomberos tiene la capacidad de cubrir las emergencias tanto de su comuna como de las comunas adyacentes a ella, por ejemplo una estación construida en la comuna 1 (Figura 1) podrá cubrir las emergencias de todo su vecindario, es decir, de la comuna 1, comuna 2, comuna 3 y comuna 5. Se necesitan construir tantas estaciones de bomberos como sea necesario para cubrir todas las comunas ante posibles emergencias, cuidando que todas las comunas estén cubiertas por al menos una estación (una o más), minimizando el número de estaciones construidas.

Modelo matemático

Sea:

xi={1se construye estación en la comuna i0en otro caso

podemos formular el problema de la siguiente forma:

Mini=112xi

cumpliendo las siguientes restricciones:

x1+x2+x3+x51

x2+x1+x51

x3+x1+x4+x5+x6+x7+x81

x4+x3+x5+x6+x111

x5+x1+x2+x3+x4+x10+x111

x6+x3+x4+x8+x111

x7+x3+x8+x121

x8+x3+x6+x7+x9+x11+x121

x9+x8+x10+x11+x121

x10+x5+x9+x111

x11+x4+x5+x6+x8+x9+x101

x12+x7+x8+x91

Solución óptima: En verde, las comunas cubiertas por la estación en 5; en amarillo, las cubiertas por la estación en 8; y en azul, las cubiertas 2 veces.

Solución

Una solución para este problema sería construir estaciones en las comunas 5 y 8. Con un total de 2 estaciones construidas se lograría cubrir las necesidades de todas las comunas del problema.

Véase también

Referencias

Plantilla:Listaref

Plantilla:Control de autoridades