Aprendizaje Interactivo de Teoría de Grafos
Aprendizaje Interactivo de Teoría de Grafos
Guest User
Using app without sign in
Solucionador de localización de instalaciones
Decide dónde abrir instalaciones minimizando coste de apertura y de servicio
Selecciona un algoritmo y genera pasos para comenzar la visualización
El problema de localización de instalaciones elige dónde abrir instalaciones, como almacenes o clínicas, para atender un conjunto de puntos de demanda a coste total mínimo, equilibrando los costes de apertura con las distancias de servicio al cliente. La mayoría de las variantes, incluidas k-mediana y k-centro, son NP-difíciles.
Los solucionadores prácticos combinan varias ideas. Los algoritmos voraces abren la instalación con la mejor razón coste por demanda cubierta y logran garantías de aproximación demostrables. La búsqueda local intercambia instalaciones abiertas y cerradas mientras haya mejora posible. Las soluciones exactas para tamaños moderados usan programación entera mixta, y las instancias grandes usan relajación lagrangiana o heurísticas basadas en agrupamiento como k-means para sembrar sitios candidatos.
La localización de instalaciones decide la ubicación de almacenes y centros de distribución en cadenas de suministro, la cobertura de torres de telefonía y cargadores de vehículos eléctricos, la ubicación de hospitales y parques de bomberos para la respuesta de emergencia y la colocación de servidores de entrega de contenido. Es un problema emblemático de la investigación de operaciones y la analítica logística.
El problema equilibra dos costes que tiran en direcciones opuestas: abrir instalaciones cuesta dinero, pero cada instalación abierta acorta el trayecto hasta los clientes. La formulación exacta es un programa entero; en la práctica se usa una heurística voraz con mejora local.
// Exacto (pequeño): probar cada subconjunto de sitios
mejor = infinito
para cada subconjunto no vacío S de sitios candidatos:
coste = suma de costeApertura[f] para f en S
para cada cliente c:
coste += min sobre f en S de costeServicio[f][c]
mejor = min(mejor, coste)
// Voraz (grande): abrir la instalación que más ahorra
S = {}
repetir:
f* = el sitio cerrado que más reduce el coste total
si abrir f* no reduce el coste: parar
S = S + {f*}
// Después: búsqueda local con intercambio, apertura y cierreLa clave es que los clientes siempre se asignan a la instalación abierta más barata para ellos, así que el único grado de libertad real es qué subconjunto abrir. Eso convierte un problema aparentemente continuo en uno combinatorio sobre subconjuntos, y es también lo que lo hace NP-difícil: hay 2 elevado a n subconjuntos y ninguna forma conocida de recorrerlos en tiempo polinómico.
Decide qué instalaciones abrir con tres sitios candidatos y cuatro clientes, comparando todos los subconjuntos.
Grafo de ejemplo: Costes de apertura: F1 vale 10, F2 vale 8, F3 vale 6. Costes de servicio por cliente: F1 sirve a C1 y C2 por 2 y 3 pero a C3 y C4 por 9 cada uno; F2 sirve a C3 y C4 por 2 y 3 pero a C1 y C2 por 8 y 7; F3 sirve a los cuatro por 5 cada uno.
El óptimo es abrir únicamente F3, con coste total 26. Merece la pena detenerse en esto: F3 no es la instalación preferida de ningún cliente, y sin embargo el subconjunto óptimo es exactamente esa. Una heurística que asignara cada cliente a su instalación de servicio más barato abriría F1 y F2 y llegaría a 28. El compromiso entre coste de apertura y coste de servicio es lo único que importa, y razonar cliente a cliente no lo captura.
Tiempo: NP-difícil; exacto O(2^n · n · m) · Espacio: O(n · m)
Con n sitios candidatos y m clientes, la enumeración exacta prueba los 2 elevado a n subconjuntos no vacíos y, para cada uno, asigna los m clientes a su instalación abierta más barata en O(n) por cliente, lo que da O(2 elevado a n por n por m). Eso solo es practicable hasta unos 20 o 25 sitios. El problema es NP-difícil, así que no se espera un algoritmo polinómico exacto. La buena noticia es que la variante sin capacidades sí admite aproximación: existen algoritmos con factor constante en torno a 1,5 basados en redondeo de programación lineal y en búsqueda local, lo cual contrasta con la coloración de grafos, donde no se conoce ninguna aproximación decente. El voraz que abre en cada paso la instalación que más ahorra tiene garantía logarítmica y va bien en la práctica.
La variante correcta depende de si las instalaciones tienen límite de capacidad y de cuántos clientes hay.
| Alternativa | Prefiérela cuando | Coste |
|---|---|---|
| Enumeración exacta o programación entera | Menos de unos 25 sitios candidatos y necesitas el óptimo demostrable. | O(2^n · n · m) |
| Voraz más búsqueda local | Instancias grandes. Abrir por ahorro máximo y luego intercambiar, abrir y cerrar sitios. | O(n^2 · m) por pasada |
| Localización con capacidades | Cada instalación tiene un límite de demanda que puede atender. Bastante más difícil. | NP-difícil |
| K-medias | No hay costes de apertura y solo quieres agrupar clientes en k zonas geográficas. | O(n · k · i · d) |
| K-medianas | Quieres abrir exactamente k instalaciones sin coste de apertura, minimizando la distancia total. | NP-difícil |
Leer el artículo completo: Operations Research and Graph Theory
Algoritmos relacionados: Agrupamiento K-Means, Rutas con Múltiples Vehículos, Rutas de Vehículos con Capacidad