proyecto_774

71
Universidad de Santiago de Compostela Máster en Técnicas Estadísticas Trabajo Fin de Máster El problema del viajante Francisco José Veiga Losada Director: Julio González Díaz Santiago de Compostela - 2 de septiembre de 2013

Upload: melva-ordonez-abrigo

Post on 16-Dec-2015

218 views

Category:

Documents


1 download

TRANSCRIPT

  • Universidad de Santiago deCompostela

    Mster en Tcnicas Estadsticas

    Trabajo Fin de Mster

    El problema del viajante

    Francisco Jos Veiga Losada

    Director: Julio Gonzlez Daz

    Santiago de Compostela - 2 de septiembre de 2013

  • ndice general

    Introduccin 1

    1. Bases Tericas 31.1. El problema del viajante: Definicin y variaciones . . . . . . . . . . . . . . . . . 41.2. Algoritmos y complejidad computacional . . . . . . . . . . . . . . . . . . . . . . 10

    2. El problema del viajante es NP -completo 152.1. El problema del viajante: NP -duro y NP -completo . . . . . . . . . . . . . . . . 162.2. Clase de problemas auxiliares . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.3. Teorema de Cook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.4. Resultado principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    3. Diseo de algoritmos para el TSP 333.1. Algoritmo de programacin lineal y entera; ramificacin y acotacin . . . . . . 343.2. Algoritmo del rbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.3. Algoritmo de Christofides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.4. Algoritmo de las hormigas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.5. Algoritmo de Lin-Kernighan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

    4. Comparativa de algoritmos 494.1. Consideraciones previas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504.2. Tabla de precisin de soluciones y tiempos medios . . . . . . . . . . . . . . . . 514.3. Anlisis de los valores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

    A. Cdigo R 55

    i

  • Introduccin

    En este trabajo abordamos el problema del viajante o traveling salesman problem (TSP),un problema clsico de optimizacin combinatoria.

    La importancia del problema del viajante radica en que diversos problemas del mundo realque, aparentemente no tienen relacin entre s, pueden ser formulados como un caso particulardel mismo. Por ejemplo, puede aplicarse: en reas de logstica de transporte, en robtica y encontrol y operacin optimizada de semforos.

    Este trabajo est organizado en cuatro partes:En la primera parte, enunciamos los principales conceptos tericos que utilizaremos para

    desarrollar el trabajo. Veremos tambin la formulacin matemtica del problema del viajantede comercio as como unas breves notas de complejidad computacional.

    En la segunda parte demostraremos, basndonos principalmente en el libro de Papamitrou(vase bibliografa), que la versin de reconocimiento del problema del viajante de comercio esNP-completo. Para la consecucin de este objetivo hemos de demostrar otros resultados muyimportantes como puede ser el Teorema de Cook.

    En la tercera parte, proponemos y definimos una serie de algoritmos, heursticos y exac-tos, con los que podemos solucionar algunos casos particulares del problema del viajante. Porejemplo el algoritmo del rbol o el algoritmo de las hormigas.

    Finalmente, comprobaremos el funcionamiento de los algoritmos comparando el tiempo deejecucin y sus soluciones, teniendo en cuenta que algunos de ellos son heursticos, por lo quela solucin no tiene porque ser exacta, todo ello a travs de ejemplos aleatorios.

    Una vez ejecutados todos los ejemplos, observando los resultados obtenidos, podemos ana-lizarlos de forma breve y los representaremos mediante una tabla.

    1

  • Captulo 1Bases Tericas

    Contenidos1.1. El problema del viajante: Definicin y variaciones . . . . . . . . . . 4

    1.1.1. Variaciones del TSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.1.2. Formulacin Matemtica . . . . . . . . . . . . . . . . . . . . . . . . . 8

    1.2. Algoritmos y complejidad computacional . . . . . . . . . . . . . . . 101.2.1. Complejidad Computacional . . . . . . . . . . . . . . . . . . . . . . . 11

    3

  • 4 Captulo 1. Bases Tericas

    En esta seccin enunciaremos el problema del viajante de comercio de un modo ms formal yveremos distintas maneras de plantearlo matemticamente. Analizaremos tambin los conceptostericos bsicos que utilizaremos posteriormente para demostrar que el problema del viajantede comercio (TSP) es un problema que pertenece a la clase de complejidad computacional NP -completo. En captulos posteriores del trabajo, trataremos casos particulares del TSP, para losque hallaremos su solucin utilizando diferentes algoritmos, los cuales tambin programaremosen un computador.

    1.1. El problema del viajante: Definicin y variaciones.Un viajante de comercio tiene que visitar una serie de ciudades pasando solo una vez por

    cada una, partiendo de su ciudad de origen y volviendo a esta. Cul es la ruta ptima quedebe elegir?, esto sera, de modo informal, una posible descripcin del problema del viajantede comercio, conocido como TSP que son sus siglas en ingls (Traveling Salesman Problem).

    Este es uno de los problemas de mayor importancia y ms estudiados en el desarrollo deldiseo de algoritmos y de la teora de complejidad computacional. Aunque sabemos que tienesolucin (ya que siempre podemos evaluar todas las posibles rutas) la resolucin es verdade-ramente complicada a pesar de que en su definicin parezca muy sencillo. Como veremos msadelante, si buscamos la solucin ptima para este problema, la dificultad reside en que estepertenece a la clase de complejidad NP -duro, no es ni NP -completo, esto quiere decir que noexisten algoritmos para solucionarlo en tiempo polinomial ni tampoco tenemos algoritmos quenos permitan verificar su solucin en tiempo polinomial. Otro motivo por el que el TSP es muyestudiado es porque est presente en muchos otros problemas ms generales que se encuentranen la prctica de forma habitual, por ejemplo en los problemas de enrutamiento, por lo que sise encontrara una solucin para el TSP obtendramos un progreso significativo en el estudio deestos otros problemas.

    Un ejemplo prctico del problema del viajante en un caso real, recopilado del documento[5], se desarroll en Atlanta (USA) en 1982 por Bartholdi y Platzman, en donde el modelodel problema del viajante se aplic para proveer de comida caliente a personas mayores oenfermas que no podan salir de casa para hacer la compra o no podan cocinar. Como lacomida deba repartirse utilizando una nica camioneta de reparto, se utiliz este modelo paragenerar diariamente la ruta que deba seguir la camioneta, tratando que esta fuera siempre loms corta posible. Adems el sistema para calcular la ruta deba de ser barato, eficiente y sucoste de mantenimiento deba ser mnimo ya que era para una institucin benfica que no tenaprcticamente ningn ingreso. Al sistema tambin se le podan aadir nuevos domicilios sinque esto provocara ninguna alteracin en la gestin del mismo.

    Una definicin bastante genrica y nada matemtica pero a mi parecer bastante clara, quepodemos encontrar en el libro de Davendra [1], es la siguiente:

    Definicin 1.1. Dado un conjunto de ciudades y el coste (o distancia) de viajar entre cadapar posible de estas ciudades, el problema del viajante de comercio consiste en encontrar elmejor camino posible que visite todas las ciudades una nica vez y vuelva al punto de partidaminimizando el coste del viaje.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 1.1. El problema del viajante: Definicin y variaciones 5

    En esta definicin, Davendra est suponiendo que estamos en un grafo completo, ya que diceque todas las ciudades pueden conectarse entre si. La definicin de grafo completo la daremosposteriormente.

    Previamente a dar una definicin ms formal de este problema, veremos unos cuantosconceptos:

    Un grafo G es un par (N,M) consistente en un conjunto N de elementos llamados nodoso vrtices y un conjunto M cuyos elementos llamaremos arcos o aristas. Cada arco oarista representa una conexin directa entre dos nodos o elementos de N .

    Un grafo orientado es aquel en el que los arcos son pares ordenados; el arco (i, j) empiezaen el nodo i y termina en el nodo j. En este caso M N N y, si i 6= j, (i, j) 6= (j, i).Un grafo no orientado, es un grafo en el que (i, j) y (j, i) representan el mismo arco.

    Un grafo completo es un grafo (orientado o no) en el que todas las aristas posibles estnpresentes.

    Un camino es una secuencia de aristas en las que todos los vrtices son distintos.

    Un circuito es una secuencia de aristas en la que el primer vrtice y el ltimo son elmismo y adems no hay ms vrtices coincidentes que estos dos.

    Un circuito hamiltoniano es un circuito que recorre todos los nodos del grafo una nicavez.

    Un camino hamiltoniano es un camino que recorre todos los nodos del grafo una nicavez.

    En la Figura 1.1 podemos ver un ejemplo de un grafo no orientado, de un grafo orientadoy de un grafo completo, donde se aprecia de forma clara la diferencia existente entre ellos.

    El problema del viajante puede definirse de muchas formas segn tomemos unas u otrasrestricciones en l, algunas de estas derivan en casos particulares que veremos ms adelante.Para la siguiente definicin, suponemos que tenemos un grafo no orientado, o lo que es lomismo, que el camino para ir y volver de una ciudad a otra es el mismo y por tanto tiene elmismo coste asociado. Estas condiciones las mantendremos a lo largo de todo el trabajo.

    Definicin 1.2. El problema del viajante de comercio en un grafo no orientado G con costesc consiste en encontrar un circuito hamiltoniano en G de coste mnimo.

    En el ejemplo de la Figura 1.2, se puede ver claramente que no puede haber un circuitohamiltoniano que contenga al arco (2, 3), ya que si lo hubiera esto obligara a que el circuitopasara por otro nodo ms de una vez adems del nodo inicial y por tanto el circuito que ob-tendramos ya no sera un circuito hamiltoniano. Por consiguiente, el circuito representado enla figura es la nica solucin para este problema del viajante en un grafo G no orientado.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 6 Captulo 1. Bases Tericas

    2

    1

    3

    4

    (a) Grafo no orientado.

    2

    1

    3

    4

    (b) Grafo orientado.

    2

    1

    3

    4

    (c) Grafo completo.

    Figura 1.1: Tipos de grafos.

    2

    1

    3

    4

    3

    7

    2

    4

    3

    2

    1

    3

    4

    3

    7

    4

    3

    Figura 1.2: Problema del viajante y su solucin.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 1.1. El problema del viajante: Definicin y variaciones 7

    1.1.1. Variaciones del TSPHay muchas clasificaciones diferentes del TSP, una de ellas es la que encontramos en el libro

    de Davendra [1] y que distingue tres variaciones del TSP, el problema del viajante simtrico(sTSP), el problema del viajante asimtrico (aTSP) y el problema del viajante con mltiplesviajantes (mTSP).

    sTSP: Sea V = {v1, ..., vn} el conjunto de ciudades (nodos), A = {(r, s) : r, s V } elconjunto de arcos y drs el coste asociado a cada arco (r, s) A, donde drs = dsr. ElsTPS es el problema que consiste en encontrar un circuito de mnimo coste que visitecada ciudad una nica vez, a excepcin de la primera ciudad que ser la primera y laltima en ser visitada. Adems, cuando drs es la distancia euclidiana entre la ciudad r yla ciudad s, tenemos un sTSP euclideano.

    aTSP: Supongamos que nos encontramos en las mismas condiciones del problema sTPS,con la diferencia de que drs 6= dsr, para algn arco del grafo, entonces nuestro problemaTSP es un problema aTSP.

    mTSP: Dados un conjunto de nodos donde tenemos m vendedores localizados en unnico nodo al que llamaremos almacn, y al resto de nodos (ciudades) que tiene quevisitar les llamaremos nodos intermedios. EL mTSP consiste en encontrar circuitos decoste mnimo para los m vendedores, que empiecen y terminen en el nodo almacn y demanera que cada nodo intermedio se visita una nica vez. El coste de cada arco puedeser la distancia entre ciudades, el tiempo de ir de una ciudad a otra, etc. Segn lasvariables que obtengamos podemos tener diferentes variaciones de este problema, que sonlas siguiente:

    Uno o varios almacenes. Si slo tenemos un almacn, todos los vendedores finalizarnsu recorrido en l, mientras que si tenemos ms nodos que sean almacenes, losvendedores pueden regresar al almacn inicial o a cualquiera de los otros almacenes,respetando que el nmero de vendedores en cada almacn despus del recorrido tieneque ser el mismo que el nmero de vendedores que haba antes de iniciar el circuito. Nmero de vendedores. El nmero de vendedores del problema puede ser fijo o puedevenir dado por una variable que est acotada Coste. Cuando el nmero de vendedores no es fijo, cada uno de ellos tiene asociadoun coste fijo en el que se incurre cuando este vendedor entra en el problema. En estecaso, otro objetivo del problema ser minimizar el coste de los vendedores. Ventanas de tiempo. A veces, un nodo tiene que ser visitado en un periodo determi-nado de tiempo al cual llamamos ventana de tiempo, este es un caso particular delmTSP que llamamos problema del viajante mltiple con plazo especificado (mTS-PTW). Este problema es tpico de problemas relacionados con la aeronutica. Restricciones. Las restricciones pueden estar en el nmero de nodos que cada ven-dedor visita, minimizar o maximizar la distancia que el vendedor tiene que recorrer,o alguna restriccin de otro tipo.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 8 Captulo 1. Bases Tericas

    El mTSP es generalmente tratado como un problema de enrutamiento de vehculos rela-jado (VRP) donde no hay restricciones de capacidad. Por tanto la formulacin del problemay los mtodos de solucin para el VRP son vlidos para el problema mTSP si asignamos unacapacidad grande a los vendedores. Si solo tenemos un vendedor, el problema mTSP se reduceal problema TSP.

    1.1.2. Formulacin Matemtica

    El problema del viajante de comercio, adems de plantearse como un problema de optimi-zacin en redes como lo llevamos haciendo en este captulo, vase la Definicin 1.2, tambinpodemos pensarlo como un problema de optimizacin general, siendo en este caso tratado comoun problema de programacin lineal entera.

    Consideramos el problema del viajante de comercio con un conjunto de nodos (ciudades)N , compuesto por n + 1 nodos numerados del 0, 1, ..., n. Las distancias entre los nodos o lasciudades viene dada por los parmetros cij , donde i es el nodo de origen y j el nodo de destinoy almacenamos los valores en la matriz C (la matriz C no es necesariamente simtrica, es decir,no tiene que ocurrir que cij = cji).El problema de optimizacin consistir en definir un grafo atravs de las variables xij , donde xij = 1 si el arco (i, j) est en el grafo y xij = 0 si el arco noest en el grafo. Podemos definir el TSP como sigue:

    minimizarn

    i,j=0cijxij

    sujeto a (1)ni=0

    xij = 1 j = 0, ..., n

    (2)nj=0

    xij = 1 i = 0, ..., n

    (3)ni,j

    xij |K| 1 1 i 6= j n,K ( N

    0 xij 1, xij Z,i, j

    Las desigualdades en (1) nos piden que en cada nodo entre un nico arco y las desigualdadesen (2) nos piden que de cada nodo salga un nico arco (de las desigualdades (1) y (2) se sigueque del nodo 0 tambin tiene que salir un nico arco). De las desigualdades de (1) y (2) yanos obligan a que de cada nodo salga y entre un nico arco que es lo que estamos buscando,pero con esto no nos llega, ya que como podemos ver en la Figura 1.3, se pueden cumplir estascondiciones y obtener soluciones con varios subcircuitos, cosa que no nos interesa, ya que enel TSP el viajante debe llegar de nuevo al nodo de origen visitando todos los siguientes, y asno se cumple. Para solucionar este problema aadimos la condicin (3), que nos dice que nopuede haber un subgrafo con un nmero mayor de aristas que el nmero de nodos menos uno,siempre que el conjunto de nodos sea distinto que el nmero de nodos total.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 1.1. El problema del viajante: Definicin y variaciones 9

    2

    1

    3

    45

    6

    7 2

    1

    3

    45

    6

    7

    Figura 1.3: Subcircuitos factibles para una solucin del problema del viajante si no imponemoslas condiciones de (3).

    El problema que tiene esta formulacin a la hora de intentar programarla es que no es efi-ciente, ya que en la condicin (3) tenemos tantas restricciones como el nmero de subconjuntosde nuestro conjunto de nodos, es decir, un total de 2n+1 2 restricciones. Una formulacinms prctica a la hora de atacar este problema es la siguiente debida a Tucker, que podemosencontrar en el Captulo 13 del libro de Papadimitrou [4], y que esencialmente lo nico quemodifica es la restriccin (3).

    minimizarn

    i,j=0cijxij

    sujeto a (1)ni=0

    xij = 1 j = 0, ..., n

    (2)nj=0

    xij = 1 i = 0, ..., n

    (3) ui uj + nxij n 1 1 i 6= j n0 xij 1, xij Z,i, j

    Donde ui, con i = 1, ..., n, son variables reales de libre disposicin, llamadas condiciones deMiller-Tucker, que evitan que una posible solucin del problema sea con subcircuitos y mejorala anterior ya que reduce el nmero de restricciones considerablemente. Probaremos ahora queest ltima formulacin define el problema del viajante.

    Proposicin 1.1. Las restricciones anteriores (1), (2) y (3) definen el TSP.

    Demostracin. Primero demostraremos que toda solucin factible de este problema es un cir-cuito hamiltoniano. Para ver esto mostraremos que todo circuito pasa a travs de la ciudad 0,por tanto no puede ser que una solucin factible tenga dos subcircuitos en ella ya que los dostendran que contener a la ciudad 0 y eso no es posible por las restricciones de (1) y (2). Su-pongamos que no, supongamos que la secuencia de ciudades i1, ..., ik es un circuito que excluyeal nodo 0. Podemos escribir las restricciones de (3) a lo largo del camino como:

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 10 Captulo 1. Bases Tericas

    uij uij+1 + n n 1 con j = 1, ..., k 1uik ui1 + n n 1.

    Sumando estas restricciones, obtenemos una contradiccin, ya que llegamos a que kn k(n1),y esto no es cierto si k > 0.

    Para acabar la demostracin vamos a demostrar que para todo circuito hamiltoniano facti-ble, hay valores de ui que satisfacen las restricciones de (3). De hecho, sea u0 = 0 y ui = t si laciudad i es la t-sima ciudad en ser visitada en el camino, t = 1, ..., n. Si xij = 0, tenemos que

    ui uj n 1 con 1 i 6= j n

    que siempre se cumple ya que si ui = n y uj = 0, como el circuito ha de retornar al nodo 0,tenemos que el arco (i, 0) estar en el circuito, y por lo tanto xi0 = 1. Si xij = 1 tenemos:

    ui uj + n n 1

    que se cumplen porque ui uj = 1 si i y j son ciudades consecutivas en el camino (darsecuenta que el caso ui = n y uj = 0 esta excluido por las restricciones de (3)).

    Esta formulacin implica a las variables xij , las cuales estn obligadas a ser enteras, y lasvariables ui no lo son. Tal problema se llama problema de programacin lineal entera mixta.

    1.2. Algoritmos y complejidad computacional.Cuando decimos que queremos calcular una solucin para el TSP, lo que queremos es

    buscar un algoritmo que nos permita alcanzar una solucin para este problema. Un algoritmoes un procedimiento matemtico, paso a paso, descrito a travs de instrucciones totalmenteinequvocas, que empieza en unas condiciones iniciales especificadas y, eventualmente, finalizadevolviendo el resultado deseado (o una aproximacin del mismo).

    De forma muy general, podemos decir que tenemos dos tipos de algoritmos; los algoritmosdeterminsticos, que son aquellos que fijado un problema, todas las ejecuciones del algoritmoproducirn el mismo resultado final e incluso los valores intermedios antes de llegar a esa so-lucin sern los mismos. Los algoritmos no determinsticos en los que uno introduce ciertaaleatoriedad en el proceso de bsqueda de la solucin. Otra posible clasificacin de los algorit-mos atendiendo a la precisin de los mismos sera: algoritmos exactos, que siempre devuelvenla solucin ptima del problema; algoritmos aproximados, que producen soluciones que estndentro de un determinado ratio de la solucin ptima y los algoritmos heursticos, que producensoluciones sin ninguna garanta de optimalidad pero que a cambio, suelen tener un tiempo deejecucin menor que el de los algoritmos en las otras clases.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 1.2. Algoritmos y complejidad computacional 11

    1.2.1. Complejidad ComputacionalLa complejidad computacional surge de plantearse si un algoritmo es o no efectivo, es decir

    si calcula la solucin de forma precisa o con un error despreciable en un tiempo razonable,o por el contrario los costes para llegar a esa solucin, por ejemplo de tiempo, son tan altosque no merece la pena utilizar ese algoritmo para llegar a la solucin del problema. La ideade complejidad computacional comienza a estudiarse en los primeros aos de la dcada de los70 y lo que se intenta es intentar acotar el nmero de operaciones que el algoritmo necesita enfuncin del tamao de los datos necesarios para especificar el problema.

    Para esto, diremos que un algoritmo tiene una velocidad O(f(n)) si existen constantes k y n0tales que el nmero de operaciones efectuadas por el algoritmo para resolver cualquier problemade tamao n n0 es, como mucho kf(n). En la prctica, interesa encontrar algoritmos cuyafuncin f sea una funcin polinomial de n, ya que los algoritmos no polinomiales pueden sermuy poco tiles en la prctica para estudiar problemas grandes.

    Para medir el rendimiento de un algoritmo tenemos tres enfoques: el anlisis emprico dondeestimamos el comportamiento del algoritmo testndolo con diferentes ejemplos, el anlisis delcaso promedio en el que estimamos el nmero medio de pasos que necesita el algoritmo ypor ltimo el anlisis del peor caso que consiste en encontrar cotas superiores para el nmerode operaciones que va a necesitar el algoritmo. Este ltimo caso es en el que nos basaremosnosotros a la hora de exponer los siguientes resultados tericos.

    Diremos que una clase de problemas de optimizacin es fcil si se puede desarrollar unalgoritmo que resuelva cualquier problema de la clase en tiempo polinomial. Los algoritmos entiempo polinomial se llaman algoritmos eficientes. Hay muchos problemas de programacin delos que no sabemos si existe algn algoritmo eficiente que los resuelva. Antes de entrar a definirformalmente las clases de complejidad computacional que nos interesan para nuestro trabajo,tenemos que hablar de otro concepto muy importante que influir de forma determinante en eldesarrollo de este trabajo, el de la mquina de Turing, ya que nuestras definiciones, se basarnen este concepto, adems de los diferentes resultados tericos que utilizaremos a lo largo detodo el estudio.

    En esencia, una mquina de Turing es un dispositivo que manipula smbolos sobre una tirade cinta de acuerdo a una tabla de reglas, como vemos en el dibujo de la Figura 1.4. Aunqueel funcionamiento de la mquina de Turing es muy simple, la verdadera importancia de estaes que puede ser adaptada para simular la lgica de cualquier algoritmo de computador, conlo cual podemos estudiar matemticamente la eficiencia de distintos algoritmos estudiando eltiempo de resolucin necesario en una mquina de Turing. Alan Turing introdujo el conceptode mquina de Turing en el trabajo On computable numbers, with an application to the Ents-cheidungsproblem [6], publicado en la revista Proceedings of the London Mathematical Societypor la Sociedad Matemtica de Lndres en 1936.

    La mquina de Turing modela matemticamente a una mquina que opera mecnicamentesobre una cinta. En esta cinta hay smbolos que la mquina puede leer y escribir, uno cada vez,usando un cabezal lector/escritor de cinta. La operacin est completamente determinada porun conjunto finito de instrucciones elementales tales como en el estado 42, si el smbolo vistoes 0 , escribe un 1; si el smbolo visto es 1, cambia al estado 17; en el estado 17, si el smbolo

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 12 Captulo 1. Bases Tericas

    Figura 1.4: Ilustracin de una mquina de Turing.

    visto es 0, escribe un 1 y cambia al estado 6; etc.Podemos clasificar las mquinas de Turing en dos tipos, las mquinas de Turing determi-

    nistas, DTM, y las mquinas de Turing no deterministas, NTM.En una DTM, el conjunto de reglas prescribe como mucho la realizacin de una accin en

    cada situacin. Es una funcin de transicin que para cada estado y cada smbolo que lee,especifica tres cosas: el smbolo a escribir, la direccin en la que moverse y el nuevo estadointerno.

    Por el contrario, una NTM puede prescribir un conjunto de acciones. Se puede especificarms de una accin, las transiciones ya no son nicas. Una forma de interpretar esto es queuna NTM tiene la capacidad de ramificarse en mltiples copias en cada paso, realizando lasdistintas acciones. Si alguna rama termina el algoritmo todas terminan.

    Supongamos que tenemos dos clases de problemas, P1 y P2. Decimos que P1 se reduce aP2 en tiempo polinomial si cualquier ejemplo de la clase P1 se puede transformar en tiempopolinomial en un ejemplo de la clase P2.

    Con estos conceptos, ya podemos entrar a definir las clases de complejidad que nosotrosqueramos, que son P , NP , NP -completo y NP -duro, y sus relaciones como podemos ver enla Figura 1.5.

    P : Un problema pertenece a la clase de complejidad P , si existe un algoritmo que resuelvecualquier ejemplo de este problema en un tiempo polinomial. De modo equivalente, unproblema pertenece a la clase de complejidad P si cualquier ejemplo de este problemapuede ser resuelto en tiempo polinomial usando una mquina de Turing determinista(DTM).

    NP : Un problema pertenece a la clase de complejidad NP , si existe un algoritmo quepuede verificar cualquier solucin de un ejemplo de esta clase en tiempo polinomial. Demodo equivalente, un problema pertenece a la clase de complejidad NP si cualquierejemplo de este problema puede ser resuelto en una mquina de Turing no determinista(NTM).

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 1.2. Algoritmos y complejidad computacional 13

    NP -completo: Un problema P1 pertenece a al clase de complejidad NP -completo sicualquier problema de la clase NP se puede reducir a P1 en tiempo polinomial. Todoproblema que est en NP -completo est tambin en NP .

    NP -duro: Un problema es NP -duro si cualquier problema de la clase NP se puedereducir a l en tiempo polinomial. La diferencia que existe entre este problema y unproblema NP -completo es que un problema puede ser NP -duro sin pertenecer a NP .

    Figura 1.5: Relaciones de las clases de complejidad.

    Una vez dadas estas definiciones, destacar que una de las mayores incgnitas de la compleji-dad computacional es poder decir si las clases P y NP son iguales, P = NP . Aunque existe unamplio acuerdo en que estas clases de complejidad computacional tienen que ser distintas, nun-ca nadie fue capaz de probarlo. Se puede extraer por la definicin de ambas que P NP , peroel problema est en la otra implicacin. Es ms, este problema quedara probado si podemosencontrar un algoritmo que resuelva un problema de la clase NP -completo en tiempo polino-mial, ya que, al poder reducir cualquier problema de la clase NP a l en tiempo polinomial,estaramos probando que podemos encontrar un algoritmo que resuelva cualquier problema declase NP en tiempo polinomial, y por tanto estaramos probando que NP P , y en conse-cuencia tendramos probado que P = NP . Si esto se pudiera probar, sera un gran hallazgoque tendra mucha repercusin en multitud de campos. Por ejemplo, uno de los principalesproblemas que encontraramos, es que estaramos diciendo que existe un algoritmo polinomialpara factorizar en nmeros primos, lo que implicara que muchos sistemas de seguridad de todoel mundo se veran comprometidos de forma muy importante.

    Una vez vistos los anteriores conceptos tericos, ya tenemos la base para poder demostrarque el problema del viajante pertenece a la clase de complejidad computacional NP -completo,que veremos en el siguiente captulo.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • Captulo 2El problema del viajante esNP -completo

    Contenidos2.1. El problema del viajante: NP -duro y NP -completo . . . . . . . . . 162.2. Clase de problemas auxiliares . . . . . . . . . . . . . . . . . . . . . . 17

    2.2.1. Variables booleanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.2.2. El problema de satisfacibilidad . . . . . . . . . . . . . . . . . . . . . . 18

    2.3. Teorema de Cook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.3.1. Funcionamiento del algoritmo de certificacin . . . . . . . . . . . . . . 202.3.2. Teorema de Cook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    2.4. Resultado principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.4.1. 3-satisfatibilidad es NP -completo . . . . . . . . . . . . . . . . . . . . . 252.4.2. Circuito hamiltoniano es NP -completo . . . . . . . . . . . . . . . . . . 262.4.3. TSP es NP -completo . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    15

  • 16 Captulo 2. El problema del viajante es NP -completo

    En este captulo vamos a demostrar que el problema del viajante pertenece a la clase decomplejidad computacional NP -completo.

    En el captulo 2 afirmamos que el problema del viajante es NP -duro y que por lo tantoes muy difcil llegar a calcular una solucin general para este problema. Ahora decimos quevamos a demostrar que es un problema NP -completo. Ambas afirmaciones son ciertas aunqueparezca que pueden ser contradictorias. El problema del viajante es un problema de optimiza-cin combinatoria y por tanto segn como nos planteemos el problema tenemos tres versionesdel mismo: la versin de optimizacin, la versin de evaluacin y la versin de reconocimiento.La complejidad computacional de cada una de estas versiones es diferente, as se explica laposible contradiccin. En la primera parte de este captulo explicaremos este posible conflictobasndonos en el libro de Papadimitrou [4] (Captulo 15, Seccin 2).

    Luego, daremos una serie conceptos y de resultados previos, como por ejemplo el teoremade Cook, que sern la base del objetivo de este captulo.

    2.1. El problema del viajante: NP -duro y NP -completo.Intentaremos dar una respuesta concisa y fcil de entender a la aparente contradiccin

    mencionada en el final de la seccin anterior. El problema del viajante es un problema deoptimizacin combinatoria que, para la realizacin de este trabajo y en particular de este tema,enfocaremos desde el punto de vista computacional.

    Un problema de optimizacin lo definimos como un par (F, c), donde F es el conjunto desoluciones factibles y c es la funcin de coste, c : F R. Como vamos a tratar estos problemasdesde el punto de vista de la teora de la computacin, fijamos una manera de formular estosproblemas que nos sea til a la hora de introducirlos en un ordenador. Se podra hacer unlistado de todas las soluciones posibles con su respectivo coste c. Esto no es prctico ya quehay problemas para los que sera inviable de hacer por el gran nmero de soluciones posibles.Por ello, en lo que sigue vamos a suponer que F viene dado implcitamente por un algoritmoque llamaremos AF y c por otro algoritmo al que llamaremos Ac de la siguiente manera. Dadauna posible solucin f y un conjunto de parmetros S, el algoritmo AF decide si f perteneceo no a la regin factible, F. Por otro lado, dada una solucin factible f y otro conjunto deparmetros Q, Ac devuelve el coste de la solucin f , c(f).

    Un problema de optimizacin combinatoria lo podemos formular de tres maneras diferentes,mediante la versin de optimizacin, la versin de evaluacin o la versin de reconocimiento.Estas son las siguientes:

    Versin de optimizacin: Teniendo en cuenta las representaciones de los parmetrosS y Q para los algoritmos AF y Ac respectivamente, encontrar la solucin ptima.Versin de evaluacin: Dados S y Q, encontrar el coste de la solucin ptima.

    Versin de reconocimiento: Dado un problema representado por los parmetros S yQ, y un entero L, Hay una solucin factible f F tal que c(f) L?.1

    1Este mismo problema podemos plantearlo con c(f) L, si queremos maximizar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    Francisco Jos Veiga Losada

  • 2.2. Clase de problemas auxiliares 17

    Notar que la versin de reconocimiento del problema de optimizacin la podemos resolvernicamente contestando con un s o un no a la pregunta formulada.

    La pregunta que nos planteamos ahora es si la complejidad computacional de las tresversiones es la misma, es decir, si resolver estos tres problemas es igual de difcil.

    Para esto asumiremos que tanto AF como Ac son algoritmos en tiempo polinomial, algoque es muy frecuente. Se puede demostrar que la versin de evaluacin del problema se puederesolver de manera eficiente siempre que la versin de reconocimiento tambin lo sea. Por otraparte, decir que no se conoce ningn mtodo general que resuelva ninguna de estas versionesde este problema.

    De lo anterior podemos afirmar que las versiones de evaluacin y reconocimiento no son msdifciles que la versin de optimizacin, y que la versin de reconocimiento no es ms difcil quela versin de evaluacin. Si ordenamos estas versiones segn su nivel de dificultad obtenemosque: versin de optimizacin > evaluacin > reconocimiento.

    A nosotros nos interesa particularmente el problema del viajante. De lo dicho anteriormentededucimos que la versin de optimizacin del problema del viajante consiste en encontrar uncircuito hamiltoniano de longitud mnima (coste mnimo). Encontrar la solucin a esto esmuy complicado, es ms esta versin es NP -duro. Por otro lado, la versin de reconocimientodel problema del viajante que consiste en que dado un problema del viajante y un circuitohamiltoniano (solucin factible) ver si su longitud (coste) es menor (mayor) que un cierto Lprefijado de antemano. Responder a est pregunta, como vimos antes no es tan difcil, es msesta versin es NP -completa.

    De ahora en adelante vamos a trabajar con la versin de reconocimiento del problema delviajante y demostraremos que esta versin del problema es NP -completa.

    2.2. Clase de problemas auxiliares.Antes de meternos a fondo en el teorema de Cook vamos a describir una serie de problemas

    que nos resultarn de gran ayuda a la hora de llevar a cabo su demostracin. El problemaque vamos a ver ser el problema de satisfacibilidad. Este es la base del teorema de Cook yser clave a la hora de demostrar que el problema del viajante de comercio es NP -completo.Hablaremos brevemente de lo que son las variables y las frmulas booleanas, ya que el problemade satisfacibilidad involucra directamente a este tipo de variables.

    2.2.1. Variables booleanasUna variable booleana x es una variable que solo puede tomar dos valores, s o no. Las

    podemos combinar utilizando los siguientes operadores lgicos: o, representado con el smbolo+, quiere decir que ocurre una cosa o la otra; y, representado con el smbolo , significa queocurre una cosa y la otra; y no, representado con x, nos indica justo lo opuesto del valor dela variable x. Combinando las variables booleanas con los operadores lgicos que acabamos depresentar obtenemos las frmulas booleanas. Por ejemplo:

    x3 (x1 + x2 + x3) (2.1). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    Francisco Jos Veiga Losada

  • 18 Captulo 2. El problema del viajante es NP -completo

    Dado un valor t(x) para cada variable x evaluaremos la frmula booleana de la mismamanera que lo hacemos con una expresin algebraica. Si miramos el ejemplo anterior 2.1, ylo evaluamos con el siguiente conjunto de valores (llamados asignacin de verdad) t(x1) = s,t(x2) = s y t(x3) = no, obtenemos que la frmula booleana del ejemplo es verdadera.

    Las frmulas booleanas que son ciertas para alguna asignacin de verdad las llamamossatisfactibles. No todas las frmulas booleanas son satisfactibles. Hay algunas que no son ciertaspara ninguna asignacin de verdad ya que ellas mismas incurren en alguna contradiccin.Consideramos el siguiente ejemplo:

    (x1 + x2 + x3) (x1 + x2) (x2 + x3) (x3 + x1) (x1 + x2 + x3) (2.2)

    Para que esta frmula 2.2 sea cierta todas las subfrmulas que aparecen en parntesis(llamadas clusulas) deben ser ciertas. La primera clusula nos dice que al menos una de lastres variables tiene que ser un s. Las tres clausulas siguientes fuerzan a que las variables seaniguales. Supongamos que x1 es un no, como la segunda clusula debe ser verdadera, la variablex2 tendr que ser un no. Por la misma razn aplicada a la tercera clausula, la variable x3 debeser tambin un no. Esto contradice lo que nos peda la primera clusula, ya que ninguna de lastres variables puede ser un s. De forma ms general, si una variable asume un valor cualquiera;la segunda, tercera y cuarta clusula obligan a que las otras variables tomen el mismo valor.Si a esto aadimos que la primera clusula me obliga a que al menos una sea un s, y para quela ltima clusula sea cierta una de ellas tiene que ser un no, llegamos a una contradiccin. Laformula es insatisfactible.

    2.2.2. El problema de satisfacibilidadEl problema de satisfacibilidad es el siguiente:Dadas m clusulas C1, ... ,Cm, implicando a las variables x1, ... ,xn. La frmula dada

    por C1 ... Cm es satisfactible?El problema de satisfacibilidad es el problema central de la lgica matemtica. Es de gran

    inters intentar construir algoritmos eficientes para calcular sus soluciones. Un posible algoritmoque calcule la solucin a este problema sera aquel que pruebe con todas las asignaciones deverdad posibles y vea si al menos una de ellas satisface la ecuacin. Este algoritmo no eseficiente. Tenemos 2n posibles asignaciones de verdad, donde n es el nmero de variables.Esto implica que al aumentar el nmero de variables, el nmero de posibles asignaciones deverdad aumenta considerablemente. Hasta el momento no existe ningn algoritmo eficiente queresuelva el problema de satisfacibilidad.

    Es interesante observar que este problema se puede formular como un problema de progra-macin lineal entera (ILP). Esto es inmediato, nicamente identificaremos 1 con s y 0 conno. Por otro lado, o se convierte en una suma ordinaria +, y x pasa a ser 1x. Es necesarioque, para cada clusula C, al menos una de sus variables sea cierta o, lo que es lo mismo:

    xC

    x+xC

    (1 x) 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    Francisco Jos Veiga Losada

  • 2.3. Teorema de Cook 19

    Veamos ahora como quedara enunciado el ejemplo 2.2 como un problema de programacinlineal:

    x1 + x2 + x3 1x1 + (1 x2) 1x2 + (1 x3) 1x3 + (1 x1) 1

    (1 x1) + (1 x2) + (1 x3) 1x1, x2, x3 1x1, x2, x3 0

    x1, x2, x3 Z

    (2.3)

    Es fcil ver como las restricciones del ejemplo 2.2 y del problema de programacin linealentera 2.3 definen un mismo problema. Sabiendo esto, si tenemos una frmula booleana convarias clausulas conectadas, diremos que ese problema es satisfactible si el correspondienteproblema de programacin lineal entera tiene una solucin factible.

    Para que el problema 2.3 sea un problema de programacin lineal entera nos hace falta unafuncin objetivo. Para solucionar esto simplemente aadimos la inecuacin x1 + x2 + x3 yal sistema. Ahora el objetivo del problema ser maximizar el valor de la variable y. As yatenemos nuestra funcin objetivo y por tanto enunciado un problema de programacin linealentera.

    Este problema pertenece a una clase especial muy importante de problemas de programacinlineal entera que solo admiten soluciones que sean cero o uno. Estos tipos de problemas deprogramacin lineal entera se llaman problemas de programacin lineal binaria o problemas deprogramacin lineal cero-uno. La antepenltima y penltima fila del sistema normalmente seescriben como xj {0, 1}, j = 1, ..., n o con la igualdad x2j = xj que son equivalentes.

    2.3. Teorema de Cook.Para probar que un problema es NP -completo debemos probar que:

    a) El problema pertenece a la clase NP .

    b) Cualquier otro problema que pertenezca a NP se puede transformar en nuestro problemaen tiempo polinomial.

    Para probar el segundo punto se demuestra que un problema NP -completo conocido sepuede transformar en nuestro problema en tiempo polinomial. Con esto y utilizando la pro-piedad transitiva de las transformacin tendramos el segundo punto probado de la siguienteforma:

    Sabemos que una transformacin en tiempo polinomial es transitiva, es decir si A By B C entonces A C. Supongamos que B es NP -completo, entonces A NP ,existe una transformacin en tiempo polinomial A B. Tomamos un A NP y conside-ramos la transformacin en tiempo polinomial A B que sabemos que existe por lo dichoanteriormente.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 20 Captulo 2. El problema del viajante es NP -completo

    Suponemos que tenemos probada que existe una transformacin en tiempo polinomial entreel problema NP -completo B y el problema que nosotros queremos demostrar que es NP -completo, C. Esta transformacin ser B C.

    Ahora aplicando la propiedad transitiva de la transformacin en tiempo polinomial llegamosa la conclusin de que existe una transformacin en tiempo polinomial entre A y C, A C.Como esto se cumple para todo problema A NP , ya tenemos demostrado que nuestroproblema C es NP -completo.

    En este apartado trabajaremos con la versin de reconocimiento del problema del viajante.Para esto utilizaremos una definicin diferente (aunque equivalente) de la que habamos dadode lo que es un problema NP . Esa definicin es la siguiente:Definicin 2.1. Decimos que un problema de reconocimiento A pertenece a la clase de com-plejidad computacional NP si existe un polinomio p(n) y un algoritmo A (algoritmo de certi-ficacin) de tal manera que lo siguiente es cierto:

    La cadena x es un ejemplo si de A si y solo si existe una cadena de smbolos en , c(x) (elcertificado), tal que |c(x)| p(|x|), con la propiedad de que A, si se le da la entrada x$c(x),llega a la respuesta si despus de, a lo sumo p(|x|) pasos.

    Formalizaremos la idea de algoritmo de certificacin. Este algoritmo puede ser consideradocomo un dispositivo que lee y modifica los smbolos de una cadena. Vara una posicin cadavez a travs de una cabeza de lectura y escritura (de forma muy semejante al funcionamientode una mquina de Turing) como podemos ver en la figura 2.1.

    Figura 2.1: Algoritmo de certificacin.

    2.3.1. Funcionamiento del algoritmo de certificacinInicialmente, la cabeza est escaneando la posicin ms a la izquierda de la cadena, y el

    programa est a punto de ejecutar su primera instruccin. Las instrucciones del programa sonde la forma, l: si entonces ( ; o; l). Donde l y l son nmeros de instrucciones (etiquetas), y son smbolos del alfabeto y o es uno de los nmeros 1, 0 o 1. El significado estossmbolos es el siguiente:

    Si el smbolo analizado es , entonces borrarlo y escribe en su lugar, moverse o posicionesa la derecha y ejecutar la instruccin nmero l ; en caso contrario continuar a la siguienteinstruccin.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 2.3. Teorema de Cook 21

    Moverse o = 0 lugares a la derecha significa quedarse en la misma posicin en la que seencuentra, y moverse o = 1 lugares a la derecha significa moverse una posicin a la izquierda.Si denotamos por |A| al tamao del programa, es decir, al nmero total de instrucciones,entonces la ltima instruccin, |A|, ser aceptar.

    Decimos que una cadena x$c(x) es aceptada por A, si el algoritmo comenz correctamenteen la cadena y lleg a la ltima instruccin antes de que se cumplieran el nmero mximo depasos p(|x|). Si el algoritmo se ejecuta el nmero mximo de instrucciones p(|x|) sin llegar acompletar la cadena, o si la cabeza cae de la cadena, entonces decimos que x$c(x) es rechazada.

    Veremos ahora tres propiedades de este algoritmo de certificacin:

    1. El funcionamiento del algoritmo parece estar limitado al espacio proporcionado por lacadena, y no hay un papel de borrador extra. Este problema puede solucionarse fcil-mente. Podemos definir el certificado para que contenga en s mismo un espacio adicionalpara uso del algoritmo. Debido a esto, ahora debemos asumir que que para todos lascadenas x de la misma longitud, el tamao de c(x) es |c(x)| = p(|x|) |x| 1. Por tantoel tamao del conjunto x$c(x) es igual a p(|x|). Esto no es una perdida de generalidad yaque si el certificado es ms pequeo siempre se pueden completar con espacios en blancoque rellenen hasta ese tamao. Adems, si las entradas son mas largas que p(|x|) no sonsignificativas para A, ya que A no puede inspeccionar toda la longitud de esa entradadentro de los p(|x|) pasos.

    2. El repertorio de instrucciones disponible es muy limitado. Pero a pesar de ser tan limitado,puede ser usado para simular instrucciones ms complicadas solamente introduciendo unnico factor multiplicativo constante en el nmero total de pasos, pues esto no afectaral carcter polinomial del algoritmo.

    3. Aunque no vamos a detenernos en esto, otra propiedad importante de este modelo es quees capaz de hacer direccionamientos. Por ejemplo, mover el decimoquinto smbolo de lacadena, que recuerda a los ordenadores de acceso aleatorio.

    Apoyndonos en lo que acabamos de ver, vamos a dar el siguiente resultado, el teoremade Cook, que ser transcendental en la consecucin de nuestro objetivo. Nos basaremos en lademostracin que se da en el libro de Papadimitou [4] (Captulo 15, Seccin 5).

    Ejemplo: Problema de Satisfacibilidad y el algoritmo de certificacin

    El problema de Satisfacibilidad anteriormente analizado es NP . Dado un conjunto de clu-sulas C1, C2,..., Cm que involucran a las variables booleanas x1, x2,..., xn, donde el problemaes satisfactible.El algoritmo de certificacin asegurara simplemente que las clusulas Ci estnbien definidas y que todas las clusulas son verdad bajo la asignacin de verdad, que nosotrostomamos como certificado.

    2.3.2. Teorema de CookTeorema 2.1. Satisfacibilidad es NP -completo

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 22 Captulo 2. El problema del viajante es NP -completo

    Demostracin. Antes vimos que el problema de Satisfacibilidad es NP . Nos queda por probarla segunda parte, que si A NP , entonces A se puede transformar en tiempo polinomial en unproblema de Satisfacibilidad. Dada una cadena x debemos construir una frmula F (x) usandonicamente el hecho de que A NP , de tal manera que x es un ejemplo s de A s y slo sF (x) es satisfactible. Vamos a considerar el algoritmo de certificacin A para A, el cual, debidoa que A NP opera dentro de un polinomio p(n).

    La frmula F (x) ser una frmula booleana (esto es claro ya que estamos tratando el pro-blema de satisfacibilidad). Ya la explicamos anteriormente en el punto 3.2 y usar las variablesbooleanas que definiremos en las siguientes lineas.

    1. La variable booleana xij con 0 i, j p(|x|) y . El significado de esta variablecuando vale 1 es el siguiente: en el instante i, la posicin j de la cadena contiene el smbolo. En el caso de que su valor sea 0, nos dir que en ese instante la cadena no est en esaposicin.

    2. La variable booleana yijl con 0 i p(|x|), 0 j p(|x|) + 1 y 1 l |G|, donde |G|es el nmero de instrucciones en el algoritmo G. El significado de esta variablen cuandosu valor es 1 es el siguiente: En el instante i, leemos la j-sima posicin y ejecutamosla instruccin l-sima. Notar, que si j = 0 o si j = p(|x|) + 1, significa que el lector hasalido de la cadena y por tanto el clculo no tiene xito. Si el valor de esta variable es 0significa que en el instante i no leemos la j-sima posicin y por tanto no se ejecuta lal-sima posicin.

    Estas variables booleanas las combinamos formando la frmula booleana F (x), que cumpleque es satisfactible si y solo si x es un ejemplo s de A. La frmula F (x) se descompone encuatro partes como sigue:

    F (x) = U(x) S(x) W (x) E(x)En lo que sigue descompondremos y analizamos cada una de las cuatro partes de F (x):

    El propsito de U(x) es asegurarse de que en cada instante i con 0 i p(|x|), cadaposicin de la cadena contiene un nico smbolo. El lector escanea una nica posicindentro de los lmites de la cadena, y el programa ejecuta una nica declaracin.

    U(x) =

    0i,jp(|x|) 6=

    (xij + xij

    ) .

    0ip(|x|)j 6=jo l 6=l

    (yijl + yij l

    ) .

    .

    0ip(|x|)1l|A|

    (yi0l.yi,p(|x|),l

    ) .

    0ip(|x|)

    0jp(|x|)

    xij

    . 1jp(|x|)

    1l|A|

    yijl

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 2.3. Teorema de Cook 23

    La frmula S(x) nos indica que el algoritmo A comienza correctamente. En el instante0 el smbolo ms a la izquierda |x| + 1 es x$, la cabeza de lectura y escritura explora elsmbolo ms a la izquierda de la cadena y la primera instruccin de A est a punto deser ejecutada.

    S(x) =

    |x|j=1

    x0jx(j)

    .x0,|x|+1.$.y011(x(j) representa el smbolo j-simo de la cadena x)

    La frmulaW (x) indica que el algoritmo G funciona bien, de acuerdo con las instruccio-nes del programa. W (x) es el conjunto de frmulas Wijl, una para cada 0 i p(|x|),1 j p(|x|), y 1 l |A|, de tal manera que la l-sima instruccin de G es:

    l : si entonces ( ; o; l)

    La frmula Wijl est definida de la siguiente manera:

    Wijl =(xij + yijl + xi+1,j,

    ).(xij + yijl + yi+1,j+o,l

    ).

    . 6=

    ((xij + yijl + xi+1,j, ) . (xij + yijl + yi+1,j,l+1))

    Esto significa que siempre que xij e yijl sean ambas verdaderas, en el siguiente instantelas variables x e y, que indicaron queA hizo un movimiento correcto, deben de ser tambinverdaderas. Para la ltima instruccin de A, tenemos que para cada i, j y :

    Wij|A| =(xij + yij|G| + yi+1,j,|A|

    )Indica que una vez que el algoritmo alcance la instruccin aceptar, permanezca en ella.Finalmente, W (x) contiene las clausulas:

    0ip(|x|)

    1l|A|j 6=j

    (xij + yij l + xi+1,j,

    )

    Significa que cada vez que A est escaneando una posicin distinta de la j-sima, elsmbolo de esa posicin permanece sin cambios.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 24 Captulo 2. El problema del viajante es NP -completo

    La ltima parte de F (x) indica nicamente que A termina correctamente con el programade ejecucin de la instruccin aceptar. Esto consiste slo en una clausula:

    E(x) =p(|x|)j=1

    yp(|x|),j,|A|

    Con esto queda completada la construccin de F (x). Esta construccin solo requiere de unnumero de operaciones que es una funcin polinomial |x|. Esto se deduce del hecho de que lalongitud total de F (x) es O(p3(|x|)log(p(|x|))). Por tanto, lo nico que nos queda por demostrarpara confirmar que esta es una transformacin polinomial del problema A al problema desatisfacibilidad es la siguiente afirmacin:

    F (x) es satisfactible si y solo si x es un ejemplo s de APara demostrar la implicacin solo si suponemos que F (x) es satisfactible. Por tanto U(x),

    S(x), W (x) y E(x) son tambin satisfactibles por la misma asignacin de verdad t. Como tsatisface U(x), para todo i y j solo una variable xij debe ser cierta, es decir que la j-simacelda contiene a en el instante i. Tambin para todo i, exactamente una de las variables yijles cierta, es decir, en el instante i la j-sima posicin de la cadena es examinada y se ejecutala orden l. Por ltimo, ninguna de las variables yi0l e yi,p(|x|)+1,l pueden ser ciertas, por lo queel lector nunca saldr de la cadena.

    La asignacin de verdad t describe algunas secuencias de cadenas, posiciones del lector einstrucciones. Vamos a demostrar ahora que esta secuencia es un clculo de aceptacin vlidopara A con una entrada x$c(x) para algn certificado c(x).

    Dado que S(x) tambin debe ser satisfecho por t la secuencia comienza correctamente. Losprimeros |x| + 1 lugares ocupados por la cadena correcta x$, y con el primer smbolo de xescaneado mientras se ejecuta la primera instruccin.

    W (x) tambin es satisfecha por t. Esto significa que la secuencia cambia con las reglasde ejecucin del algoritmo A. Finalmente, t satisface E(x) solo si el algoritmo termina en sultima instruccin de aceptacin.

    Consecuentemente, si F (x) es satisfactible existe una cadena de longitud apropiada de talmanera que A acepta x$c(x), entonces x es un si de A.

    Para la otra implicacin asumimos que x es un si de A. Entonces existe una cadena c(x)de longitud p(|x|) |x| 1, de tal manera que A acepta x$c(x). Esto significa que existe unasucesin de cadenas de p(|x|) (con x$c(x) primero), nmeros de instruccin y posiciones deescaneo que son vlidas en A y terminan con la aceptacin de x$c(x). Esta sucesin define unaasignacin de verdad t que necesariamente satisface F (x). Lo que completa la prueba de estaafirmacin.

    La afirmacin que acabamos de probar nos dice que F (x) es un si de satisfacibilidad si ysolo si x es un si del problema A. Por tanto, lo que escribimos es una transformacin polinmicade A a satisfacibilidad. Adems, como A es un problema arbitrario dentro de NP , concluimosque el teorema queda demostrado.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 2.4. Resultado principal 25

    2.4. Resultado principal.Demostraremos ahora que el problema del viajante de comercio es NP -completo. Para ello

    demostraremos unos resultados previos y veremos que existe una transformacin polinmicade una problema NP -completo al problema del viajante. Esto lo podemos ver en el libro dePapadimitrou [4] (Captulo 15, seccin 6).

    Un problema de satisfacibilidad al que le restringimos el nmero de variables que hay encada clausula a 3, diremos que es un problema de 3-satisfacibilidad. Este problema sigue siendotan difcil como el problema de satisfacibilidad.

    2.4.1. 3-satisfatibilidad es NP -completoTeorema 2.2. 3-satisfacibilidad es NP -completo

    Demostracin. Como 3-satisfacibilidad es un caso particular del problema de satisfacibilidadest en NP . Para demostrar que es NP -completo vamos a demostrar que existe una trans-formacin polinmica de satisfacibilidad a 3-satisfacibilidad. Veremos que satisfacibilidad setransforma polinmicamente en 3-satisfacibilidad.

    Consideramos cualquier frmula F con las clausulas C1, ..., Cm y construimos una nuevafrmula F que contenga nicamente 3 variables por clausula, de tal forma que F es satisfactiblesi y solo si F lo es. Para esto examinaremos cada una de las clausulas de F por separado.Reemplazaremos cada Ci por un conjunto conjunto equivalente de clausulas donde cada unade ellas tendr 3 variables. Distinguiremos tres casos:

    1. Si Ci tiene 3 variables no hacemos nada.

    2. Si Ci tiene ms de tres variables, como por ejemplo Ci = (1 + 2 + ...+ k), K >3, reemplazamos Ci por k 2 clausulas como sigue, (1 + 2 + x1) . (x1 + 3 + x2) .(x2 + 4 + x3) . ... . (xk3 + k1 + k), donde x1, ..., xk3 son nuevas variables. Es fcilver que estas nuevas clausulas son satisfactibles si y solo si Ci lo es. Veamos un casoparticular, supongamos que Ci = (1 + 2 + 3 + 4) por tanto las nuevas clausulasquedaran, (1 + 2 + x1) . (x1 + 3 + 4). Es trivial ver que si las nuevas clausulas sonciertas es estrictamente necesario que al menos una de las i sea un si. Esto implica quela clausula Ci es cierta. Por otra parte, para que la clausula Ci sea cierta es necesario queal menos una de las variables i sean un si. Si dos o ms de las i son un si, entonceses trivial que las nuevas clausulas son ciertas sea cual sea el valor de la variable auxiliarx1. Si slo un i es un si, las nuevas clausulas son ciertas siempre que la variable quecorresponde al si de x1 o x1 est en la clausula en la que no se encuentre ese i.

    3. Si Ci = (), reemplazamos Ci por (+ y + z), y si Ci =(+

    ), lo reemplazamos por(

    + + y). Luego aadimos las clausulas

    (z + + ) . (z + + ) .(z + +

    ).(z + +

    ). (y + + ) .

    (y + +

    ). (y + + ) .

    (y + +

    ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    Francisco Jos Veiga Losada

  • 26 Captulo 2. El problema del viajante es NP -completo

    a la frmula, donde y, z, y son nuevas variables. Esta adicin fuerza a que lasvariables z e y sean un no en cualquier asignacin de verdad que satisfaga F . Por tantolas clausulas () y

    (+

    )son equivalentes en sus reemplazamientos.

    Con los cambios que acabamos de hacer, hemos reemplazado todas las clausulas Ci por otrasequivalentes con tres variables en cada clausula. Adems hemos demostrado que la frmula finalF

    es satisfactible si y solo si F lo es. Como la construccin de F se puede realizar en tiempopolinomial, podemos decir que hemos descrito una transformacin en tiempo polinomial desatisfacibilidad a 3-satisfacibilidad. Por lo tanto podemos afirmar que 3-satisfacibilidad es NP -completo.

    2.4.2. Circuito hamiltoniano es NP -completoUtilizando el resultado anterior vamos a demostrar que encontrar un circuito hamiltoniano

    es un problema NP -completo. Esto ser la base para lograr nuestro objetivo principal, demos-trar que el problema del viajante de comercio es un problema NP -completo.

    Teorema 2.3. Circuito hamiltoniano es NP -completo

    Demostracin. Sabemos que el problema de encontrar un circuito hamiltoniano est en NP .Vamos a demostrar que 3-satisfacibilidad, que acabamos de demostrar que es un problema NP -completo, tiene una transformacin polinmica a este problema. Con esto quedara demostradoel teorema. Entonces dada una frmula booleana F que contiene m clausulas C1, ..., Cm y queinvolucra a n variables x1, ..., xn, construimos un grafo G = (V,E) tal que G contiene uncircuito hamiltoniano si y solo si F es satisfactible. Para la realizacin de esta demostracin,vamos a considerar las siguientes construcciones especiales que nicamente utilizaremos paraesta demostracin.

    Vamos a considerar primero el grafo A que se muestra en la figura 2.2 (a). Supongamos queeste grafo es un subgrafo de algn otro grafo G tal que:

    1. Los nicos extremos de A son u, u , v y v .

    2. G tiene un circuito hamiltoniano c.

    Teniendo en cuenta los dos puntos anteriores podemos afirmar que c atraviesa A por algunode los dos caminos mostrados en la figura 2.2 (b) y (c). Para ver esto, lo primero es decir quelos ocho bordes verticales de A tienen que pertenecer siempre a c, ya que si no lo hicieranes imposible que el circuito c pueda pasar por los cuatro nodos z1, z2, z3 y z4. Adems,cualquiera combinacin de bordes horizontales que no sean los que se muestran en esas dosfiguras no pueden ser parte de un circuito hamiltoniano. Con todo esto esto, podemos decirque realmente el subgrafo A se comporta como si se tratara de un par de bordes [u, u ] y [v, v ]de G. Si entramos en A por el nodo u tenemos que salir obligatoriamente por el nodo u , y si lohacemos por el nodo v saldremos por el nodo v , con la restriccin adicional de que un circuitohamiltoniano en G debe atravesar obligatoriamente uno de ellos. Para representar el subgrafoA lo haremos como se muestra en la figura 2.2 (d).

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 2.4. Resultado principal 27

    u u

    v v

    z1 z2 z3 z4

    (a)

    u u

    v v

    z1 z2 z3 z4

    (b)

    u u

    v v

    z1 z2 z3 z4

    (c)

    A

    u u

    v v

    (d)

    Figura 2.2: Subgrafo A

    El grafo B que se muestra en la figura 2.3 (a) tiene una propiedad similar. Si B es unsubgrafo del grafo G, de tal manera que solo los nicos nodos de B en los que inciden aristasde G son los nodos u1 y u4. Si adems G tiene un circuito hamiltoniano c, entonces c no puedeatravesar a la vez las aristas [u1, u2], [u2, u3] y [u3, u4]. Por otra parte, cualquier subconjuntopropio de estas aristas puede ser una parte de un circuito hamiltoniano de G a travs de lasconfiguraciones mostradas en las figuras 2.3 (a), (b), (c) y (d) (y ms configuraciones que nose muestran en esta imagen). Para representar este subgrafo, lo haremos como se ve en lafigura 2.3 (e).

    El grafo G = (V,E) consistir principalmente en copias de los subgrafos A y B. Para cadauna de las m clausulas C1, ..., Cm; nosotros tenemos m copias del subgrafo B unidas en serie(ver la figura 2.4 para una ilustracin de la construccin de G. Darse cuenta que estamosconstruyendo una transformacin polinmica de 3 SAT a circuito hamiltoniano y por tantocada una de las clausulas de F ha de tener 3 variables). Adems para cada variable xi tenemosdos nodos vi y wi, y dos aristas que son la copia derecha de [vi, wi] y su correspondiente copiaizquierda. Tambin tenemos las aristas [wi, vi+1] para i = 1, ..., n 1, y las aristas [u11, v1]y [um4, wn] donde uij denota la i-sima copia de uj (ver la figura 2.4 donde estn los nodosmarcados).

    Darse cuenta que nicamente utilizamos los parmetros m y n de nuestra frmula en laconstruccin de G de momento. Puesto que G pretende captar la complejidad de la cuestin desatisfacibilidad para F , ahora tenemos que tener en cuenta la naturaleza exacta de las clausulasde finalizacin. As conectamos (a travs del subgrafo A, A-conector) la arista [uij , uij+1 ] conla copia izquierda de [vk, wk] en el caso de que la j-sima variable de Ci sea xk y con la copiaderecha de [vk, wk] si es xk (ver la figura 2.4). Con esto tenemos completa la construccin delgrafo G.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 28 Captulo 2. El problema del viajante es NP -completo

    u1

    u2

    u3

    u4

    (a)

    u1

    u2

    u3

    u4

    (b)

    u1

    u2

    u3

    u4

    (c)

    u1

    u2

    u3

    u4

    (d)

    B

    u1

    u2

    u3

    u4

    (e)

    Figura 2.3: Subgrafo B

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 2.4. Resultado principal 29

    B

    B

    B

    A

    A

    A

    A

    A

    A

    A

    A

    A

    u11

    u12

    u13

    u14

    u21

    u22

    u23

    u24

    u31

    u32

    u33

    u34

    v1

    w1

    v2

    w2

    v3

    w3

    Figura 2.4: Ejemplo de un circuito hamiltoniano en el grafo G con m = 3 y n = 3.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 30 Captulo 2. El problema del viajante es NP -completo

    Para este ejemplo la funcin F quedara de la siguiente forma:

    F = (x1 + x2 + x3).(x1 + x2 + x3).(x1 + x2 + x3)

    El circuito hamiltoniano que se nos muestra corresponde a la siguiente asignacin de verdad:

    t(x1) = si; t(x2) = no y t(x3) = no

    Ahora vamos a argumentar que la construccin de G descrita por F anteriormente es talque G tiene un circuito hamiltoniano si y solo si F es satisfactible. Para la direccin solo si de laafirmacin suponemos que G tiene un circuito hamiltoniano c. c tiene que tener una estructuraespecial: atraviesa [u11, v1] y luego todos los nodos v y w de arriba hacia abajo, eligiendouna de las copias de [vi, wi] para cada i = 1, ..., n. Luego atraviesa [wn, um4] y finalmenteatraviesa todas las copias de B de abajo hacia arriba. Darse cuenta que el hecho de que celija la copia izquierda de [vi, wi] significa que xi toma el valor si. Por otro lado si la copiaelegida es la derecha significa que la variable xi toma el valor no. La funcin resultado es unaasignacin de verdad vlida porque c debe atravesar exactamente una de las dos copias. Lasaristas [uij , uij+1 ] para cada clausula Ci se comporta de forma similar; son atravesadas si y solosi la copia correspondiente de la arista [vk, wk] no lo es, es decir, si la correspondiente variablees un no. Por otra parte, como las aristas [uij , uij+1 ] son partes de un grafo B no pueden serlas tres atravesadas por c. Equivalentemente la correspondiente clausula Ci es satisfecha porla correspondiente asignacin de verdad. Adems, como esto es vlido para todas las clausulasCi seguimos que todas las clausulas lo verifican y por tanto F es satisfactible.

    Para la implicacin si suponemos que F es satisfactible para alguna asignacin de verdad t.Est claro que podemos construir un circuito hamiltoniano para G simplemente siguiendo lasreglas anteriores, es decir, atravesar la copia izquierda de [wi, vi] si y solo si xi es un si mediantet, y atravesar la arista [uij , uij+1 ] si y solo si la j-sima variable de Ci es un no mediante t. Estosiempre ser posible sin atravesar las tres aristas [uij , uij+1 ] para cualquier clausula ya que sesupone que t satisface F .

    Hemos demostrado que existe una transformacin polinmica de 3-satisfacibilidad a circuitohamiltoniano, es decir, 3-satisfacibilidad se transforma polinmicamente en circuito hamilto-niano. Adems, como vimos en un resultado anterior que 3-satisfacibilidad es NP -completo,podemos afirmar que el problema de encontrar un circuito hamiltoniano es NP -completo.

    2.4.3. TSP es NP -completoCon todo los datos que tenemos, ya podemos enunciar y demostrar el resultado central de

    este trabajo, el problema del viajante de comercio es NP -completo.

    Corolario 2.1. El problema del viajante de comercio (TSP) es NP -completo

    Demostracin. El problema de encontrar un circuito hamiltoniano, que acabamos de demostrarque es un problema que pertenece a la clase NP -completo, es un caso particular del problemadel viajante de comercio. Sea G = (V,E) un grafo cualquiera, construimos un ejemplo del TSP

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 2.4. Resultado principal 31

    con |V | ciudades, siendo dij = 1 si [vi, vj ] E, y dij = 2 en otro caso. Supongamos que elpresupuesto L es igual al |V |. Es inmediato ver que existe un circuito menor o igual que Lsi y solo si existe un circuito hamiltoniano en G. Por tanto la versin de reconocimiento delproblema del viajante es NP -completo.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • Captulo 3Diseo de algoritmos para el TSP

    Contenidos3.1. Algoritmo de programacin lineal y entera; ramificacin y acotacin 343.2. Algoritmo del rbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    3.2.1. rbol de expansin mnima . . . . . . . . . . . . . . . . . . . . . . . . 353.2.2. Cadena euleriana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.2.3. El algoritmo del rbol . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    3.3. Algoritmo de Christofides . . . . . . . . . . . . . . . . . . . . . . . . 403.3.1. Problema de emparejamiento . . . . . . . . . . . . . . . . . . . . . . . 403.3.2. Algoritmo de Christofides . . . . . . . . . . . . . . . . . . . . . . . . . 40

    3.4. Algoritmo de las hormigas . . . . . . . . . . . . . . . . . . . . . . . . 423.5. Algoritmo de Lin-Kernighan . . . . . . . . . . . . . . . . . . . . . . . 45

    33

  • 34 Captulo 3. Diseo de algoritmos para el TSP

    En este captulo del trabajo, vamos a definir y explicar el funcionamiento de algunos algo-ritmos que podemos utilizar a la hora de intentar calcular la solucin para un problema delviajante de comercio. Algunos de estos algoritmos los programaremos nosotros mismos.

    La informacin que utilizamos para la realizacin de este captulo est tomada en una granparte de lo apuntes de tcnicas de optimizacin da xestin [2] realizados por el profesor JulioGonzlez Daz.

    3.1. Algoritmo de programacin lineal y entera; ramificacin yacotacin.

    La primera forma de atacar el problema del viajante es utilizar un algoritmo de programa-cin lineal y entera. Este es un algoritmo exacto pero con un coste de tiempo muy elevado. Enmuchos casos, la utilizacin de este programa es inviable debido a que el coste de tiempo esmuy alto a pesar de que llegue siempre a obtener la solucin del problema.

    Decimos que es la primera forma de atacar el problema ya que es la manera ms intuitivade hacerlo. Lo nico que deberamos de hacer es coger la frmula vista en el captulo 2, quenos dice como se poda expresar el TSP como un problema de programacin lineal entera yprogramarlo. Ya hablamos en ese mismo captulo de algunas propiedades y justificamos queestaba bien definida. Recordamos que la frmula es la siguiente:

    minimizarn

    i,j=0cijxij

    sujeto a (1)ni=0

    xij = 1 j = 0, ..., n

    (2)nj=0

    xij = 1 i = 0, ..., n

    (3) ui uj + nxij n 1 1 i 6= j n0 xij 1, xij Z,i, j

    3.2. Algoritmo del rbol.

    El siguiente algoritmo que vamos a tratar es el del rbol. Este es un algoritmo aproximadoque puede llegar a cometer, en el peor de los casos, errores de hasta el 100 %. Aunque puedacometer este error, este algoritmo no tiene el problema del alto coste de tiempo que tiene elproblema de programacin lineal y entera.

    Antes de explicar en que consiste el algoritmo del rbol vamos a hacer referencia a una seriede conceptos que son imprescindibles a la hora de entender este algoritmo.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 3.2. Algoritmo del rbol 35

    3.2.1. rbol de expansin mnima

    El problema del rbol de extensin mnima es un problema con muchos usos tanto desde elpunto de vista tericos como desde el punto de vista prctico prctico. Este problema se definesobre grafos no orientados como podemos ver ms adelante.

    Una cadena en un grafo no orientado G es un conjunto de aristas dentro del mismo. De lamisma forma, un grafo se dice que es conexo si para cada par de vrtices existe una cadena quelos une. Un grafo se dice que es un rbol si es conexo y no tiene ciclos.

    Definicin 3.1. Se dice que un rbol definido en un grafo G = (N,M) es un rbol de expansinsi contiene a todos los nodos de G.

    0

    1 2

    34

    5 6

    7

    Figura 3.1: Un rbol.

    Ahora, con estas definiciones anteriores ya podemos definir el problema del rbol de expan-sin mnima.

    Definicin 3.2. El problema del rbol de expansin mnima en un grafo no orientado G concostes c consiste en encontrar un rbol de espansin en G de coste mnimo.

    Para encontrar un algoritmo que soluciones este problema necesitamos un resultado queveremos ahora. Dado un grafo no orientado G(N,M), un bosque es una coleccin de rboles enG que no tienen ningn nodo en comn. Diremos que es un bosque de expansin de G si todonodo de G pertenece a algn rbol del bosque. El algoritmo que utilizaremos para llegar a unasolucin de este problema es consecuencia inmediata del siguiente resultado:

    Proposicin 3.1. Tenemos un grafo no dirigido G, unos costes c y B un bosque de expansinde G. Fijemos un rbol A en B y supongamos que el arco (i, j) es el arco de mnimo coste deentre aquellos arcos que unen un nodo en A con algn nodo fuera de A. Entonces, de entretodos los rboles de expansin de G que contienen al bosque B habr uno de mnimo coste quecontenga al arco (i, j).

    Con este resultado podemos construir el siguiente algoritmo:

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 36 Captulo 3. Diseo de algoritmos para el TSP

    Algoritmo para el problema del rbol de expansin mnima

    Paso 1Elijamos un nodo arbitrario i y definamos el conjunto X = {i}.

    Paso 2Busquemos el nodo de N\X ms cercano a X, digamos j.

    Aadamos el nodo j a X.Aadamos a nuestro rbol el arco correspondiente (el arco que une j a Xa mnimo coste).Repetir el Paso 2 mientras X 6= N .

    3.2.2. Cadena eulerianaAntes de nada damos la definicin de cadena de euler:

    Definicin 3.3. Una cadena de euler en un grafo G es una cadena cerrada que contiene atodos los nodos al menos una vez y a todas las aristas una nica vez.

    Un grafo que contiene una cadena de euler se llama grafo euleriano. Un multigrafo G =(N,M) es un grafo donde el conjunto M puede tener aristas repetidas. Todos los conceptosdefinidos para grafos podemos generalizarlos para multigrafos, as un multigrafo es eulerianosi existe una cadena de euler.

    Proposicin 3.2. Un multigrafo G = (N,M) es euleriano s y slo s:

    (I) G es conexo.

    (II) Todos los nodos de N tienen grado par.

    Demostracin. Es inmediato que estad dos condiciones son necesarias. Si el grafo no es conexono hay ninguna cadena cerrada que recorra todos los nodos y, adems, en cualquier cadenacerrada tendremos que el nmero de arcos incidentes en cada nodo es par.

    Para la suficiencia probaremos por induccin en el nmero de aristas del grafo. Un multigrafocon 0 aristas verificando (I) y (II) tendr un nico nodo y ser euleriano. Supongamos ahoraque tenemos un multigrafo G verificando (I) y (II) y tal que todos los multigrafos con menosaristas que G veirficando (I) y (II) son eulerianos. Elijamos ahora un nodo i de G y empecemosen l una cadena cerrada de aristas deG, que nunca repita dos veces la misma arista; claramente,(I) y (II) nos asegura que esto ser posible. Ahora, eliminemos de G las aristas de esta cadena.Esto dar lugar a unas cuantas componentes conexas (subgrafos conexos del grafo original).Adems, como a cada nodo le hemos eliminado una cantidad par de aristas en l, cada una deestas componentes conexas verificar (I) y (II), y la hiptesis de induccin nos dice que cadauna de ellas ser euleriana. Ahora podemos crear una cadena euleriana en el grafo original Gsin ms que concatenar las distintas cadenas eulerianas con la cadena de partida.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 3.2. Algoritmo del rbol 37

    Basndonos en el resultado anterior utilizamos el siguiente algoritmo a la hora de encontraruna solucin al problema de encontrar una cadena euleriana.

    Algoritmo para encontrar una cadena euleriana(en un multigrafo verificando (I) y (II))

    Paso 1:Partimos de un nodo cualquiera i N .

    Paso 2:Construimos una cadena cerrada que empiece en i.

    Paso 3:Eliminamos del grafo las aristas de la cadena y construimos una nueva cadenacerrada para cada una de las componentes conexas de las que conste el nuevografo.

    Paso 4:Seguimos haciendo esto hasta que todos las aristas hayan sido aadidas a algunacadena cerrada.

    Paso 5:Concatenamos todas las cadenas y obtenemos una cadena euleriana.

    Vamos a ver ahora un resultado que nos ser muy til posteriormente en el algoritmo delrbol.

    Proposicin 3.3. Sea G = (N,M) un grafo completo con costes c verificando la desigualdadtriangular. Sea G = (N, M) un multigrafo euleriano (con costes dados tambin por c). Enton-ces, existe un circuito hamiltoniano en G con coste asociado c() C(G). Adems, podremosencontrar dicho circuito en tiempo O(m).

    Demostracin. Las hiptesis nos aseguran que G tiene una cadena euleriana . Como vi-sita todos los nodos al menos una vez, podemos escribir = (0, i1, 1, i2, ..., in, n) donde := (i1, ..., in, i1) es un circuito hamiltoniano (embebido en ) y 0, 1,..., n son cadenas(posiblemente vacas). La desigualdad triangular nos asegura que, para todo k, c(ik, ik+1) sermenor o igual que la suma de los costes de las aristas en ik, k, ik+1. Por tanto, la longituddel circuito , c(), ser menor o igual que la longitud de la cadena , que ser exactamenteC(G).

    Por ltimo, sabemos que la cadena euleriana la podemos encontrar en un tiempo O(m), yla identificacin de un circuito hamiltoniano dentro de ella es una tarea inmediata que se puederealizar de tal manera que el tiempo total sea O(m).

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 38 Captulo 3. Diseo de algoritmos para el TSP

    3.2.3. El algoritmo del rbolUna vez visto los resultados anteriores procedemos a plantear un algoritmo que nos ser

    til para resolver el problema del viajante. Este algoritmo, algoritmo del rbol permite calcularun circuito hamiltoniano en un grafo G con coste c. El algoritmo es el siguiente:

    Algoritmo del rbol

    Paso 1Encontrar un rbol de expansin mnima T.

    Paso 2Crear un multigrafo G duplicando todas las aristas del rbol T.

    Paso 3Encontrar una cadena euleriana de G y un circuito hamiltoniano embebidoen ella.

    Con este algoritmo resolveremos una de la clase ms importante de problemas del viajante,los problemas del viajante mtricos.Trabajaremos con grafos no orientado, es decir, con cij = cji.Este tipo de problemas se caracterizan por dos cosas:

    El grafo G = (N,M) es completo. Para todo par de nodos i, j N , (i, j) M .Desigualdad triangular. Dados tres nodos i, j y k tenemos que cij cik + ckj

    Mediante el siguiente resultado vamos a probar que el algoritmo del rbol est bien definido,es decir encuentra un circuito hamiltoniano y adems es una 2-aproximacin para el problemadel viajante mtrico.

    Proposicin 3.4. El algoritmo del rbol es un algoritmo 2-aproximado del problema del via-jante mtrico (simtrico).

    Demostracin. El multigrafo G es conexo, ya que contiene a un rbol de expansin mnima.Adems, todos sus nodos tienen grado par, ya que se ha obtenido duplicando todas las aristasde un rbol. Por tanto, la Proposicin 3.2 nos asegura que G es euleriano. Entonces, podremosencontrar una cadena euleriana y un circuito hamiltoniano embebido en ella.

    Probemos ahora la cota para el error. Denotemos por c el coste del circuito hamiltoniano decoste mnimo. Queremos probar que c() 2c. La Proposicin 3.3 nos asegura que c() C(G).Claramente, C(G) = 2c(T ), donde c(T ) es el coste del rbol T . Pero c(T ) c, ya que cualquiercircuito hamiltoniano puede transformarse en un rbol de expansin sin ms que eliminar unaarista cualquiera. Por tanto, c() C(G) = 2c(T ) 2C.

    En la Figura 3.2 podemos ver una ilustracin del algoritmo del rbol mediante un ejem-plo partiendo de un rbol de expansin mnima. No pondremos los costes para simplificar elejemplo.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 3.2. Algoritmo del rbol 39

    02

    1 3

    4

    5

    6

    7

    8

    9

    (a) Paso (I) rbol de expansin mnima.

    02

    1 3

    4

    5

    6

    7

    8

    9

    (b) Paso (II) Creando el multigrafo.

    02

    1 3

    4

    5

    6

    7

    8

    9

    12 3

    4

    5

    6

    7

    89 10

    1112

    1314

    1516

    17

    18

    (c) Paso (III) Cadena de Euler:(0, 2, 0, 1, 0, 5, 6, 7, 9, 8, 9, 7, 4, 3, 4, 7, 6, 5, 0).

    02

    1 3

    4

    5

    6

    7

    8

    9

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    (d) Paso (III) Circuito hamiltoniano:(0, 2, 1, 5, 6, 7, 9, 8, 4, 3, 0).

    Figura 3.2: Ilustracin del algoritmo del rbol.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 40 Captulo 3. Diseo de algoritmos para el TSP

    3.3. Algoritmo de Christofides.De la misma forma que el algoritmo del rbol, el algoritmo de Christofides es un algoritmo

    aproximado que puede cometer un error de hasta el 50 %.Antes de meternos a explicar el algoritmo de Christofides vamos a plantear un problema

    de gran importancia para el desarrollo del algoritmo.

    3.3.1. Problema de emparejamientoDefinimos el problema de emparejamiento como sigue:

    Definicin 3.4. El problema del emparejamiento asociado a un grafo G = (N,M) con unnmero par de nodos y unos costes c, consiste en emparejar cada nodo i de N con un y slo unnodo j de N a coste mnimo. Este problema es una generalizacin del problema de asignacindonde los conjuntos de origen y destino no estn fijados de antemano.

    El problema de emparejamiento admite una formulacin, como un problema de programa-cin lineal y entera, muy sencilla. Esta es como sigue:

    minimizarkM

    ckfk

    sujeto a

    kM,ikfk = 1 i N

    fk {0, 1} k MEsto quiere decir que cada arco (i, j) tomar los valores 0 o 1 para indicar si los nodos i

    y j han sido emparejados. Como estamos en un grafo no orientado, (i, j) y (j, i). La primerarestriccin nos dice que exactamente un arco ser incidente en cada nodo.

    Destacar que el problema de emparejamiento es un problema polinomial y los algoritmosms rpidos para resolverlo tienen una velocidad de O(n3).

    3.3.2. Algoritmo de ChristofidesEl algoritmo de Christofides fue definido por Christofides en 1976 y en estos momentos

    esta considerado como el mejor algoritmo aproximado polinomial para el problema del viajantemtrico.

    Utilizando el siguiente resultado podremos afirmar, mediante una proposicin, que el algo-ritmo de Christofides que vamos a ver ahora, est bien definido.

    Lema 3.1. Todo grafo G = (N,M) tiene un nmero par de nodos con grado impar.

    Demostracin. Claramente, la suma de los grados de todos los nodos, K, ha de ser par, yaque cada arista se suma dos veces. Adems, la suma de los grados de todos los nodos de gradopar, Kp ser par. Entonces, la suma de los grados de todos los nodos de grado impar, Ki,ser tambin par, ya que Ki = K Kp es la resta de dos nmeros pares. Pero Ki es unasuma de nmeros impares y la nica forma de que sea par es que haya una cantidad par desumandos.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 3.3. Algoritmo de Christofides 41

    El algoritmo de Christofides es muy semejante al algoritmo del rbol. El nico cambioque encontramos con respecto a este ltimo est en el Paso 2, donde se cambia el paso deduplicacin del rbol de expansin mnima por la resolucin de un problema de emparejamiento.Un problema de emparejamiento asociado a un grafo G = (N,M) con un nmero par de nodosy unos costes c, consiste en emparejar cada nodo i de N con un y slo un nodo j de N a costemnimo.

    El algoritmo de Christofides es el siguiente:

    Algoritmo de Christofides

    Paso 1Encontrar un rbol de expansin mnima T .

    Paso 2Buscar los nodos de grado impar en T y encontrar el emparejamiento de mnimocoste entre ellos, E. Definir el multigrafo G = (N, M), donde M est formadopor las aristas de T ms las aristas de E.

    Paso 3Encontrar una cadena euleriana de G y un circuito hamiltoniano embebidoen ella.

    El algoritmo de Christofides est bien definido y adems es una 1.5-aproximacin del pro-blema del viajante. Esto lo demostraremos mediante la siguiente proposicin.

    Proposicin 3.5. El algoritmo de Christofides es un algoritmo 1.5-aproximado del problemadel viajante mtrico (simtrico).

    Demostracin. El Lemma 3.1 nos asegura que el nmero de nodos con grado impar en T espar, con lo que el problema de emparejamiento est bien definido. El multigrafo G es conexo,ya que contiene a un rbol de expansin mnima. Adems, todos sus nodos tienen grado par: siun nodo tena grado par en T , sigue teniendo el mismo grado y si tena grado impar, ahora hayuna arista ms incidiendo en l, con lo que tendr grado par. Por tanto, la Proposicin 3.2, nosasegura que G es euleriano. Entonces, podremos encontrar una cadena euleriana y un circuitohamiltoniano embebido en ella.

    Probemos ahora la cota para el error. Denotemos por el circuito hamiltoniano de coste m-nimo y por c el coste asociado. Queremos probar que c() 1.5 c. Claramente, c() C(G) =c(T ) + c(E) y c(T ) c. Denotemos por {i1, i2, . . . , i2l} el conjunto de nodos de grado impar enT numerados segn su orden de aparicin en . Podemos escribir = (0, i1, 1, i2, . . . , i2l, 2l).Consideremos ahora los siguientes emparejamientos de los nodos de grado impar:

    E1 = {(i1, i2), (i3, i4), . . . , (i2l1, i2l)} y E2 = {(i2, i3), (i4, i5), . . . , (i2l, i2)}.

    Si ahora entrelazamos estos dos emparejamientos tenemos la cadena cerrada (i1, i2, i3, . . . , i2l). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    Francisco Jos Veiga Losada

  • 42 Captulo 3. Diseo de algoritmos para el TSP

    i1 i2

    i3

    i4

    i2l

    E1

    E2

    0

    1

    2

    3

    Figura 3.3: Entrelazando los dos emparejamientos de la demostracin de la Proposicin 3.5.

    y la desigualdad triangular nos asegura entonces que c = c() c(E1) + c(E2) (Figura 3.3).Pero el emparejamiento E construido por el algoritmo es el de mnimo coste, con lo que c c(E1) + c(E2) 2c(E), es decir, c(E) c/2. Con lo que tenemos,

    c() C(G) = c(T ) + c(E) c+ c2 =32 c.

    En la Figura 3.4 presentamos una ilustracin del algoritmo de Christofides. Igual que en elcaso del algoritmo del rbol no incluimos los costes en el ejemplo.

    Ahora vamos a presentar dos algoritmos heursticos. Hay que darse cuenta de que la preci-sin de estos algoritmos puede variar segn estn calibradas de una forma u otra las diferentesvariables implicadas. Es ms, una calibracin adecuada a unos problemas puede no ser la idealpara otros con un nmero de nodos diferente. Debido a esto debemos de ser prudentes a lahora de analizar los valores obtenidos, como puede ser el tiempo, con estos algoritmos.

    3.4. Algoritmo de las hormigas.El algoritmo de optimizacin colonia de hormigas (Ant Colony Optimization, ACO) es

    una tcnica probabilstica para solucionar problemas computacionales que pueden reducirse abuscar los mejores caminos o rutas en grafos.

    Este algoritmo fue inicialmente propuesto por Marco Dorigo en 1992 en su tesis de doctora-do. El primer algoritmo surgi con el objetivo de buscar el camino ptimo en un grafo basadoen el comportamiento de las hormigas cuando estn buscando un camino entre la colonia yuna fuente de alimentos. La idea original se fue desarrollando para resolver una amplia clase deproblemas numricos. Como resultado de esto, han surgido gran cantidad de problemas nuevosbasndose en diversos aspectos del comportamiento de las hormigas.

    En nuestro mundo natural, las hormigas vagan inicialmente de manera aleatoria al azarhasta encontrar comida. Una vez encontrada regresan a su colonia dejando un rastro de fe-romonas por el camino. Si otras hormigas encuentran dicho rastro, es probable que estas nosigan caminando aleatoriamente. Es probable que sigan este rastro de feromonas, regresando yreforzndolo si estas encuentran comida.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 3.4. Algoritmo de las hormigas 43

    02

    1 3

    4

    5

    6

    7

    8

    9

    (a) Paso (I) rbol de expansin mnima.

    02

    1 3

    7

    8

    (b) Paso (II) Nodos de grado impar yemparejamiento ptimo.

    02

    1 3

    4

    5

    6

    7

    8

    9

    (c) Paso (II) Creando el multigrafo.

    02

    1 3

    4

    5

    6

    7

    8

    9

    12

    3

    4

    5

    67

    8

    910

    11

    12

    (d) Paso (III) Cadena de Euler:(0, 2, 0, 5, 6, 7, 9, 8, 7, 4, 3, 1, 0).

    02

    1 3

    4

    5

    6

    7

    8

    9

    12

    3

    4

    56

    7

    8

    9

    10

    (e) Paso (III) Circuito hamiltoniano:(0, 2, 5, 6, 7, 9, 8, 4, 3, 1, 0).

    Figura 3.4: Ilustracin del algoritmo de Christofides.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Francisco Jos Veiga Losada

  • 44 Captulo 3. Diseo de algoritmos para el TSP

    Figura 3.5: El trabajo de las hormigas.

    Sin embargo, con el paso del tiempo el rastro de feromonas comienza a evaporarse, re-ducindose as su fuerza de atraccin. Cuanto ms tiempo le lleve a una hormiga recorrer elcamino, ms tiempo tienen las feromonas para evaporarse. Un camino corto en comparacin,es recorrido ms frecuentemente y por tanto la densidad de feromonas se hace ms grande enlos caminos cortos que en los largos.

    Por tanto, cuando una hormiga encuentra un buen camino entre la colonia y la fuente decomida, hay ms posibilidades de que otras hormigas de la colonia tomen el mismo camino. Conuna retroalimentacin positiva se conduce finalmente a todas las hormigas a un solo camino.La idea del algoritmo de las hormigas es imitar este comportamiento con hormigas simuladascaminando a travs de un grafo que representa el problema en cuestin.

    En el algoritmo de las