learngraphtheory.org

Aprendizaje Interactivo de Teoría de Grafos

Guest User

Using app without sign in

Recursos de estudio
Lleva la teoría de grafos más allá de la pantalla
Descarga inmediata·Acceso de por vida
Selección de Algoritmo

Solucionador TSP Online

Solucionador en línea del problema del viajante

Halla la ruta más corta que visita todas las ciudades y regresa al inicio

Tiempo: O(n^2 · 2^n)
Espacio: O(n · 2^n)
Caso de Uso: Optimización de rutas de entrega, logística, planificación de trayectos
Ejecución de Algoritmo

Selecciona un algoritmo y genera pasos para comenzar la visualización

Acerca de Problema del Viajante

El problema del viajante (TSP) pide el recorrido más corto que visita cada ciudad exactamente una vez y regresa al inicio. Es el problema NP-difícil más famoso de la optimización combinatoria, simple de enunciar pero exponencialmente difícil de resolver de forma exacta.

Cómo funciona

La solución por programación dinámica de Held-Karp almacena, para cada subconjunto de ciudades y cada ciudad final, la forma más barata de visitar ese subconjunto. Cada estado se extiende con una ciudad no visitada a la vez, dando O(n al cuadrado por 2 elevado a n) tiempo, exacto pero solo factible para unas 20 ciudades. Las instancias mayores recurren a heurísticas como el vecino más cercano y 2-opt, o a metaheurísticas y solucionadores de ramificación y acotación que alcanzan recorridos casi óptimos para miles de ciudades.

Aplicaciones

El TSP modela la planificación de rutas de reparto, la preparación de pedidos en almacén, el taladrado de circuitos impresos, el ensamblaje de secuencias de ADN y la programación de observaciones de telescopios. Ancla el estudio de la NP-completitud y los algoritmos de aproximación, y los entrevistadores lo usan para sondear la comprensión de las clases de complejidad y la programación dinámica sobre máscaras de bits.

Pseudocódigo

No existe un algoritmo exacto rápido para el problema del viajante, así que la respuesta práctica tiene dos etapas: construir una ruta decente deprisa y luego mejorarla localmente hasta que deje de mejorar.

// Etapa 1: vecino más cercano, construye una gira en O(n^2)
gira = [inicio]
mientras quede alguna ciudad sin visitar:
    siguiente = ciudad sin visitar más cercana a gira.última
    gira.añadir(siguiente)
gira.añadir(inicio)             // cerrar el ciclo

// Etapa 2: 2-opt, elimina cruces hasta que nada mejore
repetir hasta que no haya mejora:
    para cada par de aristas (a,b) y (c,d) de la gira:
        si dist(a,c) + dist(b,d) < dist(a,b) + dist(c,d):
            invertir el tramo de la gira entre b y c

// Exacto, para n pequeño: programación dinámica Held-Karp
dp[S][j] = mín sobre k en S\{j} de dp[S\{j}][k] + dist(k, j)

Vale la pena entender el movimiento 2-opt de forma geométrica. Si dos aristas de una gira se cruzan, intercambiar sus extremos e invertir el tramo intermedio siempre acorta la gira por la desigualdad triangular. Así que 2-opt es, literalmente, la operación de deshacer los nudos de un lazo de cuerda.

Ejemplo resuelto, paso a paso

Aplica vecino más cercano y luego 2-opt a cuatro ciudades situadas en las esquinas de un rectángulo, donde la elección voraz puede fallar de forma demostrable.

Grafo de ejemplo: Ciudades A(0,0), B(0,3), C(4,3), D(4,0). Distancias: A-B 3, B-C 4, C-D 3, A-D 4, y ambas diagonales A-C y B-D valen 5.

  1. Vecino más cercano desde A. La ciudad más próxima a A es B, a distancia 3. Ve a B.
  2. Desde B. Quedan sin visitar C a 4 y D a 5. Toma C.
  3. Desde C. Solo queda D, a 3. Tómala y luego cierra de vuelta a A con coste 4.
  4. Resultado voraz. La gira A a B a C a D a A cuesta 3 + 4 + 3 + 4 = 14. Resulta ser óptima aquí, así que perturbémosla: supón que la heurística hubiera producido A a C a B a D a A, con coste 5 + 4 + 5 + 4 = 18, una gira cuyas aristas se cruzan.
  5. Reparación con 2-opt. Examina las aristas A-C y B-D. Ahora mismo aportan 5 + 5 = 10. Reconectar como A-B y C-D da 3 + 3 = 6, una mejora de 4, así que invierte el tramo entre C y B. La gira pasa a ser A a B a C a D a A con coste 14, y ningún otro movimiento 2-opt ayuda.

La gira óptima es el perímetro del rectángulo con coste 14, no ninguna de las giras con diagonales cruzadas a 18. Esta es toda la historia de las heurísticas para TSP en miniatura: una pasada constructiva rápida se acerca, y la búsqueda local elimina los cruces que introdujo la elección voraz.

Complejidad y de dónde sale

Tiempo: O(n^2) heurístico, O(n^2 · 2^n) exacto · Espacio: O(n^2) heurístico, O(n · 2^n) exacto

