Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Proyecto PN Vs NP PDF
Proyecto PN Vs NP PDF
Título
Autor/es
Director/es
Facultad
Grado en Matemáticas
Departamento
Curso Académico
2014-2015
El problema del viajante. Métodos de resolución y un enfoque hacia la Teoría
de la Computación, trabajo fin de grado
de Salvador Peñalva García, dirigido por Francisco Javier Pérez Lázaro (publicado por la
Universidad de La Rioja), se difunde bajo una Licencia
Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported.
Permisos que vayan más allá de lo cubierto por esta licencia pueden solicitarse a los
titulares del copyright.
© El autor
© Universidad de La Rioja, Servicio de Publicaciones, 2015
publicaciones.unirioja.es
E-mail: publicaciones@unirioja.es
Facultad de Ciencias, Estudios Agroalimentarios e Informática
Alumno:
Tutores:
Logroño, Julio,2015
Agradecimientos
Resumen
En este trabajo nos dedicaremos al estudio del problema del viajante de comercio (TSP
por sus siglas en inglés). Este problema trata de determinar el camino que un comerciante que
quiere visitar n ciudades debe seguir para que la distancia recorrida sea mı́nima, sabiendo que
tiene que empezar y terminar en la misma ciudad.
Tras hacer un breve recorrido histórico sobre este problema y presentar dos formulaciones
matemáticas del mismo, vamos a mostrar dos métodos de resolución exactos: uno basado en
los métodos de ramificación y acotación y el otro en los planos de cortes. Este último método
desarrollado por Dantzig, Fulkerson y Johnson en 1954, supuso un salto en la historia del
problema del viajante pues fue el primero capaz de resolver un ejemplo con un número alto
de ciudades y además fue precursor del método general de los planos de corte desarrollado
por Gomory para los problemas de programación lineal entera. Posteriormente mostramos tres
heurı́sticas, entre las que se encuentra la de Christofides, para obtener soluciones cercanas al
resultado óptimo de manera eficiente.
En el último capı́tulo, hacemos un enfoque del problema del viajante en la teorı́a de la
complejidad. Para ello usamos máquinas de Turing para describir los conjuntos de problemas
de decisión P y NP y demostramos el teorema de Cook quien probó que el problema de satis-
fabilidad es NP -Completo. Con este resultado seremos capaces de ver que el problema de los
ciclos hamiltonianos es también NP -Completo, hecho imprescindible para poder concluir que
el problema del viajante es NP -duro, es decir, que todo problema en NP se transforma en un
tiempo polinómico en el problema del viajante.
Abstract
In this work, we study the Travelling Salesman Problem (TSP ). The aim of this problem, is
to find the tour that a salesman, who wants to visit n cities, should follow in order to minimize
the total distance and return to the starting point.
After showing the development of this problem throughout history and explaining two dif-
ferent formulations for the TSP, we will show two exact resolution methods: the first one is
based on Branch and Bound method and the other uses cutting planes. The latter, developed
by Dantzig, Fulkerson and Johnson in 1945, represented a big breakthrough for the problem
because it succeeded in solving an example with a large number of cities. It was also a reference
to Gomory to introduce his cutting plane method to solve linear integer problems. Later, we
show three heuristic methods, among which is Christofides heuristic. These algorithms expect
to obtain close results to the optimum solution in a short period of time.
In the last chapter, we can see the TSP from the complexity theory perspective. We use
Turing Machines to describe decision problem groups P and NP and we prove Cook’s Theorem
which supports that Satisfiability Problem is NP -Complete. This will lead to the fact that
Hamiltonian circuit problem is also NP -Complete and will be essential to show that Travelling
Salesman Problem is NP -Hard, i.e., each NP problem transforms in polynomial time into the
TSP.
ii
Índice general
1. Introducción 1
1.1. El problema del viajante en la historia . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Aplicaciones del TSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5. TSP es NP-Duro 35
5.1. Máquinas de Turing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.1.1. Descripción de una máquina de Turing . . . . . . . . . . . . . . . . . . . . 37
5.2. Clases P y NP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.2.1. Transformaciones polinómicas y Completitud NP . . . . . . . . . . . . . . 41
5.3. El teorema de Cook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.3.1. 3-Satisfactibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.4. NP -Duro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
iii
iv ÍNDICE GENERAL
Capı́tulo 1
Dentro de los problemas de rutas, hay dos variantes: los problemas de rutas sobre nodos,
y los problemas de rutas sobre arcos. En el primer caso, la ruta óptima debe visitar todos los
nodos establecidos y en el segundo caso, se deben recorrer todos los arcos del grafo determinado
por el problema. Podemos ver una clasificación de los problemas de rutas en la Figura 1.1.
1
2 CAPÍTULO 1. INTRODUCCIÓN
4 Capı́tulo 1: Problemas de rutas
Restricciones
Demanda Nombre habitual del problema Otras restricciones
de capacidad
Viajante de Comercio
NO
TSP
Nodos
Problema de rutas de vehículos
SÍ Recogida/distribución
VRP
Los problemas de rutas sobre nodos tienen su origen en el siglo XIX cuando
el irlandés W.R. Hamilton y el británico T. Kirkman inventaron el denominado
“Icosian Game”. Este juego consistı́a en encontrar una ruta entre los 20 puntos del
juego usando sólo los caminos permitidos y regresando al nodo origen (una imagen
del juego original comercializado años más tarde puede encontrarse en la Figura
1.1). Obviamente, este juego no se centraba en la búsqueda del camino óptimo,
sino en la búsqueda deFigura
un camino
1.2: que visitase
Puentes de todos los nodos una única vez (años
Köningsberg
más tarde, este tipo de caminos o ciclos recibirı́an el nombre de Hamiltonianos
en honor
El problema a W.R.seHamilton).
anterior refiere a la búsqueda de caminos pero no a la ruta más óptima. En
ese sentido, el
La historia de los dos del
llamado Problema Cartero
grandes Chino de
problemas (CP P, Chinese
rutas Postman
sobre nodos Problem) busca
(el problema
un camino de distancia mı́nima que recorra todos los arcos de un grafo al menos una vez. Un
del viajante de comercio y los problemas de rutas de vehı́culos) está ı́ntimamente
método de resolución del CP P consiste en añadir arcos de coste mı́nimo hasta conseguir un
relacionada.
grafo euleriano 1 De problema
. Otro hecho, históricamente
de arcos es se el ha entendido
llamado el VRPdel
Problema como una gene-
Cartero Rural (RP P,
ralización
Rural Postman del TSP,encomo
Problem), se se
el que verá más un
busca adelante.
caminoEstos dos problemas
de mı́nima distanciaserán
que los
recorra sólo
alguno detemas
los arcos del grafo.
centrales de este primer capı́tulo del trabajo, por lo que información más
detallada sobre su historia, tipos y métodos de resolución puede encontrarse en
Aunque los problemas de rutas por arcos son sin duda un campo muy amplio e interesante,
sucesivas secciones.
en este trabajo nos vamos a centrar en los problemas de rutas por nodos, en particular en el
problema del viajante de comercio (TSP, Travelling Salesman Problem). Como veremos más
adelante, el TSP se entiende históricamente como un caso particular del problema de rutas de
1 Los grafos eulerianos, cuyo nombre se debe al matemático Leonhard Euler, son grafos que contienen ciclos
eulerianos, es decir que contienen al menos un ciclo que pasa por todas las aristas una sola vez.
1.1. EL PROBLEMA DEL VIAJANTE EN LA HISTORIA 3
vehı́culos (V RP , Vehicle Routing Problem), en el que se trata de averiguar las rutas óptimas
de una flota de transporte para dar servicio a unos clientes.
Vamos a ver una definición del problema del viajante (T SP ):
Un viajante quiere visitar n ciudades, pasando una y sólo una vez por cada una
de ellas, empezando por una ciudad origen en la que terminará el recorrido. Su-
pongamos que conoce la distancia entre cada par de ciudades. ¿Cuál es el recorrido
que debe seguir, para que la distancia total que recorra sea mı́nima?
Para explicar este problema, vamos a necesitar una serie de conceptos básicos que mostra-
remos a continuación.
Definición 1.1.1. Un grafo, es un par G = (V, A) donde V es un conjunto finito de elementos
llamados vértices y A es un conjunto de pares de vértices al los que llamaremos aristas o arcos.
Un ciclo, es una sucesión de vértices u1 , u2 , . . . , up ∈ V tales que u1 , u2 , . . . , up−1 son distin-
tos, up = u1 y (ui , ui+1 ) ∈ A. Si el ciclo contiene a todos los vértices de V , entonces se llama
ciclo hamiltoniano2 .
En realidad, el TSP se puede representar como un grafo con pesos en sus aristas y su reso-
lución se centra en encontrar un ciclo hamiltoniano de mı́nimo peso, entendiendo por peso a la
suma de los pesos de cada una de las aristas que pertenecen al ciclo.
El primer impreso que menciona al problema del viajante es del año 1832, y se titula: “El
viajante de comercio: cómo debe ser y qué debe hacer para conseguir comisiones y triunfar
en el negocio. Por un viajante de comercio veterano” [21]. Impreso en Alemania, trata de la
importancia de elegir un camino óptimo en una ruta de negocios aunque no menciona ningún
modelo matemático. Por otro lado, no se sabe a ciencia cierta quien fue el precursor del nombre
Travelling Salesman Problem (TSP), aunque en una entrevista que le hicieron a Merril Flood
(1984) [8], afirmó haberlo escuchado de A. W. Tucker, quien supuestamente lo habı́a oı́do
anteriormente de la boca de Hassler Whitney, de la Universidad de Princeton en el año 1931.
Fue durante esta época de los años 30, cuando se comenzó a trabajar propiamente sobre el
problema del viajante. Merril Flood, de la universidad de Harvard, quien se interesó en este
2 En honor al matemático irlandés Sir William Rowan Hamilton.
4 CAPÍTULO 1. INTRODUCCIÓN
problema cuando le propusieron encontrar la ruta óptima que debı́a seguir un autobús escolar,
tuvo un papel muy importante en la tarea de divulgación de este problema. Al mismo tiempo,
en Viena, Karl Menger enunció lo que se conocı́a como el problema del mensajero, que trataba
de encontrar el camino más corto que uniera un conjunto de puntos. Fue el propio Menguer [20]
quien intuyó, seguramente sin ser totalmente consciente, una importante propiedad del TSP :
este problema es NP-Duro, como demostraremos en un capı́tulo posterior. Además propuso lo
que más tarde llamarı́an el algoritmo del vecino más próximo.
Sin duda alguna fue entre los años 50 y 60 cuando este problema ganó la mayor popula-
ridad entre los cı́rculos cientı́ficos, dando lugar a cantidad de trabajos, debido en gran parte
a su estrecha relación con los dos problemas de optimización combinatoria conocidos hasta el
momento: el problema de asignación y el del transporte.
Durante estos años, destacamos el estudio realizado por Danztig, Fulkerson y Johnson,
quienes publicaron en el año 1954 en la revista Journal of the Operation Research Society
of America, el artı́culo “Soluciones de un problema del viajante de gran tamaño”[6]. En él,
calificaron el TSP como un problema de programación lineal entera y además resolvieron una
instancia del problema del viajante de 49 ciudades (una por cada estado de Estados Unidos),
lo que supuso un gran avance, pues consiguieron resolver un problema con un número alto de
ciudades y además utilizaron un nuevo e innovador método que utilizaba las recientes técnicas
de programación lineal, junto con la idea de que si encontraban un tour cercano al óptimo,
era cuestión de añadir un número no muy grande de restricciones adicionales a este tour para
conseguir llegar al óptimo.
Este método que se conoce como método de los planos de cortes evolucionarı́a posteriormente
hasta el método de Gomory [11] y posteriormente darı́a lugar al actual método de ramificación
y acotación, que es uno de las formas más utilizadas de resolver problemas de programación
lineal entera. El método de ramificación y acotación resuelve el problema mediante un método
de programación lineal y cuando una de las variables de la solución obtenida x no es entera,
se subdivide el problema en dos subproblemas en las que se añade en cada uno una nueva
restricción en la que esa variable toma el valor entero más cercano a x menor que x y mayor
que x, respectivamente.
Tras este artı́culo de Dantzig et al. [6], fueron apareciendo nuevos algoritmos aplicables cada
vez a un número mayor de ciudades, como el de M.Held y R.Karp [13], basado en programación
dinámica y de orden n2 2n y ya partir de los años 80, utilizaron variantes de los métodos de
planos de cortes y ramificación y acotación para encontrar soluciones exactas para instancias
con hasta 2392 ciudades. En la Figura 1.4 , podemos observar la evolución de este problema
desde 1954 hasta la década de los 90 y en la Figura 1.5 una gráfica que muestra la evolución
del TSP en la historia.
riormente).
100.000
90.000
80.000
70.000
60.000
50.000
40.000
30.000
20.000
10.000
-
Aplicaciones
En la década de los 90, W. Cook junto con otros compañeros desarrollaron el programa
informático llamado Concorde
La mayor parte de(www.math.uwaterloo.ca/tsp/concorde.html), conmo-
las mejoras en TSP durante los primeros años estaban el que en 2006
consiguierontivadas por aplicaciones directas del mismo. Entre otros, Flood [21] trabajó sobre la solución
resolver una instancia de 85900 ciudades. En la Figura 1.6, podemos ver
óptima a una instancia del TSP de 532 vértices, en la que se han utilizado 302 cortes.
rutas de autobuses escolares y Morton y Land [43] aplicaron el TSP a la plani-
ficación de rutas de una empresa de lavanderı́a. Hasta el dı́a de hoy, el TSP se
1.2. Aplicaciones
ha aplicado sobre una del TSPde problemas que van desde rutas de vende-
gran variedad
dores hasta la genética. A continuación, se comentan brevemente algunas de las
La mayor parte de los avances en la historia del TSP han sido motivadas por aplicaciones
aplicaciones más importantes del problema del viajante:
del mismo en casos cotidianos. Hoy en dı́a, hay multitud de campos en los que el problema del
viajante de comercio juega un papel importante a la hora de tomar decisiones de eficiencia. A
Logı́stica.-
continuación veremos variosLas aplicaciones
ejemplos más directas y más abundantes del TSP se
de ello:
centran en el campo de la logı́stica. El flujo de personas, mercancı́as y
Logı́stica: vehı́culos
las aplicaciones
en tornomás directas
a una serie dedeciudades
este problema
o clientessesecentran en el campo de la
adapta perfecta-
logı́stica. La elección de un recorrido eficiente a la hora de transportar mercancı́as, pasa-
mente a la filosofı́a del TSP, como ya demostraron los primeros estudiosos
jeros y vehı́culos en torno a una serie de ciudades puede suponer un ahorro significativo de
del problema.
recursos. Varios ejemplos Entre
en loslasque
múltiples aplicaciones
se utiliza logı́sticas
la resolución del problema
de este problema del
son: selección
de rutas deviajante, destacamos:
vendedores o turistas para determinar un camino con el que poder visitar los
6 CAPÍTULO 1. INTRODUCCIÓN
Figura 1.6: Grafo y recorrido óptimo de una instancia con 532 ciudades usando Concorde
lugares que deseen y volver al punto de origen, planificación de rutas escolares o reparto
de correo (aunque se ajuste más a un problema de rutas sobre arcos, existen casos como
cuando las casas están alejadas, en los que el TSP puede ser útil).
Industria: Aunque no es tan común su uso en este campo como en la logı́stica, la aplicación
del TSP ha reducido significativamente costes en determinados ámbitos relacionados con
la industria:
• Secuenciación de tareas: supongamos que una máquina tiene que realizar una serie
de tareas en el mı́nimo tiempo posible sin que el orden de las mismas sea importante.
Si tij , es el tiempo que cuesta preparar a la máquina para realizar la tarea j cuando
acaba de terminar la tarea i, podemos aplicar el TSP estableciendo como nodos cada
una de las tareas.
• Producción de circuitos electrónicos: El TSP se utiliza para buscar el orden óptimo
en que perforar las placas que albergarán estos circuitos (se supone cada nodo del
problema, una posición donde se debe perforar y como costes la distancia entre
cada una de estas posiciones. La ciudad de origen será el lugar donde se mantiene
la perforadora mientras se cambian las placas). Esta aplicación del problema del
viajante, lleva años siendo estudiada (Lin y Kernighan en 1973 ya trataron este
tema [18]) y según estudios de IBM y Siemens permiten mejoras de hasta el 10 %
en rendimiento. Al mismo tiempo, también se trata como instancia del problema de
viajante de comercio el orden en los que posteriormente se conectarán microchips
entre si en dispositivos digitales, tratando siempre de minimizar la cantidad de cable.
Además de estas aplicaciones más comunes, usos del TSP abarcan multitud de materias diver-
sas, como por ejemplo: consumo de combustibles en el espacio para alcanzar cuerpos celestes,
conexiones entre aeropuertos, conexiones entre cadenas de ADN, o incluso la programación de
1.2. APLICACIONES DEL TSP 7
los robots en los almacenes de Amazon que se encargan de distribuir los paquetes que ordenan
los clientes (www.academia.edu/2471485/), etc.
Tras esta introducción histórica del problema, podemos dividir el trabajo en dos grandes
apartados:
En el Capı́tulo 2, nos centramos en dar dos formulaciones matemáticas del problema para
posteriormente, en el Capı́tulo 3 explicar dos métodos exactos, uno basado en ramificación y
acotación y otro basado en planos de corte. Ambos son variantes de los conocidos métodos de
programación entera aplicadas al caso del viajante de comercio. La elección de estos métodos
se debe a su estrecha relación con el desarrollo histórico del problema y con el avance de los
métodos de resolución de problemas generales de programación lineal entera. Además en el si-
guiente capı́tulo mostramos diferentes heurı́sticas utilizadas para encontrar de manera eficiente
soluciones aproximadas del problema del viajante.
Todas estas nociones, están completamente enfocadas en demostrar que el problema del
viajante de comercio, del que no se conoce ningún algoritmo de resolución que se ejecute en
tiempo polinómico, es un problema de optimización que pertenece a un grupo de problemas
denominado NP -Duro.
8 CAPÍTULO 1. INTRODUCCIÓN
Capı́tulo 2
X
xij = 1 ∀i ∈ V,
j∈δ + (i)
donde
δ − (i) = {a = (j, i) ∈ A},
δ + (i) = {a = (i, j) ∈ A}.
La primera restricción nos dice, que a cada vértice, sólo puede llegar un arco y la segunda
determina que de cada vértice, sólo puede salir un arco. Estas restricciones, son necesarias pero
no suficientes, pues podrı́a dar lugar a subcircuitos dentro del grafo, como vemos en la Figura
2.1.
9
10 CAPÍTULO 2. TSP: MODELO Y MÉTODOS DE RESOLUCIÓN
En este caso, las variables son x12 = x23 = x34 = x45 = x56 = x67 = 1, luego se cumplen
las restricciones arriba mencionadas, es decir, a cada vértice sólo entran y salen como mucho
un arco, pero sin embargo no es un camino válido para el TSP.
Necesitamos por lo tanto añadir alguna restricción más al problema. En el ejemplo anterior,
vemos que para el subconjunto {1, 2, 3}, hay tres arcos que unen los nodos entre sı́. Si limitamos
el número de arcos a dos en todos estos subconjuntos, entonces evitarı́amos subcircuitos dentro
del grafo. Para modelizar estas situaciones, es necesario definir un nuevo conjunto:
equivalente a X
xij ≥ 1 ∀W ⊆ V, 2 ≤ |W | ≤ n/2.
i∈W,j ∈W
/
Estas restricciones indican, que para cada subconjunto de vértices, al menos uno de los arcos
llega a un nodo que no se encuentra en ese subconjunto.
Otra forma de evitar los subcircuitos, es añadiendo un conjunto nuevo de variables enteras.
Para definirlas, vamos a considerar un tour s1 = 1, s2 , . . . , sn . Sea ti para cada i = 1, . . . , n el
momento del tour en el que la ciudad i es visitada, es decir, para t1 = 1, ts2 = 2, . . . , tsn = n.
Podemos pensar entonces cada tj como la inversa de sj , en el que tj = ti + 1 si xij = 1.
De esta idea observamos que todo tj cumple:
(
ti + 1 − n si xij = 0,
tj ≥
ti + 1 si xij = 1.
Estas restricciones se derivan de condiciones, que un camino que sea solución debe cumplir.
Veamos ahora, que no sólo se cumple esto, sino que si existen subcircuitos, entonces estas
restricciones no se cumplen.
Suponemos que tenemos un camino que consiste de al menos dos subcircuitos y comprobemos
que no se cumple las restricciones (2.1). Consideremos un subcircuito que no contiene a la ciudad
1, sea r el número de etapas en este subcircuito (r ≥ 2). Ahora, sumamos todas las restricciones
2.1. DEFINICIÓN Y MODELO 11
de la forma (2.1) que incluyen arcos de este subcircuito. En el lado izquierdo obtenemos la suma
de las tj del circuito, y en el lado derecho, obtenemos la suma de ti + 1 tales que (i, j) sea arista
del subcircuito, como es un ciclo de r arcos, obtendremos la misma suma de vértices tj más r
y simplificando obtenemos:
0≥r
que es absurdo. Luego si se cumplen las restricciones de (2.1) no puede haber subcircuitos1 .
Veamos cuantas restricciones son necesarias en total para modelar el TSP en los dos modelos
dados: con el primer modelo, necesitamos al menos 2n−1 − n − 1 como ruptura de subcircuitos
y 2n para las primeras restricciones de llegada y salida, luego en total 2n−1 + n − 1 y en total
habrá n(n − 1) variables binarias (hemos quitado las variables xii ). En el segundo modelo,
podemos encontrar n2 variables (las n(n − 1) de antes junto con las n variables adicionales) y
2n + (n − 1)(n − 2) restricciones en total.
Existen casos en los que una de las formulaciones sea más recomendable que la otra, no
obstante, la formulación de ruptura de subcircuitos, suele predominar sobre el modelo con las
nuevas variables ti .
donde
xij ∈ {0, 1} ∀(i, j) ∈ E,
siendo
δ(i) = {e ∈ E|e = (i, j) ó e = (j, i))},
E(W ) = {(i, j) ∈ E|i, j ∈ W },
δ(S) = {e = (i, j) ∈ E|(i ∈ S, j ∈
/ S) ó (i ∈
/ S, j ∈ S)}.
Como en el caso asimétrico, la segunda restricción puede sustituirse por:
X
xij ≥ 2.
(i,j)∈δ(W )
1 Si hacemos esto en el ejemplo de la Figura 2.1, con el subcircuito {4, 5, 6}, entonces la desigualdad obtenida
2.2. Ejemplo
Sea un conjunto de 5 ciudades, cuyas distancias entre ellas vienen descritas en la tabla de
la Figura 2.2. Vamos a dar el modelo a resolver para obtener un tour óptimo del T SP .
Vamos a representar cada ciudad con la inicial de su nombre. Ası́ por ejemplo, xAB repre-
senta a la arista entre Alicante y Barcelona. Notar que xij tomara el valor 1, si esta arista
pertenece al tour óptimo, 0 en otro caso.
mı́n Z = 522xAB +424, 6xAM +682xAS +332xAT +594, 4xBA +628, 7xBM +492xBS +377xBT +
+424, 1xM A +682, 2xM B +319xM S +302xM T +680xSA +491xSB +321xSM +355xST +319xT A +
y está sujeta a las siguientes restricciones que dividiremos en tres grupos: restricciones de
llegada, restricciones de salida y ruptura de subcircuitos.
Restricciones de llegada:
xBA + xM A + xSA + xT A = 1
xAB + xM B + xSB + xT B = 1
xAM + xBM + xSM + xT M = 1
xAS + xBS + xM S + xT S = 1
x + x + x
AT BT M T + xST = 1
Restricciones de salida:
xAB + xAM + xAS + xAT = 1
xBA + xBM + xBS + xBT = 1
xM A + xM B + xM S + xM T = 1
xSA + xSB + xSM + xST = 1
x + x + x
TA TB T M + xT S = 1
subcircuitos es obtener uno con dos vértices y otro de tres vértices. Por ello obtenemos sólo 10
ecuaciones (4 + 3 + 2 + 1 = 10):
utilizar algoritmos especı́ficos para los casos generales que nos proporcionen soluciones exactas
(basados en ramificación y acotación, planos de cortes, programación dinámica, etc.) o centrarse
en la búsqueda de soluciones rápidas y aceptar la posibilidad de que pueda no ser la óptima
(métodos heurı́sticos).
En los dos capı́tulos siguientes, analizaremos varios de los métodos de resolución exactos
para el T P S ası́ como varias heurı́sticas.
Capı́tulo 3
Ramificar (Branch): Cada conjunto de soluciones del problema, puede ser subdividido en
al menos dos subconjuntos no vacı́os.
Acotar(Brand ): tras cada ramificación, iremos obteniendo cotas inferiores del coste de
cada solución que pertenezca a cualquiera de sus ramas.
El método de ramificación y acotación siempre encuentra una solución óptima, pero la efi-
ciencia y la dificultad de implementación del método depende mucho del problema que estemos
tratando y también depende del proceso de elección del siguiente subproblema que debemos
15
16 CAPÍTULO 3. MÉTODOS DE RESOLUCIÓN EXACTOS
ramificar cuando tenemos varias posibilidades (muchas veces es necesaria una buena heurı́sti-
ca para realizar este proceso). En el caso peor, tendrı́amos que enumerar todas las posibles
soluciones.
Definición 3.1.1. Sea PE un problema de programación lineal entero, se llama relajación
de PE, al mismo problema cuando omitimos las restricciones de que sus variables deben ser
enteras.
Siempre se cumple que el valor óptimo para la relajación de un problema de maximización
(minimización), es mayor (menor) al valor óptimo para el problema entero correspondiente.
Observar que si tenemos un problema PE entero y de la solución de su relajación se obtiene
un resultado con todas las variables enteras, entonces esta solución también lo será de PE.
En el caso particular del TSP, este método ha sido aplicado con diferentes criterios de ramifi-
cación. A continuación explicaré uno de ellos. El problema raı́z comienza con el modelo relajado
del T SP , refiriéndonos con este nombre al modelo completo pero sin incluir las restricciones de
ruptura de subcircuito:
X
mı́n cij xij .
i6=j
donde
δ − (i) = {a = (j, i) ∈ A},
δ + (i) = {a = (i, j) ∈ A},
con xij ∈ {0, 1}.
Cada vez que en alguna ramificación obtengamos un circuito completo, esa rama ya no debe
volver a ser ramificada pues será una solución factible. Además si en alguna de las ramas que
tenemos se obtiene una solución con un coste superior al de la solución factible con menor coste
encontrada hasta el momento, dicha rama no se ramificará tampoco, pues cualquier otra rama
derivada tendrá un coste superior y no podremos llegar a una solución óptima por ese camino.
Notar que tendremos que resolver cada uno de los subproblemas que aun tengamos en las
ramas sin ramificar hasta llegar a una solución con coste mayor que alguna de las soluciones
factibles encontradas anteriormente, o bien a una solución factible de coste menor o igual que
ésta. Veamos un ejemplo de como resolver un pequeño problema del viajante mediante el método
de ramificación y acotación.
Ejemplo 3.1.1. Sea una instancia del TSP formada por 7 ciudades, cuyas distancias entre
ellas xij vienen determinadas por la Figura 3.1:
Desde/Hasta C. 1 C. 2 C. 3 C. 4 C. 5 C. 6 C. 7
Ciudad 1 3 93 13 33 9 57
Ciudad 2 4 77 42 21 16 34
Ciudad 3 45 17 36 16 28 25
Ciudad 4 39 90 80 56 7 91
Ciudad 5 28 46 88 33 25 57
Ciudad 6 3 88 18 46 92 7
Ciudad 7 44 26 33 27 84 39
De/Hasta C. 1 C. 2 C. 3 C. 4 C. 5 C. 6 C. 7
Ciudad 1 3 93 13 33 9 57
Ciudad 2 M 77 42 21 16 34
Ciudad 3 45 17 36 16 28 25
Ciudad 4 39 90 80 56 7 91
Ciudad 5 28 46 88 33 25 57
Ciudad 6 3 88 18 46 92 7
Ciudad 7 44 26 33 27 84 39
Esta solución, no tiene subcircuitos, luego es una solución factible y además tiene el mismo
valor objetivo que la solución factible que habı́amos encotrado anteriormente. Pero todavı́a
no podemos afirmar que Z = 126 sea el valor óptimo pues aún nos queda abierta la rama
del subproblema 5.
Como el coste total de este caso es mayor que 126, ninguna solución continuación de este
subproblema podrá ser óptima.
Como podemos observar en la Figura 3.4, si ramificamos más cualquiera de las hojas exis-
tentes, el coste total será mayor que Z = 126, coste de una solución factible. Concluimos
por tanto, que ambos recorridos obtenidos en el subproblema 5 y en el subproblema 3, son
soluciones óptimas del TSP propuesto.
En este ejemplo, hemos visto un algoritmo muy concreto para el problema del viajante
basado en el método de ramificación y acotación. Sin embargo, existen multitud de métodos
distintos e incluso más eficientes que, como éste, nos proporcionan una solución exacta del TSP
y cuya base también es el de ramificación y acotación. Por ejemplo, podemos encontrar uno en
la tesis de L. Stockdale [19, p. 39–54] o también en el libro de Korte y Vygen [14, p. 384–386].
20 CAPÍTULO 3. MÉTODOS DE RESOLUCIÓN EXACTOS
Durante los años 1958 y 1963, Gomory, desarrolló su método de los planos de corte para
resolver problemas enteros de carácter general, sin embargo, no fue el primero. Gomory [11] se
basó en la forma en la que Dantzig, Fulkerson y Johnson resolvieron una instancia especial del
TSP en el año 1954 [6].
Debemos destacar, que el algoritmo desarrollado por Gomory no se ejecuta en tiempo po-
linómico, es por eso que su forma original no es muy practica a la hora de afrontar problemas
de optimización complejos aunque en la práctica, la idea de los planos de corte se utiliza muy
frecuentemente de forma satisfactoria para resolver problemas concretos. En Winston [22, p.
545–548], podemos encontrar una descripción del algoritmo de Gomory original.
Definición 3.2.1. Un plano de corte es una restricción lineal válida en un problema de optimi-
zación, que se añade al modelo relajado del mismo, eliminando la solución óptima del problema
relajado, pero sin eliminar ninguna solución factible del problema original.
La idea de los planos de cortes para resolver un problema, es resolver un problema relajado
mediante una técnica de programación lineal (método del Simplex) e ir añadiendo planos de
corte hasta conseguir la solución del problema relajado que pertenezca a la región de factibilidad
S del problema original.
En el caso concreto del TSP, S es el conjunto de todos los circuitos que unen las n ciudades
y cada ruta, es un vector de dimensión n(n − 1) en el que cada componente, toma el valor 1 si
el arco correspondiente pertenece al circuito, 0 en caso contrario.
Igual que en el caso de ramificación y acotación, el problema relajado aquı́ serı́a el modelo
completo pero sin incluir las rupturas de subcircuitos. A continuación, nos encargamos de los
subcircuitos. Si ponemos las restricciones de ruptura de subtours en el problema original, nos
encontrarı́amos ante un coste computacional altı́simo e innecesario, por eso Dantzig, Fulkerson y
Johnson en su artı́culo [6], introdujeron la idea de ir añadiendo las rupturas de subcircuitos según
se vaya necesitando, es decir, cuando encontremos algún subcircuito lo romperemos añadiendo la
restricción de ruptura de ese subcircuito concreto tal y como hemos explicado en la formulación
del modelo en el Capı́tulo 2.
Modificaciones de estos algoritmos se han utilizado para resolver instancias del TSP con
más de 10000 ciudades. Por supuesto, muchas ideas sofisticadas que no describiremos son nece-
sarias para obtener una implementación eficiente, en particular buenas heurı́sticas para detectar
desigualdades violadas.
Ejemplo 3.2.1. Mediante este método, vamos a resolver un ejercicio simétrico de 7 ciudades
cuyas distancias entre sı́ (dij ) vienen determinadas en la siguiente tabla.
3.2. MÉTODO DE LOS PLANOS DE CORTE 21
De/Hasta C. 1 C. 2 C. 3 C. 4 C. 5 C. 6 C. 7
Ciudad 1 68 57 65 144 137 110
Ciudad 2 68 50 70 95 116 131
Ciudad 3 57 50 30 88 80 85
Ciudad 4 65 70 30 105 72 57
Ciudad 5 144 95 88 105 80 130
Ciudad 6 137 116 80 72 80 68
Ciudad 7 110 131 85 57 130 68
Nuestro objetivo en un principio es solucionar el problema relajado (sin subcircuitos) que con-
siste en minimizar la función: X
D(x) = dij xij ,
i<j
sujeto a X
xij = 2, ∀i = 1, . . . , 7.
j6=i
Para ello, vamos a elegir un tour completo y sin subcircuitos al azar desde el que vamos a
partir para intentar llegar al óptimo. Trivialmente hemos elegido el tour 1−2−3−4−5−6−7−1.
Es decir, la primera solución básica del problema es la dada por:
x12 = x23 = x34 = x45 = x56 = x67 = x71 = 1.
El resto de valores de xij toman el valor 0.
Ahora, a cada vértice le vamos a asociar una variable πi que deberemos determinar. Obser-
var, que para cualquier πi se cumple:
X 7
X X X 7
X
D(x) = dij xij − πi xij − 2 = xij (dij − πi − πj ) + 2 πi .
i<j i=1 j6=i i≤j i=1
Tenemos que resolver un sistema de 7 ecuaciones con 7 incógnitas. Una forma sencilla de
resolverlo, es empezando por la ecuación 68 = π1 + π2 ir sumando y restando alternativamente
el resto de ecuaciones para calcular π1 , con lo que obtenemos:
Ahora que ya tenemos los valores de πi , podemos calcular el resto de δij representados en
la tabla que está a continuación. Observar, que la ecuación a minimizar D(x) sólo puede ser
inferior a la actual, si introducimos a la solución básica con valor 1 una de las aristas que tenga
asociado un valor de δij ≤ 0.
dij 1 2 3 4 5 6 7 πi δij 1 2 3 4 5 6 7
1 68 57 65 144 137 110 32,5 1 0 + + + + 0
2 50 70 95 116 131 35,5 2 0 + -30 + +
3 30 88 80 85 14,5 3 0 -16 + -7
4 105 72 57 15,5 4 0 + -36
5 80 130 89,5 5 0 -37
6 88 -9,5 6 0
7 77,5 7
πi 32,5 35,5 14,5 15,5 89,5 -9,5 77,5
El valor más negativo es el asociado a la variable x57 . Entonces tenemos que introducir
x57 = θ en la base, con θ ≥ 0. Como sólo puede haber 7 aristas con valor 1, si introducimos
θ = 1 tenemos que restablecer el flujo como si de un problema de transporte se tratara, lo que
nos crea dos ciclos de orden 2: 1 − 2 − 1 y 3 − 4 − 3 y otro de orden 3: 5 − 6 − 7 − 5 como vemos
en las siguiente figuras:
Vamos a romper un subcircuito, hemos elegido al azar romper el de la arista x34 . Para ello,
añadimos la restricción x34 ≤ 1, o lo que es equivalente, x34 + y8 = 1, y8 ≥ 0. Al añadir una
restricción nueva, tenemos que introducir nueva variable a la base y nos conviene introducir x34
por lo visto anteriormente. Como si θ = 1 encontramos subcircuitos, entonces la nueva variable
de la base será x34 = θ = 0 y obtenemos el diagrama de flujos siguiente:
3.2. MÉTODO DE LOS PLANOS DE CORTE 23
donde
δ34 = d34 − π3 − π4 − π8 , δij = dij − πi − πj para el resto de i, j con i < j.
En la figura próxima podemos ver la segunda solución básica y las ecuaciones al poner δij = 0
para las variables básicas:
dij 1 2 3 4 5 6 7 πi δij 1 2 3 4 5 6 7
1 68 57 65 144 137 110 51 1 0 -27 −20 + + 0
2 50 70 95 116 131 17 2 0 + + + +
3 30 88 80 85 33 3 0 −16 + -7
4 105 72 57 34 4 0 + -36
5 80 130 71 5 0 0
6 88 9 6 0
7 59 7
πi 51 17 33 34 71 9 59
24 CAPÍTULO 3. MÉTODOS DE RESOLUCIÓN EXACTOS
Como podemos ver, el valor más negativo corresponde a la variable x47 , luego metemos esta
variable a la base con valor x47 = θ. Como la variable tendrı́a que entrar con valor 1, si θ = 1
debemos restablecer los flujos y obtenemos el diagrama y los subcircuitos de la imagen que está a
continuación:
X 7
X
D(x) = δij xij + 2 πi + π8 + π9 − π8 y8 − π9 y9 ,
i<j i=1
donde
δ34 = d34 −π3 −π4 −π8 , δ56 = d56 −π5 −π6 −π9 , δij = dij −πi −πj para el resto de i, j con i < j.
En la siguiente figura podemos ver el nuevo diagrama de flujos al añadir x47 = 0 y las ecuaciones
que quedan al tomar δij = 0 en las variables pertenecientes a la solución básica.
dij 1 2 3 4 5 6 7 πi δij 1 2 3 4 5 6 7
1 68 57 65 144 137 110 69 1 0 -63 −20 −19 + 0
2 50 70 95 116 131 -1 2 0 + + + +
3 30 88 80 85 51 3 0 −52 + -7
4 105 72 57 16 4 0 + 0
5 80 130 89 5 0 0
6 88 27 6 0
7 41 7
πi 69 -1 51 16 89 27 41
Sigue habiendo valores negativos, luego la distancia D(x) todavı́a puede ser menor. Hacemos
que entre a la base el elemento con δij más negativo luego metemos x13 = θ. Para θ = 1,
volvemos a obtener subcircuitos como podemos observar a continuación:
X 7
X X
dij xij − πi xij − 2 −π8 (x34 −y8 −1)−π9 (x56 +y9 −1)−π10 (x12 +x23 +x31 +y10 −2),
i<j i=1 j6=i
X 7
X
D(x) = δij xij + 2 πi + π8 + π9 + 2π10 − π8 y8 − π9 y9 − π10 y10 ,
i<j i=1
donde
δ34 = d34 −π3 −π4 −π8 , δ56 = d56 −π5 −π6 −π9 , δ13 = d13 −π1 −π3 −π10 , δ12 = d12 −π1 −π2 −π10 ,
π1 = 69, π2 = 62, π3 = 51, π4 = 16, π5 = 89, π6 = 27, π7 = 41, π8 = −37, π9 = −36, π10 = −63.
y la tabla:
dij 1 2 3 4 5 6 7 πi δij 1 2 3 4 5 6 7
1 68 57 65 144 137 110 69 1 0 0 −20 −19 + 0
2 50 70 95 116 131 62 2 0 −8 −56 + +
3 30 88 80 85 51 3 0 −52 + -7
4 105 72 57 16 4 0 + 0
5 80 130 89 5 0 0
6 88 27 6 0
7 41 7
πi 69 62 51 16 89 27 69
Debemos meter por lo tanto x25 = θ y restablecemos flujos como vemos en la siguiente
figura. Esta vez para θ = 1 no nos quedan subcircuitos luego podemos meter a la base x25 = 1,
aunque para ello tendremos que quitar una de las variables que tenı́amos en la base anterior.
Nos vamos a deshacer de x45 pues al restablecer los flujos nos queda que su valor es 0.
El circuito descrito por el diagrama de flujos con θ = 1 que nos queda: x13 = x34 = x47 =
x76 = x65 = x52 = x21 = 1, x23 = x17 = x57 = 0, es una solución factible del problema. Vamos
3.2. MÉTODO DE LOS PLANOS DE CORTE 27
a intentar mejorarla todavı́a más. Como no hemos añadido restricciones, D(x) no cambia con
respecto al caso anterior, pero las variables básicas si que han cambiado, lo que implica que
las ecuaciones a resolver asociadas a δij = 0 para las variables básicas han cambiado. En la
siguiente figura podemos observar como nos ha quedado el diagrama de flujos y el sistema de
ecuaciones:
dij 1 2 3 4 5 6 7 πi δij 1 2 3 4 5 6 7
1 68 57 65 144 137 110 41 1 0 + + + + 0
2 50 70 95 116 131 34 2 0 + 0 + +
3 30 88 80 85 23 3 0 + + -7
4 105 72 57 -12 4 + + 0
5 80 130 61 5 0 0
6 88 -1 6 0
7 69 7
πi 41 34 23 -12 61 -1 69
Sigue habiendo un valor negativo en la tabla. Añadimos pues a la solución básica la variable
x37 = θ. Si θ = 1, entonces el diagrama de restablecer el flujo nos queda como mostramos en la
próxima figura. Como hemos encontrado subcircuitos, se pone la restricción x12 + y11 = 1 para
eliminarlo y debe entrar x37 a la base con valor 0.
28 CAPÍTULO 3. MÉTODOS DE RESOLUCIÓN EXACTOS
Ahora la ecuación de D(x) tendrá un nuevo sumando tal y como ha pasado en los casos
anteriores:
X 7
X
D(x) = δij xij + 2 πi + π8 + π9 + 2π10 + π11 − π8 y8 − π9 y9 − π10 y10 − π11 y11 , (3.1)
i<j i=1
δ12 = π1 + π2 + π10 + π11 . El resto de δij no varı́an con respecto al caso anterior.
Resolvemos entonces el sistema que nos queda al igualar a 0 las δij correspondientes a las
variables básicas representado junto con el diagrama de flujos en la figura que mostramos a
continuación:
π1 = 41, π2 = 34, π3 = 16, π4 = −12, π5 = 61, π6 = −1, π7 = 69, π8 = 26, π9 = 20, π10 = 0, π11 = −7.
Ahora damos los valores de δij para la sexta solución básica en la tabla:
dij 1 2 3 4 5 6 7 πi δij 1 2 3 4 5 6 7
1 68 57 65 144 137 110 41 1 0 + + + + 0
2 50 70 95 116 131 34 2 0 + 0 + +
3 30 88 80 85 16 3 0 + + -7
4 105 72 57 -12 4 + + 0
5 80 130 61 5 0 0
6 88 -1 6 0
7 69 7
πi 41 34 16 -12 61 -1 69
Todos los valores de δij son positivos, luego si en (3.1) introducimos alguna variable más
con valor 1, entonces la distancia aumentará. Las variables básicas que tenemos entonces son:
x13 = x34 = x47 = x76 = x65 = x52 = x21 = 1, x17 = x37 = x23 = x57 = 0.
El tour óptimo, está representado por las variables de esa solución con valor 1, y es exacta-
mente el de la Figura 3.5 y tiene coste D(x) = 455.
Capı́tulo 4
29
30 CAPÍTULO 4. HEURÍSTICAS PARA EL TSP
Tanto en esta heurı́stica como en la siguiente, cuando hablemos del T SP , siempre nos vamos
a referir al caso simétrico que cumpla la desigualdad triangular.
Existe una amplia variedad de algoritmos que en tiempo polinomial construyen un árbol
de expansión de mı́nima distancia, donde la distancia total es la suma de las distancias de
las ramas que lo forman. Observamos, que la solución óptima de este problema es una cota
inferior para el tamaño del tour óptimo del TSP pues si borramos cualquier arco del camino
óptimo obtenemos un árbol de expansión que tendrá una distancia igual o superior a la distancia
del árbol de expansión mı́nimo. Veamos un método simple para crear un árbol de expansión
mı́nimo, conocido como Algoritmo de Kruskal: Dado un grafo de n vértices G = (V, A) donde
cada arista tiene asociado un peso positivo, realizaremos los siguientes pasos:
2. Elegimos la arista de menor peso, comprueba si se forma algún ciclo con el árbol formado
hasta el momento. Si no se crean ciclos, añádelo al árbol, en caso contrario descarta esa
arista.
3. Repite el paso 2 con la arista que sigue en función del orden establecido en el paso 1 hasta
que haya n − 1 aristas en el árbol
Observar que la longitud del árbol de expansión mı́nimo es menor que la del TSP, ya que si
quitamos una arista a cualquier tour, obtenemos un árbol de expansión.
Una vez hemos obtenido el árbol de expansión mı́nimo, vamos a utilizar el método depth
first search para visitar todas las ciudades y volver a la de origen. Este algoritmo consiste en
comenzando en una hoja del árbol, aplicar: si nos encontramos en un vértice y hay alguna
rama de las que se encuentren en él que todavı́a no ha sido recorrida, atravesarla para llegar
a un nuevo vértice. Si llegamos a un vértice en el que todas sus ramas han sido ya recorridas,
retroceder al vértice anterior. Tenemos que realizar este método, hasta volver otra vez al vértice
origen. Con este método se verifica que todos los vértices son visitados y cada una de las ramas
del árbol mı́nimo, se visita exactamente dos veces. Veamos un ejemplo del depth first search:
Sea la Figura 4.1(a) un árbol mı́nimo de una instancia de un TSP. Aplicamos el método
depth first search, y obtenemos la secuencia siguiente, representada en le Figura 4.1(b):
→ B → F → H → I.
(a) (b)
La distancia recorrida en este caso es dos veces la distancia del árbol mı́nimo, pero el
problema es que las ciudades se visitan más de una vez. Como hemos supuesto que la distancia
entre ciudades en el árbol mı́nimo cumple la desigualdad triangular, entonces podemos evitar
repeticiones de ciudades introduciendo “atajos”, es decir, realizamos el depth first search, pero
cada vez que retrocedamos a una ciudad que ya fue visitada, la salta y va directamente a la
próxima por la que no hayamos pasado. En el recorrido anterior reemplazarı́amos:
E → G → H → F por E → F,
A → D → F → C por A → C,
C → F → B por C → B,
B → F → H → I por B → I
y obtendrı́amos un tour, de recorrido igual o menor que la obtenida por el depth first serch, es
decir, estarı́a acotada superiormente por el doble del recorrido del spaning tree mı́nimo. En la
Figura 4.2 observamos el recorrido final.
Figura 4.2: Recorrido obtenido por el método del árbol de expansión mı́nimo
Ahora vamos a utilizar la técnica de los atajos, comenzando desde el nodo 2. El primer atajo
correspondiente es romper el ciclo: 2 → 3 → 1 → 3. Para ello como se cumple la desigualdad
triangular, podemos saltar desde 1 directamente a 4: 2 → 3 → 1 → 4. Ocurre lo mismo una vez
llegamos al nodo 5 donde tendremos que usar un atajo para volver al nodo origen 2. Podemos
ver en la Figura 4.4 la solución que obtenemos al finalizar esta heurı́stica.
Figura 4.4: Circuito tras aplicar la heurı́stica del árbol de expansión mı́nimo
La distancia total recorrida mediante este circuito es de 472. Vemos que efectivamente es
inferior al doble del tamaño del árbol mı́nimo. Además, el resultado óptimo obtenido en el
Capı́tulo 3 es de 455 luego la solución obtenida mediante esta heurı́stica puede considerarse
buena.
El algoritmo de Christopides tiene las siguientes etapas, para un grafo G instancia del TSP :
1. Crear un árbol de expansión mı́nimo T de G.
2. Sea I el conjunto de vértices de grado impar del árbol T , encontrar un matching de
mı́nimo peso M en el grafo completo sobre los vértices de I.
3. Combinar las aristas de M y T para crear un grafo H. Este grafo tendrá todos sus vértices
de orden par, luego será un grafo euleriano.
4. Encontrar un tour euleriano de H.
5. Utilizar el método de los atajos (shortcutting) para evitar repetir nodos
Podemos ver un ejemplo paso a paso en la Figura 4.5
En [4] podemos encontrar una demostración realizada por el propio Christofides de que el
tour óptimo que encontramos usando esta heurı́stica debe ser inferior a 3/2 del coste óptimo y
también de que esta construcción tiene una complejidad de O(n3 ).
A continuación, mostramos el mismo ejemplo del T SP que hemos usado para la heurı́stica
del árbol de expansión mı́nimo pero usando la heurı́stica de Christofides.
Ejemplo 4.3.1. Sea la matriz de costes del Ejemplo 3.2.1. Entonces vamos a buscar un Mat-
ching de mı́nimo peso para los vértices de orden impar del árbol de expansión mı́nimo (imagen
de la izquierda de la Figura 4.3). Como podemos ver, los vértices de grado impar son: 1, 2, 3 y 5.
Vamos a necesitar por tanto dos aristas que los unan dos a dos, para encontrar el Matching
de mı́nimo peso. Encontramos que el mı́nimo se obtiene al añadir las aristas 1 − 3 y 2 − 5. A
continuación buscamos un tour Euleriano. En la Figura 4.6 podemos ver ambos resultados.
Curiosamente, si ahora aplicamos otra vez el método de los atajos, nos vuelve a quedar el
mismo resultado que con la heurı́stica del árbol mı́nimo (Figura 4.4). El coste de este circuito
era de 472, que como podemos ver es inferior a 3/2 ∗ 455.
En esta memoria, sólo tenemos espacio para ver estas tres heurı́sticas ya que hablar y explicar
la gran variedad de heurı́sticas existentes para el problema del viajante podrı́an ocuparnos
otra memoria completa. Si se tiene interés por conocer otras heurı́sticas de mayor complejidad
utilizadas para resolver instancias del TSP puede consultar la heurı́stica de Lin y Kernigan [18]
o las heurı́sticas de intercambio definidas por Flood [8] entre muchas otras.
Capı́tulo 5
TSP es NP-Duro
Habitualmente, cuando se habla del problema del viajante, siempre se hace referencia a su
dificultad de resolución, pero lo cierto es, que aunque todavı́a no tengamos un algoritmo que
resuelva toda instancia del TSP en un tiempo razonable, tampoco somos capaces de afirmar que
este algoritmo no exista. Lo que sı́ podemos afirmar, es que el TSP siempre tiene solución pues
podremos analizar todas las posibles alternativas y quedarnos con la mejor. El problema de este
método radica en que el número de ciclos a analizar aumenta de manera estrepitosa conforme
agrandamos el problema, ya que el número de posibles rutas a analizar en un problema con n
nodos asciende hasta (n − 1)!.
No fue hasta el año 1962, cuando M. Held y R. Karp [13] descubrieron el algoritmo basado
en programación dinámica mencionado en el Capı́tulo 3 y de orden n2 2n , que mejoró significati-
vamente la eficiencia a la hora de ejecutar un algoritmo sólido para resolver cualquier instancia
de tamaño n del problema del viajante. No obstante, si aumentamos relativamente el número
de ciudades, este algoritmo tampoco es capaz de calcular el óptimo. En estos años, a la par que
iban apareciendo estos problemas, surgió también la pregunta, ¿Cuándo consideramos que un
algoritmo es eficiente?. Fue el matemático J. Edmonds en 1965 [7] quien razonó una respuesta
cuando determinó un propiedad para conocer la eficiencia de un algoritmo, que consiste en de-
mostrar que el tiempo máximo para resolver un problema de tamaño n con este algoritmo debe
ser Knc con K, c constantes. Generalmente se habla de algoritmos O(nc ), englobados todos
ellos con el nombre de algoritmos de tiempo polinómico.
En este capı́tulo vamos a tratar la existencia o no de uno de estos algoritmos para el pro-
blema del viajante y la clasificación de este problema en función de su complejidad. Para ello,
veremos una de las cuestiones más estudiadas de la teorı́a de la complejidad, que consiste con-
cretamente en determinar si un determinado problema pertenece alguno de los dos grupos de
problemas P (Polinómico) y NP (No-determinı́stico Polinómico) en función de si conocemos un
algoritmo eficiente para el mismo o no (veremos con mayor detenimiento las definiciones de P y
NP a lo largo del capı́tulo). Este hecho que a simple vista puede no parecer tan complicado, ha
sido y todavı́a es, una de las grandes cuestiones de la computación y la teorı́a de la complejidad.
Todavı́a no se sabe si en realidad P y NP coinciden, argumento que ha creado mucha contro-
versia a matemáticos ampliamente reconocidos y que han trabajado en este campo, muchos de
los cuales se centraron en el problema del viajante pues es posiblemente el más representativo
de todos estos problemas.
Esta conjetura de descubrir si P =NP ha adquirido tal relevancia que el Instituto Clay
de Matemáticas ofrece un millón de dólares al creador de un algoritmo en P para resolver
35
36 CAPÍTULO 5. TSP ES NP-DURO
el problema del viajante, o al que por el contrario demuestre la no existencia del mismo
(www.claymath.org/millennium-problems/p-vs-np-problem).
Otro resultado muy importante relacionado con este tema que veremos procede de un artı́cu-
lo publicado por S.Cook en (1971) [5], en el que prueba que muchos problemas de decisión consi-
derados “difı́ciles o no eficientes”, son computacionalmente equivalentes. A estos problemas los
llamaremos NP -Completos y tienen la caracterı́stica de que cualquier problema de NP puede
transformarse en un proceso de tiempo polinómico en él. Ası́, cualquier método que resuelva
un problema NP -Completo, podrá resolver mediante esta transformación cualquier problema
de NP.
Cuando ya no sólo hablamos de problemas de decisión sino también de optimización, apa-
recerá la noción de NP -Duro y veremos que el TSP es uno de ellos.
La estructura que seguiremos es la siguiente (organización similar a la encontrada en los
libros de Garey y Johnson [10] y Korte y Vygen [14]). Primero usamos máquinas de Turing
para describir los conjuntos de problemas de decisión P y NP y daremos definiremos también
los problemas NP -Completos. A continuación, precedemos a demostrar el teorema de Cook
[5] que afirma que el problema de satisfabilidad es NP -Completo. Con este resultado seremos
capaces de probar que el problema 3-SAT y el problema de los ciclos hamiltonianos son también
NP -Completos, idea necesaria que utilizaremos para concluir que el problema del viajante es
NP -Duro, es decir, que todo problema en NP se transforma en un tiempo polinómico en el
problema del viajante.
Ası́ pues, analizando estos tres elementos, podemos describir el significado de las entradas
y salidas de la función (5.1), computando una cadena x ∈ A∗ , que se ejecutará cada vez que la
cabeza lectora lea una nueva celda.
Ejemplo 5.1.2. Vamos a realizar la operación que acepte por entrada un número natural n
codificado en binario y nos devuelva el número más 1 (n + 1).
Para ello, tenemos que partir de la siguiente idea: Si el número codificado termina en 0, en-
tonces ponemos en el bit menos significativo (el que está más a la derecha) un 1 y ya habrı́amos
terminado, pero si por el contrario encontramos un 1, entonces tendremos que poner 0 en ese
bit con la consecuencia de que obtenemos un acarreo. Tendremos que sumar este acarreo, al bit
inmediatamente anterior y seguiremos teniendo acarreo igual a 1 mientras que no lleguemos a
un bit que estaba a cero en la entrada original. Por ejemplo, si la entrada es 1011, el proceso
serı́a (denotamos al acarreo con la letra C, de Carry en inglés):
Nos falta de considerar también el caso en el que la entrada sea todo 1 (es decir un número
de la forma 2n − 1, n ∈ Z+ ), pues entonces tendremos que poner todos los bits a cero excepto
el primero y añadir un bit extra a la derecha con valor 0, esto es el caso, por ejemplo de
Output(φ, 111) = 1000.
Para esto, vamos a necesitar 4 instrucciones y el lenguaje será el binario con el sı́mbolo del
blanco X = {0, 1, t}.
La función φ será por tanto la siguiente:
Con la instrucción 0, avanzamos hasta el final del número, nos colocamos en el último bit y
pasamos a la instrucción 1.
Instrucción 1:
Instrucción 3: avanza hasta el final de la cadena buscando t y cuando ha llegado a este sı́mbolo,
pone en esa posición un cero y termina):
Algunos valores de φ no están incluidos, pues en ninguna ejecución llegaremos a ese caso.
Además, el tiempo de ejecución time(φ, x) ≤ 3 size(x) + 3, luego estamos ante una máquina de
Turing de tiempo polinómico.
Veamos un caso concreto de la computación de φ: para la entrada anterior x = 1011,
obtenemos la secuencia φ(i) = (n(i) , s(i) , π (i) )i=0,1,... :
i=0 φ(0) = (0, [. . . t 1011 t . . .], 1) i=4 φ(4) = (0, [. . . t 1011 t . . .], 5)
i=1 φ(1) = (0, [. . . t 1011 t . . .], 2) i=5 φ(5) = (1, [. . . t 1011 t . . .], 4)
i=2 φ(2) = (0, [. . . t 1011 t . . .], 3) i=6 φ(6) = (1, [. . . t 1010 t . . .], 3)
i=3 φ(3) = (0, [. . . t 1011 t . . .], 4) i=7 φ(7) = (1, [. . . t 1000 t . . .], 2)
Luego ya hemos terminado y nos queda en la cinta la solución, comenzando desde la posición
1 hasta el primer t: Output(Φ, x) = 1100.
Además si existe p polinomio tal que time(φ, x) < p(size(x)) ∀x ∈ X, entonces se dice que φ
es una máquina de Turing polinómica.
Nota 5.1.5. En el ejemplo anterior, podemos decir que φ computa la función f (n) = n+1, n ∈ N.
5.2. Clases P y NP
Vamos a utilizar lo visto con máquinas de Turing para definir conceptos de la teorı́a de
Completitud-NP para los llamados problemas de decisión.
40 CAPÍTULO 5. TSP ES NP-DURO
f : X → [0, 1]
tal que
f (x) = 1 cuando x ∈ Y
f (x) = 0 cuando x ∈ X \ Y
Con esta función, podremos determinar qué elementos x ∈ X pertenecen al subconjunto
Y ⊆ X.
Nota 5.2.1. A los elementos y ∈ Y (Y de “Yes” en inglés) se les llama sı́-instancias.
Definición 5.2.2. La clase de todos los problema de decisión, para los que se conoce un
algoritmo que lo resuelve en tiempo polinómico, se denomina P.
Antes de definir formalmente un problema NP, vamos a ver de manera intuitiva un ejemplo.
Ejemplo 5.2.1. Consideramos el problema del viajante, en el que conocemos un conjunto de
ciudades, y las distancias entre cada una de ellas. Sea L ∈ R+ . ¿Existe algún recorrido que
pase por todas las ciudades, cuya longitud total sea inferior a L? No hay ningún algoritmo
que resuelva este problema en tiempo polinómico, sin embargo, si suponemos en una instancia
un recorrido concreto, sı́ que podrı́amos determinar mediante un algoritmo polinómico si este
camino es efectivamente un recorrido que pase por todas las ciudades y si la longitud total es
menor que L o no.
Definición 5.2.3. Un problema de decisión P = (X, Y ) pertenece a NP si existe un polinomio
p y otro problema de decisión P 0 = (X 0 , Y 0 ) en P donde,
bp(size(x))c
X 0 := {x#c | x ∈ X, c ∈ {0, 1} }
tal que
Proposición 5.2.2. P ⊆ NP
Demostración. Sea P ∈ P, si elegimos el polinomio p = 0, entonces c ∈ {0, 1}b0c , luego un
algoritmo no determinı́stico en la etapa de comprobación para P simplemente elimina el ultimo
signo (#) de la entrada x# y aplica el algoritmo determinı́stico de P.
f : X1 → X2
Nota 5.2.4. Este lema previo, nos va a permitir probar que muchos problemas son NP -Completos,
mediante la búsqueda de transformaciones polinómicas.
Ejemplo 5.3.1. Sea U = {u1 , u2 }, entonces C1 = {{u1 , u2 }, {u1 , u2 }}, es una instancia satis-
factible del problema SAT, pues por ejemplo T (u1 ) = T (u2 ) = true satisface C1 , sin embargo
para C2 = {{u1 , u2 }{u1 , u2 }{u1 }} no existe ninguna correspondencia de verdad que la satisfaga,
luego C2 es no satisfactible.
Sea ahora P = (X, Y ) un problema genérico en NP. Veamos que P se transforma polinómi-
camente en SAT. Para ello, encontraremos la transformación que cumpla la definición (5.2.6).
Por la definición (5.2.3) existe un polinomio p y otro problema de decisión P 0 = (X 0 , Y 0 ) en
P donde,
bp(size(x))c
X 0 := {x#c | x ∈ X, c ∈ {0, 1} },
Ahora construiremos una colección de cláusulas Z(x) sobre un conjunto V(x) de variables
booleanas para cada x ∈ X, que cumpla que Z(x) es satisfactible si y sólo si x ∈ Y (posterior-
mente describiremos el significado de cada una de ellas).
Construimos V(x):
- Wi := {wijn | −Q ≤ j ≤ Q, −1 ≤ n ≤ N } para 0 ≤ i ≤ Q.
A partir de aquı́, las cláusulas de Z(x) las distinguiremos en función de la ejecución del
algoritmo φ, computación que explicaremos más adelante:
- {v0,size(x)+1,# };
- {w010 }
Cláusulas para posiciones que nunca son escaneadas y que no cambian de valor.
- {vQ,1,1 }, {vQ,2,t }
Como podemos observar, la longitud de codificación de Z(x) es de orden O(Q3 log Q), pues
el número de literales de Z(x) es una O(Q3 ) 1 , cuyos ı́ndices requieren O(log Q) de espacio.
Ahora, lo que tenemos que demostrar para nuestro conjunto Z(x) es que se cumple:
Z(x) satisfactible ⇔ x ∈ Y.
Veamos ⇐c:
Supongamos que x ∈ Y , entonces sea c un certificado para x que cumple Output(φ, x#c) = 1.
Lo que debemos demostrar es que existe una correspondencia de verdad que satisfaga todas las
cláusulas de Z(x). Sea φ(i) = (n(i) , s(i) , π (i) )i=0,1,...,m : la computación de φ con entrada x#c.
Vamos a definir la correspondencia de verdad T siguiendo la idea que hemos utilizado para
construir Z(x) desde los valores de φ(i) :
(i)
T (vijσ ) = true si y sólo si sj = σ
T (wijn ) = true si y sólo si π (i) = j y n(i) = n
T (vijσ ) = T (vi−1,j,σ ), T (wijn ) = T (wi−1jn ) para i = m + 1, . . . , Q. ∀j, n, σ
conjuntos de literales se crean, por ejemplo, en el caso: Wijnj 0 n0 , podemos encontrar O(Q3 ) valores distintos ya
que 1 ≤ i ≤ Q, − Q ≤ j, j 0 ≤ Q. Notar, que Q es un polinomio del tamaño de x y el número de elementos de
A y N (número de instrucciones) es una cantidad finita que depende del algoritmo φ pero es independiente de
la entrada x.
5.3. EL TEOREMA DE COOK 45
Vij contiene para cada i, j todas las posibles σ ∈ A. Como en cada posición j de la cinta
para cada instante, siempre va a haber un elemento σ ∈ A, luego entonces uno de los
elementos de ese conjunto será true para T , y por tanto el conjunto es satisfactible.
Vijστ es siempre verdadera pues al menos una de las dos variables vijσ o vijτ es siempre
falsa bajo T .
Los siguientes dos conjuntos de cláusulas: Wi y Wijnj 0 n0 indican que en cada instante se
ejecuta una y sólamente una instrucción y se escanea sólo una posición. Veamos que también
se satisfacen:
En el conjunto Wijnj 0 n0 , una de las dos siempre será falsa bajo T pues no podemos tener
en un mismo instante la cabeza en dos posiciones distintas j, j 0 , y si j = j 0 entonces no
podemos ejecutar en un mismo instante dos instrucciones diferentes.
Las cláusulas de comienzo del algoritmo también se satisfacen todas para T , ya que están
modelizando que en un primer instante, sólo introducimos x#c en la cinta, empezando desde la
posición j = 1 hasta j = size(x) + 1 + bp(size(x))c tamaño de x#c. Las dos últimas cláusulas
indican que en el resto de espacios libres entre [−Q, Q], cotas del tamaño máximo de la compu-
tación, introducimos t y que la instrucción que ejecutaremos en el paso 1 será la instrucción
n = 0, estando en la posición j = 1.
Las cláusulas que modelan un paso intermedio, también son ciertas con esta correspondencia
y están basadas en la idea de que en un instante i, en una posición j en la que encontramos el
elemento σ, ejecutamos φ(n, σ) = (m, τ, δ). Es decir, obtenemos una nueva instrucción m, un
elemento τ a introducir en la posición j y δ ∈ {−1, 0, 1} nos indica la posición j + δ siguiente.
A continuación mostramos como en cada una de las cláusulas aquı́ definidas hay un elemento
verdadero.
Nos quedan de ver que las cláusulas que modelizan las posiciones que nunca son escaneadas
son también verdaderas bajo T :
Para terminar, nos queda ver que {vQ,1,1 }, {vQ,2,t } son siempre verdaderas. Esto se cumple
porque estamos modelando una sı́-instancia, luego la salida tiene que ser 1.
Hemos encontrado por lo tanto una correspondencia de verdad T para la cual Z(x) se sa-
tisface.
Veamos ⇒c:
Sea ahora Z(x) satisfactible, entonces existe T correspondencia de verdad, que satisface
todas sus cláusulas. Tenemos que ver por tanto que existe un certificado c ∈ {0, 1}bp(size(x))c
tal que Output(φ, x#c) = 1 y vamos a definirlo usando esa correspondencia T . Notemos que T
satisface en concreto las cláusulas:
Con estas condiciones y el significado del resto de cláusulas, vamos a intentar ver que en
realidad la correspondencia T que satisface Z(x) significa que:
Ahora suponemos que I) y II) son ciertos para un paso i distinto del de parada y veamos
que se cumple I) en el paso i + 1. La hipótesis ahora consiste en suponer que al ejecutar φ(x#c)
en el paso i + 1, en la posición j encontramos la letra σ. Distinguimos dos casos:
2. En el paso i, la cabeza estaba en la posición j: entonces, sea α la letra que estaba en la po-
sición j para tiempo i y n la instrucción que se ejecutó, sabemos que φ(n, α) = (m, σ, δ).
Por hipótesis, T (vijα ) = true y T (wijn ) = true, luego los dos primeros literales de la
cláusula {vijα , wijn , vi+1,j,σ } son falsos y como la cláusula se satisface bajo T , forzosa-
mente T (vi+1,j,σ ) = true.
Ahora con la misma suposición para un paso i distinto del de parada, veamos que se cumple
II) en el paso i + 1. Suponemos entonces que en el paso i + 1 la cabeza está en la posición j
ejecutando la instrucción n. Tenemos que demostrar que wi+1,j,n = true.
Supongamos que en el paso i la computación ha sido φ(m, α) = (n, σ, δ). Ası́, T (vi,j−δ,α ) =
true y T (wi,j−δ,m ) = true. Entonces por la cláusula de paso intermedio {vi,j−δ,α , wi,j−δ,m , wi+1,j,n }
tenemos que wi+1,j,n = true.
Para terminar, nos queda ver que se cumplen I) y II) cuando en el paso i se ejecuta la ins-
trucción de parada. Esta demostración es análoga al caso anterior tomando para I) las cláusu-
las {vijσ , wi,j 0 ,−1 , vi+1,j,σ } (correspondiente o bien a una cláusula del segundo conjunto de las
48 CAPÍTULO 5. TSP ES NP-DURO
cláusulas de parada o bien a una cláusula de posiciones nunca escaneadas) y para II) una de
las cláusulas de parada de la forma {wi,j,−1 , wi+1,j,−1 }.
Una vez probado I) y II), ya sabemos cómo interpretar T en el desarrollo de la ejecución
de φ y podemos dar significado a las últimas dos cláusulas que se cumplen: {vQ,1,1 }, {vQ,2,t }.
Esto nos indica por tanto, que en el paso i = Q, en la posición j = 1, encontramos el elemento
1, y en la posición siguiente t. Luego Output(φ, x#c) = 1 que es lo que querı́amos ver y nos
permite concluir que x es una sı́-instancia del problema original (x ∈ Y ).
5.3.1. 3-Satisfactibilidad
El problema de la 3-Satisfactibilidad (3-SAT ), es una restricción del problema SAT donde
toda instancia tiene que tener exactamente 3 literales en cada cláusula. Su simplicidad con
respecto al problema SAT lo hace ser muy útil a la hora de comprobar la NP -Completitud de
otros problemas.
Teorema 5.3.2.
El problema de la 3-Satisfactibilidad(3-SAT) es NP-Completo.
Demostración. Veamos primero que es NP: Es fácil ver que en el caso de encontrarnos ante una
sı́-instancia del 3-SAT, podremos comprobarlo fácilmente encontrando una correspondencia de
verdad que satisfaga cada una de las cláusulas de tres literales del problema.
Ahora realizaremos la transformación SAT ∝ 3-SAT.
Sea U = {u1 , u2 , . . . , un } un conjunto de variables y C = {c1 , c2 , . . . , cm } un conjunto de
cláusulas instancia arbitraria de SAT . Vamos a construir un conjunto de cláusulas de tres
literales C 0 sobre un conjunto de variables U 0 tal que C 0 sea satisfactible sı́ y sólo si C lo es.
Sea cj ∈ C, construiremos un conjunto de cláusulas de tres literales Cj0 , basada en las varia-
bles originales U y en un conjunto de variables adicionales Uj0 , cuyos literales sólo aparecerán
en las cláusulas de Cj0 . Juntando todos estos conjuntos, obtendremos:
m
[
U0 = U ∪ Uj0
j=1
y
m
[
C0 = Cj0 .
j=1
Caso 1. k = 1
Uj0 = {yj1 , yj2 }
Cj0 = {{z1 , yj1 , yj2 }, {z1 , yj1 , yj2 }, {z1 , yj1 , yj2 }, {z1 , yj1 , yj2 }}
5.3. EL TEOREMA DE COOK 49
Caso 2. k = 2
Uj0 = {yj1 }
Caso 3. k = 3
Uj0 = ∅, Cj0 = {cj }
Caso 4. k > 3
Uj0 = {yji | 1 ≤ i ≤ k − 3}
C 0 es satisfactible ⇔ C es satisfactible
1. Uj0 construido según Caso 1 o Caso 2: Como T (z1 ) = T (z2 ) = true, y toda cláusula
contiene a z1 o a z2 , podemos definir T 0 de cualquier modo para literales en U 0 − U . Sin
perdida de generalidad, podemos entonces asumir T 0 (y) = true, ∀y ∈ Uj0
3. Uj0 construido según Caso 4: Aquı́ cj = {z1 , z2 , . . . , zk } con k > 3. Como es sastisfactible,
entonces existe l ∈ {1, . . . , k} tal que T (zl ) = true.
Es sencillo observar, que con esta definición de T 0 , se satisfacen todas las cláusulas de Cj ‘en
cualquiera de los tres casos.
⇒c
Por otro lado, si T 0 es una correspondencia de verdad de C 0 , se verifica que T = T 0 |U satis-
face C.
Vamos a utilizar el problema 3 − SAT , para demostrar que el problema de los circuitos
hamiltonianos es también NP -Completo.
Nota 5.3.1. Recordemos que el problema de los circuitos hamiltonianos trata de decidir si
podemos encontrar algún circuito hamiltoniano en un grafo no dirigido.
Teorema 5.3.3.
El problema del circuito hamiltoniano es NP-Completo.2
Demostración. Ya hemos visto en la Proposición 5.2.1 anteriormente, que el problema del cir-
cuito hamiltoniano es NP. Ahora vamos a ver que 3-SAT se transforma polinómicamente en
este problema.
Dada una colección de cláusulas de tres literales Z = {Z1 , . . . , Zm } sobre un conjunto de
variables U = {u1 , . . . , un }, vamos a construir un grafo G que cumpla que: G contiene un
circuito hamiltoniano si y sólo si Z es satisfactible.
Para ello vamos a definir dos estructuras que nos permitirán crear el grafo.
Consideramos el grafo de la Figura 5.2(a). Suponemos que es un subgrafo de G al que
llamaremos A y ningún vértice de A excepto u, u0 , v, v 0 incide con otra arista de G. Entonces,
cualquier circuito hamiltoniano de G debe atravesar A de una de las dos formas que vemos en
la Figura 5.2 (b),(c).
Sean ahora dos aristas u − u0 , v − v 0 , diremos que las unimos mediante A, cuando creamos
entre ellas la estructura de la Figura 5.2(a) (es decir añadimos todos los puntos intermedios y
los unimos de esta forma).
Por simplificar el resultado final, vamos a describir la unión de dos aristas mediante A como
en la Figura 5.2(d). La importancia de estas estructuras, es que si en un grafo encontramos una
estructura de tipo A, cualquier ciclo hamiltoniano del grafo debe contener exactamente una de
las aristas u − u0 o v − v 0 .
Ahora consideramos también el grafo B de la Figura 5.3(a). Asumimos que es también un
subgrafo de G y que los únicos vértices incidentes con otras aristas de G son u, u0 . Entonces,
ningún circuito hamiltoniano de G atraviesa a las tres aristas {e1 , e2 , e3 }, es más, se observa que
para cualquier S ⊂ {e1 , e2 , e3 }, hay un camino hamiltoniano desde u a u0 en B, que contiene a
S pero no a {e1 , e2 , e3 } \ S. Vamos a representar B, con el sı́mbolo de la Figura 5.3(b).
2 Richard M. Karp fue el primero que mostró en 1972 que el Problema del Ciclo de Hamilton era un problema
NP -Completo, lo cual, como veremos más adelante implica que el TSP sea un problema NP -Duro.
15.5
15.5 Some
Some Basic
Basic NP
NP-Complete
-Complete Problems
Problems 361
361
We
We first
first define
define two
two gadgets
gadgets which
which will
will appear
appear several
several times in G.
times in G. Consider
Consider thethe
graph
graph shown
shown inin Figure
Figure 15.2(a),
15.2(a), which
which we call A.
we call A. We
We assume
assume that
that itit is
is aa subgraph
subgraph
of G
of G and
and no
no vertex of AA except
vertex of except u,u,uu,,v,
v,vv is
is incident
incident to
to any
any other
other edge edge ofof G.
G.
Then
Then any
any Hamiltonian
Hamiltonian circuit of G
circuit of G must traverse AA in
must traverse in one
one of
of the
the waysways shown
shown
in
in Figure
Figure 15.3(a)
15.3(a) and
and (b).
(b). So
So we
we can replace AA by
can replace by two
two edges
edges with
with thethe additional
additional
of GG must
5.3. EL TEOREMA restriction
restriction that
DE COOK that any
any Hamiltonian
Hamiltonian circuit
circuit of must contain
contain exactly
exactly one one ofof them
them
51
(Figure
(Figure 15.2(b)).
15.2(b)).
(a)
(a) (b)
(b)
uu uu
ee11
ee22 BB
ee33
uu uu
(a) (b)
Fig.
Fig. 15.4.
15.4.
Now
Now consider
consider the graph Figura
the graph shown 5.3:
BB shown in
in Figure
Figure 15.4(a).
15.4(a). We We assumeassume that that itit is
is aa
subgraph
subgraph of of G,
G, andand no no vertex
vertex of of BB exceptexcept uu and and uu is
is incident
incident to to any
any other
other edge
edge
of G.
of G. Then
Then no no Hamiltonian
Hamiltonian circuit circuit of of G G traverses
traverses all all ofof ee11,, ee22,, ee33.. Moreover,
Moreover, one one
Con estas dos estructuras
easily checks ya
easily checks that podemos
that for
for any any SS ⊂ ⊂ {e construir
{e 11,, ee22,, ee33}} there
thereGisisdesde
aa Hamiltonian
HamiltonianZ. Para path
path fromcada
from tocláusula Zi , i =
uu to
1, . . . , m, pondremos uuuna
in BB copia
in that
that contains de SB
contains buttras
S but none
none of otra
of {e {e11,, eeen ,,
22 33e
e una
}
} \
\ S.
S. Wemisma
We represent
represent columna,
BB by
by the
the y
symbol
symbol en una columna
paralela, uniremos con shown
shown in
in Figure
la primera Figure 15.4(b).
15.4(b).
y última copia de B,una sucesión de vértices, dos por cada
We
We are are nownow able able to construct G.
to construct G. For For eacheach clause,
clause, we we introduce
introduce aa copy copy of of
variable uj (j = 1, . . . ,B,n)joined
B, que one
joined existan
one after
after another. en lasBetween
another. cláusulas.
Between the
the firstfirstEstos
and thevértices
and the last
last copy
copy of están
of B,
B, weweainsert
su vez unidos entre
insert
ellos. La arista que une twolos
two dos for
vertices
vertices vértices
for each
each variable, que corresponden
variable, all
all joined
joined one afteraanother.
one after cada variable
another. We
We then then doubleuj , the
double la
the vamos a doblar,
para representar a uj edgesyedges
a ubetween
between the the two two vertices
vertices of of each variable x;
each variable x; these
these two two edges edges will
will cor-
cor-
j . Ahora en cada copia de B, unimos mediante copias de A, las aristas
respond
respond to to xx andand x, x, respectively.
respectively. The The edges edges ee11,, ee22,, ee33 in
in each
each copy copy of of BB areare
e1 , e2 , e3 con el primer, nowsegundo
now connected
connected via y tercer
via aa copy
copy of literal
of AA to to thethedefirst, la second,
first, cláusula
second, thirdcorrespondiente,
third literal
literal of of the corre- representados
the corre-
mediante las aristas desdobladas
sponding
sponding clause. clause.descritas
This
This construction anteriormente
construction is
is illustrated
illustrated by para
by Figure
Figure cada
15.5
15.5 with variable
with the (notar que entonces
the example
example
{{x
cualquier ciclo hamiltoniano{{x11,, xx22,, xx33},
},de
{x
{x11,G,
, xx22,, xxdebe
33},
},{x
{x11,,de
xx22,, xxcontener
33}}.
}}. Note
Note that thatoan
anbien
edge
edge representing
representing
a ei o bien aa literal
literal
al can can
literal relacionado
take
take part
part in in more
more than than one one copy
copy of of A; A; these
these are are then
then arranged
arranged in in series.
series.
mediante A con esa arista). Now
Now we Se observa
we claim
claim that that G además
G isis Hamiltonian que
Hamiltonian ifif and la arista
only ifif Z
and only correspondiente
Z isis satisfiable.
satisfiable. Let Let C C beabe un literal puede
formar parte de más de una copia
aa Hamiltonian
Hamiltonian circuit.
circuit.de We A.define
We define aa truth truth assignment
assignment by by setting
setting aa literal
literal true iff C
true iff C
Antes de continuar, contains
contains
vamos the
the a corresponding
corresponding
ver un ejemplo edge.
edge. By Byilustrativo
the
the properties
properties of of the
de the gadgets AA and
gadgets
construcción and BBde each
each
este grafo a partir
clause
clause contains
contains aa literal literal thatthat isis true.
true.
de un conjunto de cláusulas concreto. Sea U = {{x1 , x2 , x3 }, {x1 , x2 , x3 }, {x1 , x2 , x3 }}, entonces
362
el 15. NP -Completeness
grafo de la figura 5.4(a), es el correspondiente para U .
B A
B A
B A
(a) (b)
Fig. 15.5.
En la Figura 5.4(b) podemos ver expandida la primera estructura de tipo B y A que aparece
en el ejemplo anterior, para entender mejor lo que estamos intentando representar.
Cada una de las estructuras de tipo A de la Figura 5.4(a) se representarı́a de esta manera,
teniendo en cuenta que si hay dos cláusulas que contienen el mismo literal, en la arista corres-
pondiente a ese literal, aparecerán puntos intermedios independientes para cada una de las dos
estructuras A.
Veamos ahora que:
G es hamiltoniano ⇔ Z es satisfactible
⇒c
Sea C un circuito hamiltoniano, definimos una correspondencia de verdad T que verifı́que
que T (x) = true, x literal sı́ y sólo si C contiene a la arista correspondiente. Por la propiedad de
B, un ciclo hamiltoniano no puede tener a la vez a las aristas e1 , e2 , e3 correspondientes a una
misma cláusula y por la propiedad de A, si el ciclo hamiltoniano no contiene a uno de esas tres
aristas, entonces contiene a la arista correspondiente al literal unido mediante A, luego toda
cláusula contiene un literal tal que la arista correspondiente a ese literal, pertenece al ciclo.
⇐c
Por otro lado, si Z es satisfactible, entonces cualquier correspondencia de verdad que satis-
faga Z, define un conjunto de aristas que corresponden a los literales que son verdad. Como
cada cláusula, contiene al menos un literal cierto (pues Z es satisfactible), entonces este con-
junto de aristas, puede ser completado hasta un ciclo en G, usando la construcción explicada
anteriormente.
5.4. NP-Duro
Ahora vamos a extender los resultados obtenidos para los problemas de decisión a los lla-
mados problemas de optimización.
m ∈ {mı́n, máx}.
Nota 5.4.1. En este caso, no hemos obligado, a que el problema sea un problema NP, como en
el caso de NP -Completo, además incluye no sólo a los problemas de decisión, sino también a
los de optimización. Muchas veces, cuando hablamos de un problema NP -Duro se suele decir
informalmente, que es al menos tan difı́cil como cualquier problema de decisión NP -Completo.
Teorema 5.4.1.
El problema del viajante de comercio (T SP ), es NP-Duro.
Demostración. Para ello, vamos a demostrar que el problema de decisión de circuitos Hami-
litotianos (HCP) se transforma polinómicamente en el (TSP). Para ello, debemos encontrar
una función f que a cada instancia de HCP le corresponda una del TSP y que satisfaga las
propiedades de transformación polinómica.
Sea G = (V, E) instancia del HCP con |V | = m. Su instancia correspondiente en el TSP
tiene un conjunto C de ciudades idéntico a V y para cada dos ciudades vi , vj ∈ C definimos
d(vi , vj ) = 1 si vi , vj ∈ E
G contiene un ciclo hamiltoniano ⇔ hay un tour que pasa por todas las ciudades de f (G)
cuyo recorrido no es mayor que B.
Veamos primero ⇒c
Sea hv1 , v2 , . . . , vm i un circuito hamiltoniano de G. Entonces v1 , v2 , . . . , vm es también un
tour en f (G) de longitud m = B pues cada una de las aristas visitadas, es un elemento de E y
por eso tienen longitud 1.
Veamos ahora ⇐c
Sea ahora hv1 , v2 , . . . , vm i tour en f (G) con longitud total menor que B. Como las distancias
entre las ciudades son o bien 1, o bien 2, y se recorren en total m ciudades (m sumandos),
entonces la distancia entre las ciudades visitas es exactamente 1, es decir, por definición de f ,
{vi , vi+1 }, {vm , v1 } ∈ E ∀ i = 1, . . . , m − 1, luego < v1 , v2 , . . . , vm > un circuito hamiltotiano
de G.
54 CAPÍTULO 5. TSP ES NP-DURO
Bibliografı́a
[1] R. Bellman, Dynamic Programming. Princeton University Press, Princeton, New Jersey,
USA (1957).
[2] A. Calvo, Cooperación en los problemas del viajante (TSP) y de rutas de vehı́culos (VRP):
una panorámica. Universidad de Vigo (2011).
[4] N. Christofides, Worst-Case Analysis of a New Heuristic for the Travelling Salesman Pro-
blem, Carnegie-Mellon University Management Sciences Research Report 388, Pittsburgh,
Pa., February 1976.
[5] S.A. Cook, The complexity of theorem-proving procedures. ACM Press, New York, USA.
151–158 (1971).
[6] G.B. Dantzig, D.R. Fulkerson, S.M. Johnson, Solution of a Large-Scale Traveling-Salesman
Problem, Operations Research 2 (1954) 393–410.
[7] J. Edmonds, Paths, trees and flowers. Canadian Journal of Mathematics 17, 449–467
(1965).
[8] M.M. Flood, Merrill Flood (with Albert Tucker), Interview of Merrill Flood in San Fran-
cisco on 14 May 1984., The princeton Mathematics Community in the 1930s, Transcript
number 11 (PMC11).
[10] M.R. Garey, D.S. Johnson, Computers and Intractability. A Guide to the Theory of NP-
Completeness. W.H. Freeman and Company (1979).
[11] R.E. Gomory, Outline of an Algorithm for Integer Solutions to Linear Programs, Bulletin
Of the American Mathematical Society 64, 275—278 (1958).
[12] G. Gutin, A.P. Punnen (Eds.), The Traveling Salesman Problem and its Variations., Sprin-
ger, Combinatorial Optimization, Vol. 12 (2007).
[13] M.Held, R.M. Karp, A dynamic programming approach to sequencing problems. Journal of
the Society of Industrial an Applied Mathematics b10, 196–210 (1962).
[14] B. Korte, J. Vygen, Combinatorial Optimization. Theory and Algorithms. Fifth edition,
Springer (2011).
55
56 BIBLIOGRAFÍA
[15] H.W. Kuhn, The Hungarian Method for the assignment problem, Naval Research Logistic
Quarterly, 2:83-97, (1955).
[16] A.H. Land, A.G. Doig, An Automatic Method of Solving Discrete Programming Problems.
Econometrica, Vol. 28, No. 3. pp. 497–520 (1960).
[17] J.D.C. Little, K.G. Murty, D.W. Sweeney, and C. Karel, An algorithm for the traveling
salesman problem, Operations Research 11, 972–989 (1963).
[18] S.Lin, B.W. Kernighan, An effective heuristic algorithm for the traveling-salesman problem.
Operation Research 21, 498–516 (1973).
[19] M.L. Stockdale, El problema del viajante: un algoritmo heurı́stico y una aplicación. Uni-
versidad de Buenos Aires (2011).
[20] K. Menger, Bericht über ein mathematisches Kolloquium. Monats-hefte für Mathematik
und Physik 38, 17–38 (1931).
[21] B.Fr. Voigt, Der Handlungsreisende – wie er sein soll und was er zu thun hat, um Aufträge
zu erhalten und eines glücklichen Erfolgs in seinen Geschäften gewiß zu sein – von einem
alten Commis-Voyageur, Ilmenau (1832)
[22] W.L. Winston, Investigación de Operaciones. Aplicaciones y algoritmos. Cuarta edición,
Thomson (2005).