Vecino más cercano recorre todas las ciudades restantes en cada uno de los n pasos, lo que da O(n al cuadrado). Cada barrido de 2-opt prueba los O(n al cuadrado) pares de aristas y se repite hasta que no hay mejora, lo cual es rápido en la práctica pero carece de cota útil en el peor caso. Held-Karp es exacto y llena una tabla indexada por subconjunto y extremo: hay 2 elevado a n subconjuntos por n extremos, y cada entrada cuesta O(n), de ahí O(n al cuadrado por 2 elevado a n) en tiempo y O(n por 2 elevado a n) en memoria. Eso supone un muro duro en torno a n = 20 o 25, ya que 2 elevado a 25 por 25 ya supera los mil millones de entradas. La fuerza bruta sobre todas las permutaciones es mucho peor, con O(n factorial).

Cuándo usar Problema del Viajante y cuándo no

El método adecuado depende casi por completo de cuántas ciudades tengas y de si necesitas un óptimo demostrable.

AlternativaPrefiérela cuandoCoste
Programación dinámica Held-KarpMenos de unas 20 ciudades y necesitas una gira óptima garantizada.O(n^2 · 2^n)
ChristofidesLas distancias cumplen la desigualdad triangular y quieres una cota demostrada: nunca peor que 1,5 veces el óptimo.O(n^3)
Vecino más cercano más 2-optDe cientos a miles de ciudades y basta con una gira a pocos puntos porcentuales del óptimo.O(n^2) por pasada
Lin-KernighanInstancias grandes donde la calidad importa más que el esfuerzo de implementación. El estado del arte práctico.cerca de O(n^2.2)
Solucionadores de rutas de vehículosEl problema real tiene varios vehículos, capacidades o ventanas horarias. Entonces no es TSP en absoluto.variable

Errores frecuentes

  • Esperar una respuesta exacta a gran escala. TSP es NP-difícil. No se conoce ningún algoritmo que resuelva 1.000 ciudades de forma exacta en tiempo razonable, y encontrar uno resolvería P frente a NP. Si una herramienta afirma dar el óptimo exacto en una instancia grande y deprisa, está devolviendo una gira heurística.
  • Fiarse solo del vecino más cercano. La construcción voraz suele quedar un 25 por ciento por encima del óptimo y puede ser arbitrariamente mala en el peor caso, porque las últimas ciudades que quedan obligan a aristas muy largas. Acompáñala siempre de búsqueda local.
  • Aplicar Christofides a distancias no métricas. Su garantía de aproximación de 1,5 depende de la desigualdad triangular. Con calles de sentido único, costes asimétricos o rutas prohibidas, la cota sencillamente no se cumple.
  • Confundir TSP con el problema de rutas de vehículos. TSP es un vehículo, sin capacidad ni ventanas horarias. En cuanto añades una flota o límites de carga necesitas métodos de VRP o CVRP; una gira de TSP partida en trozos no es una solución válida de VRP.
  • Ignorar que la ciudad de partida da igual. Una gira de TSP es un ciclo, así que rotarla no cambia nada. Las implementaciones que tratan el punto de partida como significativo malgastan trabajo y pueden informar de costes distintos para giras idénticas.

Preguntas frecuentes

¿Qué es el problema del viajante?
Dado un conjunto de ciudades y la distancia entre cada par, el TSP pide la ruta más corta que visite cada ciudad exactamente una vez y regrese al punto de partida. Es uno de los problemas más estudiados de la optimización combinatoria y es NP-difícil, lo que significa que no se conoce ningún algoritmo exacto en tiempo polinómico.
¿Por qué es tan difícil resolver el TSP?
El número de giras distintas crece como (n-1)!/2, así que 20 ciudades ya permiten unos 60 billones de giras. Ningún algoritmo conocido evita el trabajo exponencial en el peor caso. El mejor método exacto, la programación dinámica de Held-Karp, corre en O(n al cuadrado por 2 elevado a n) y se vuelve impracticable pasadas unas 25 ciudades.
¿Cuál es el mejor algoritmo para el TSP?
Depende del tamaño. Por debajo de unas 20 ciudades, Held-Karp da el óptimo exacto. Para instancias métricas, Christofides garantiza una gira dentro de 1,5 veces el óptimo. Para instancias reales grandes, Lin-Kernighan o vecino más cercano seguido de 2-opt dan giras a pocos puntos porcentuales del óptimo en segundos.
¿Qué hace realmente 2-opt?
Elimina repetidamente dos aristas de la gira y reconecta los dos caminos resultantes al revés, conservando el cambio si la gira se acorta. Geométricamente elimina cruces: siempre que dos aristas de una gira se cruzan, la reconexión sin cruce es más corta por la desigualdad triangular.
¿Cuál es la diferencia entre el TSP y el problema de rutas de vehículos?
El TSP encamina un solo vehículo por todas las ciudades sin más restricción que visitar cada una una vez. El VRP encamina una flota desde un depósito, normalmente con límites de capacidad y a menudo con ventanas horarias y turnos de conductor. El TSP es el caso particular del VRP con un vehículo y capacidad ilimitada.

Leer el artículo completo: The Traveling Salesperson Problem Explained

Algoritmos relacionados: Camino Hamiltoniano, Rutas con Múltiples Vehículos, Rutas de Vehículos con Capacidad

Controles Interactivos
Acciones Básicas
Doble Clic → Agregar Nodo
Arrastrar → Mover Nodos
Shift + Clic → Conectar Nodos
Clic Derecho → Menú Contextual
Avanzado
Ctrl + Clic → Multi-Selección
Tecla Suprimir → Eliminar Seleccionados
Doble Clic en Arista → Editar Peso
Ctrl + Arrastrar → Desplazar Vista

Zoom Controls

100%
Nodos: 4
Aristas: 4