proyecto fin de grado -...
TRANSCRIPT
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-
ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN
GRAFOS
Proyecto Fin de Grado
Ingeniería de Organización Industrial
ANÁLISIS DE LAS ESTRATEGIAS
ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y
DESROCHERS-LAPORTE PARA EL PROBLEMA
DE STEINER EN GRAFOS
Autor: Ignacio Castellano Jiménez
Tutor: Jose Manuel García Sánchez
Dto. Organización Industrial y Gestión de
empresas
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2017
i
ii
Proyecto Fin de Grado
Ingeniería de Organización Industrial
ANÁLISIS DE LAS ESTRATEGIAS
ANTIBUCLES DE MILLER-TUCKER-ZEMLIN
Y DESROCHERS-LAPORTE PARA EL
PROBLEMA DE STEINER EN GRAFOS
Autor:
Ignacio Castellano Jiménez
Tutor:
Jose Manuel García Sánchez
Profesor asociado
Dep. de Organización Industrial y Gestión de Empresas
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2017
iii
Proyecto Fin de Grado: ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-
ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:
Presidente:
Vocales:
Secretario:
Acuerdan otorgarle la calificación de:
Sevilla, 2017
El Secretario del Tribunal
Autor: Ignacio Castellano Jiménez
Tutor: Jose Manuel García Sánchez
iv
AGRADECIMIENTOS
Agradezco a mi familia, amigos y a Ana su apoyo constante; a mi tutor Jose Manuel García Sánchez y a todos
los compañeros y profesores que me han acompañado en esta etapa en la Escuela Técnica Superior de
Ingeniería de la Universidad de Sevilla por su dedicación en el trabajo y el respeto hacia mi persona.
Mención especial a mi compañero del Grado en Ingeniería de Organización Industrial, Antonio García, que
me orientó en el inicio de este proyecto.
Muchas gracias a todos.
v
ÍNDICE
OBJETO DEL PROYECTO ........................................................................................................... 1
EL PROBLEMA DE STEINER ...................................................................................................... 3
Aplicaciónes del Problema de Steiner ......................................................................................... 4
FORMULACIÓN MATEMÁTICA ............................................................................................... 9
Modelo de optimización: el Problema de Steiner ..................................................................... 10
El Problema del Viajante de Comercio ..................................................................................... 15
Modelos MTZ y DL ..................................................................................................................... 18
IMPLEMENTACIÓN DE LOS MODELOS EN LINGO ....................................................... 22
Introducción a LINGO ................................................................................................................ 22
Code::Blocks ............................................................................................................................... 29
RESULTADOS EXPERIMENTALES ........................................................................................ 32
Características de los problemas ............................................................................................... 34
Resultados obtenidos ................................................................................................................... 40
CONCLUSIONES ........................................................................................................................... 48
BIBLIOGRAFÍA .............................................................................................................................. 49
ANEXOS ............................................................................................................................................ 50
Fichero de entrada de un problema ........................................................................................... 50
Modelo en C (Code::Blocks) ...................................................................................................... 51
Problema “steinb1.txt” Modelo MTZ en LINGO .................................................................... 54
Problema “steinb1.txt” Modelo DL en LINGO ....................................................................... 55
vi
Índice de figuras
FIG. 1.2 GRAFO DE STEINER ........................................................................................................................................................... 5
FIG. 1.3 SOLUCIÓN GRAFO DE STEINER .......................................................................................................................................... 5
FIG. 1.4 POSIBLES SOLUCIONES “CONEXIÓN DE ISLAS” .................................................................................................................. 6
FIG. 1.5 REDES DE TRANSPORTE ..................................................................................................................................................... 7
FIG. 1.6 SERVICIO SEVICI ................................................................................................................................................................ 7
FIG. 1.7 MENSAJERÍA UPS .............................................................................................................................................................. 8
FIG. 2.1 TIPOS DE ARCOS............................................................................................................................................................... 11
FIG. 2.2 PROBLEMA DE STEINER ................................................................................................................................................... 12
FIG. 2.3 RED SOLUCIÓN FINAL ...................................................................................................................................................... 12
FIG. 2.4 FORMACIÓN DE CICLOS ................................................................................................................................................... 18
FIG. 3.1 REPRESENTACIÓN GRÁFICA DE UN PROBLEMA EN LINGO .............................................................................................. 22
FIG. 3.2 PANTALLA DE INICIO EN LINGO ..................................................................................................................................... 23
FIG. 3.3 EJEMPLO EN LINGO ....................................................................................................................................................... 26
FIG. 3.4 MENSAJE DE ERROR EN LINGO ...................................................................................................................................... 27
FIG. 3.5 VENTANA LINGO SOLVER STATUS .................................................................................................................................. 27
FIG. 3.6 SOLUCIÓN DEL PROBLEMA .............................................................................................................................................. 28
FIG. 3.7 CAMBIO DE FORMATO DE LOS DATOS .............................................................................................................................. 30
FIG. 3.8 EJEMPLO APERTURA Y CIERRE DE UN FICHERO ............................................................................................................... 31
FIG. 3.9 EJEMPLO ESCRITURA EN UN FICHERO ............................................................................................................................. 31
FIG. 4.1 REPRESENTACIÓN EN FLUJO ............................................................................................................................................ 32
FIG. 4.2 CLASES DE PROBLEMAS ................................................................................................................................................... 34
FIG. 4.3 GRÁFICO DE CARACTERÍSTICAS DE LOS PROBLEMAS ....................................................................................................... 36
FIG. 4.4 GRÁFICO DE TENDENCIA DEL GRUPO DE PROBLEMAS DE CLASE “B” ............................................................................. 37
FIG. 4.5 GRÁFICO DE TENDENCIA DEL GRUPO DE PROBLEMAS DE CLASE “C” ............................................................................. 37
FIG. 4.6 PROBLEMA STEINB1.TXT .................................................................................................................................................. 38
FIG. 4.7 TABLA DE RESULTADOS MTZ ........................................................................................................................................... 41
FIG. 4.8 TABLA DE RESULTADOS D&L .......................................................................................................................................... 42
FIG. 4.9 GRÁFICO DE ÓPTIMOS: PROBLEMAS “STEINB.TXT” ......................................................................................................... 43
FIG. 4.10 PRECISIÓN DEL MODELO PARA LOS PROBLEMAS DE CLASE “B” .................................................................................... 44
FIG. 4.11 GRÁFICO DE ÓPTIMOS: PROBLEMAS “STEINC.TXT” ...................................................................................................... 44
FIG. 4.12 COMPARACIÓN DEL TIEMPO DE RESOLUCIÓN ENTRE MODELOS .................................................................................... 45
FIG. 4.13 PRECISIÓN DE LOS MODELOS MTZ Y DL PARA LOS PROBLEMAS DE CLASE “C” ........................................................... 46
FIG. 4.14 RESULTADOS OBTENIDOS PARA LOS PROBLEMAS DE CLASE “D” ................................................................................... 47
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
OBJETO DEL PROYECTO Página 1
OBJETO DEL PROYECTO
Tenemos dos problemas teóricos tipo, que son el Problema del Viajante de Comercio (TSP) y el
Problema de Steiner (SP). Hemos analizado en nuestro Proyecto las restricciones antibucles propuestas
por Miller, Tucker y Zemlin (MTZ) (1960) y Desrochers y Laporte (DL) (1991), que fueron formuladas
para el Problema del Viajante de Comercio, y las vamos a comparar aplicadas al Problema de Steiner.
El objetivo del Trabajo es identificar qué modelo opera mejor en distintos niveles de dificultad del
Problema de Steiner.
La idea consiste en formular el Problema de Steiner asumiendo como variables “Xij” si “j” es el padre de
“i” (igual que la formulación para el Viajante de Comercio). Todos los nodos terminales menos el raíz
deben tener un padre. Los nodos de Steiner tienen padre si se eligen para participar en la red.
Las formulaciones a comparar incorporan el concepto de nivel (actor medible) y lo modelan de dos
formas diferentes. Con el concepto de nivel se evita que se formen ciclos, que es lo que hace difícil las
diferentes formulaciones.
Esta comparativa entre ambas formulaciones se realizará sobre la librería OR-LIBRARY, que incluye un
conjunto de problemas de grafos que varían tanto en su tamaño (número de nodos y arcos, y número de
nodos terminales) como en su complejidad.
Cada uno de los problemas viene expresado en un fichero de texto (”.txt”) y, debido a su extensión, la
toma de los datos de cada problema se realizará con el programa Code::Blocks, que hace uso del lenguaje
de programación “C”. De esta manera, se les dará un formato de salida adecuado para, posteriormente,
resolverlos utilizando LINGO.
En el apartado 1 “El Problema de Steiner” daremos a conocer las principales características del Problema
de Steiner en Grafos, sus peculiaridades y su aplicación en la realidad, para lo cual se expondrán algunos
ejemplos que nos ayudarán a comprenderlo mejor.
En el apartado 2 “Formulación matemática” hablaremos del Problema del Viajante de Comercio, sobre el
cual se realizaron las formulaciones MTZ y, más recientemente, DL. Se expondrán los modelos
matemáticos que emplearemos para la resolución de los problemas.
El apartado 3 “Implementación de los modelos en LINGO” incluye una breve introducción a la librería de
optimización LINGO, que es la base de nuestro proyecto, así como a determinados conceptos del
lenguaje “C”, del que también nos servimos. Se verá la implementación de los modelos, que se basa en
utilizar Code::Blocks para realizar la lectura de los problemas, darles un formato adecuado y, a
continuación, usar LINGO para su resolución.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
OBJETO DEL PROYECTO Página 2
Finalmente, en el apartado “Resultados experimentales” se mostrarán los resultados obtenidos de la
aplicación de cada una de las dos formulaciones para los distintos problemas, y se realizará una
valoración de los mismos. También se presentarán las características fundamentales de la batería de
problemas.
Por último, expondremos las conclusiones del análisis de ambas formulaciones conforme a los resultados
obtenidos.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
EL PROBLEMA DE STEINER Página 3
EL PROBLEMA DE STEINER
El Problema de Steiner consiste en encontrar el árbol mínimo que interconecta varios puntos de una red
de nodos. Fue propuesto por el matemático alemán Jacob Steiner a principios del siglo XIX.
El problema genérico engloba un amplio abanico de situaciones y problemas de telecomunicaciones,
transporte y abastecimiento que son modelables mediante éste. De ahí su importancia y el interés que
durante años se ha mostrado por encontrar una solución al problema.
El árbol de Steiner es un problema de optimización combinatoria que consiste en buscar la interconexión
más corta para un conjunto de elementos dado. Tiene aplicaciones en el diseño de circuitos eléctricos y
redes de telecomunicaciones. La mayoría de las versiones del Problema de Steiner son NP-completo. De
hecho, uno de estos pertenece a la lista de 21 problemas NP-completos de Karp (problemas
computacionales famosos que tratan sobre combinatoria y teoría de grafos, y que comparten la
característica de pertenecer a la clase de complejidad NP-Hard).
La Optimización Combinatoria es una rama de la optimización en matemáticas aplicadas. Los algoritmos
de optimización combinatoria resuelven instancias de problemas que suelen ser difíciles por lo general,
explorando el espacio de soluciones (generalmente grandes) para estas instancias. Se relacionan
comúnmente con problemas NP-completos, y son implementados a menudo en lenguajes imperativos
como C y C++ (los programas imperativos son un conjunto de instrucciones que indican al ordenador
cómo realizar una tarea).
El árbol de Steiner cubre un subconjunto de nodos de un grafo G=(N,A) dado, no todos. En el problema
del árbol de Steiner, los nodos se dividen en terminales y no terminales. Los nodos terminales deben
incluirse obligatoriamente en la solución, mientras que los nodos no terminales, o nodos Steiner,
pertenecen a la solución si se incluyen para participar en la red. Los nodos de Steiner se incluyen para
reducir el coste o maximizar el beneficio (dependiendo de nuestra Función Objetivo).
Sea V un conjunto de vértices, se nos dará un conjunto L c V de nodos terminales y una métrica que
defina la distancia (o coste) entre dos puntos cualesquiera de V.
El objetivo es encontrar un subgrafo conexo (en teoría de grafos, un grafo G es conexo si, para cualquier
par de vértices u y v de G, existe al menos una trayectoria [una sucesión de vértices que no repita
vértices] de u a v) que cubra todos los vértices terminales y cuyo coste sea mínimo.
Dado un grafo no dirigido, G=(N,A), un conjunto n de nodos, otro de m arcos, un coste asociado a cada
arco Cij, un subconjunto de vértices T c N con p nodos, denominados nodos Terminales, siendo el resto
de nodos (n-p) nodos Steiner o subconjunto S c (N-T); minimizar el coste total del árbol que conecta todos
los elementos de T.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
EL PROBLEMA DE STEINER Página 4
Aplicaciónes del Problema de Steiner
El SP encuentra su aplicación en muchos problemas de localización, fiabilidad, logística, transporte y de
planificación de red.
Los árboles generadores mínimos son útiles en la construcción de redes de todo tipo, ya que determinan la
manera de conectar un conjunto de localizaciones utilizando la menor cantidad de recursos, es decir, con el
coste mínimo.
El árbol de Steiner tiene, por lo tanto, aplicaciones en el diseño de carreteras, redes de agua, gas, líneas
eléctricas y redes de telecomunicaciones entre otras muchas cosas.
Las redes de telecomunicación, por ejemplo, se han convertido en la infraestructura necesaria que da soporte y
solución a las necesidades de transporte y circulación de información, tanto para los distintos negocios que
basan su actividad en el trasiego de información a distancia por medios electrónicos, como para los clientes.
Éstas permiten la comunicación entre cualquier par de entidades conectadas a la red, y dan forma a nuestro
actual modelo de vida.
El modelado de estos problemas se basa en la Teoría de Grafos, para lo cual se definen nodos, que son
típicamente origen o destino de información, y arcos, que conforman los enlaces de la red por los que ésta
circula. Así, el problema puede asemejarse con éxito al Problema de Steiner, o extensiones de éste, para la
mayoría de los casos.
Las siguientes figuras representan un grafo constituido por nodos Terminales y nodos Steiner semejante a los
de la batería de problemas a resolver en este proyecto.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
EL PROBLEMA DE STEINER Página 5
Steiner
Terminal
Fig. 1.2 Grafo de Steiner
Fuente: Elaboración propia
El resultado del problema aparece a continuación en la figura 1.3; todos los nodos terminales están conectados,
al igual que aquellos nodos Steiner elegidos para participar en la solución.
Steiner
Terminal
Fig. 1.3 Solución Grafo de Steiner
Fuente: Elaboración propia
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
EL PROBLEMA DE STEINER Página 6
La solución es un subgrafo Gs=(Ns, As) que se obtendría mediante la implementación de nuestro modelo
matemático en LINGO. Esta solución, que contiene todos los nodos definidos como Terminales, y que
generalmente hace uso de nodos Steiner para minimizar el coste total, tiene Ns-1 arcos conectados entre sí,
siendo Ns el conjunto de nodos de ambos tipos que se incluyen en la solución final.
Un ejemplo sencillo para conocer cómo funciona el SP es el de “conexión de islas”; supongamos un
archipiélago: queremos conectar con puentes sus principales islas para que sea posible viajar por ellas. El coste
de construir un puente varía de una isla a otra y, en algunos casos, puede resultar más conveniente comunicar
varias islas más cercanas que hacerlo directamente con las principales del grupo.
Terminal
Steiner
Fig. 1.4 Posibles soluciones “conexión de islas”
Fuente: Elaboración propia
Así, la Fig.1.4 muestra tres posibles soluciones del caso expuesto, en la que dos de ellas hacen uso de una isla
no principal (nodo Steiner) para conectar las islas bases, mientras que la tercera opta por la interconexión
directa de éstas. Considerando los costes resultantes de las distintas conexiones podríamos inclinarnos por
alguna de las opciones. El modelado es, básicamente, una herramienta para la toma de decisiones.
Las redes de transporte, por las que circulan mercancías y personas, también representan un ejemplo del
Problema de Steiner.
Supongamos una empresa de transporte de mercancías que tiene su mercado en Andalucía y realiza el reparto
por distintas provincias de la Comunidad. Los puntos de entrega (almacenes de las empresas) pueden ser
considerados como nodos Terminales, mientras que las gasolineras y áreas de descanso en las que el repartidor
tuviera que parar serían nodos de Steiner.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
EL PROBLEMA DE STEINER Página 7
Fig. 1.5 Redes de transporte
Fuente: Google “red de carreteras de Andalucía”
El conjunto de autopistas y autovías, carreteras nacionales y comarcales que comunican las distintas ciudades
y pueblos de la Comunidad Autónoma de Andalucía representan las conexiones (los arcos) entre los nodos.
Así, cada una de ellas tendrá un coste propio determinado por la distancia, la existencia de peaje, el estado de
la carretera, tráfico, etcétera. La red de carreteras utilizada que permite a la empresa entregar todos los pedidos
con el mínimo coste (menor consumo de combustible y tiempo empleado) sería el óptimo de nuestro
problema.
El Problema de Steiner podría asemejarse entonces a un problema de transporte, en tanto en cuanto busca
minimizar el coste de abastecimiento de una seria de puntos de demanda, que serían los nodos Terminales en
nuestro problema, a partir de conjunto de puntos de oferta, que en este caso sería el Terminal principal.
El servicio “Sevici” con el que contamos en la ciudad representa un ejemplo de problema de transporte. En
este caso, el Ayuntamiento de Sevilla contrató a un equipo de personas para realizar un estudio y posterior
modelado del problema planteado, que consistía en la localización de un conjunto de puestos o paradas de
bicis teniendo en cuenta distintos factores, tales como la distancia entre ellos, el número de personas que viven
en un distrito determinado, el tráfico, etcétera, de modo que aquella persona que quisiera hacer uso del servicio
pudira hacerlo con la mayor satisfacción posible, es decir, que las paradas no estuvieran saturadas, para poder
así dejar de usar el servicio, y que la probabilidad de encontrar una bici en ella fuera también alta.
Fig. 1.6 Servicio Sevici
Fuente: Google “imágenes”
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
EL PROBLEMA DE STEINER Página 8
Este servicio se estableció en base a la idea de mejorar la calidad de vida de las personas e impulsar el turismo
principalmente, no con un objetivo meramente económico, y es un ejemplo de que en nuestro modelo de vida
el modelado de redes y rutas de transporte están muy presentes.
He de mencionar el caso de la empresa americana de mensajería UPS. Se trata de la mayor empresa de entrega
de paquetes y mensajería express del mundo y los líderes en servicios de transporte, logística, capital y
comercio electrónico. El éxito obtenido se debe en gran medida al uso de métodos de optimización.
Una de las medidas más conocidas que adoptaron se puso en marcha en el año 2003. Desde ese año, los
repartidores de UPS en Estados Unidos no giran a la izaquierda, algo que, aunque parezca desconcertante, les
ha permitido ahorrar millones en combustible.
La empresa tiene muy en cuenta todos los factores que pueden influir en la eficiencia, por lo que estudia muy
detenidamente las rutas de reparto. De esta forma, descubrieron que los giros a la izquierda incrementaban el
tiempo y el gasto de combustible durante el servicio (por la obligatoriedad de ceder el paso, que obliga a parar
el vehículo), además de provocar siniestros viales.
UPS utiliza un sistema llamado “”On-Road Integrated Optimization and Navigation” (ORION) para trazar
rutas que buscan bucles hacia la derecha, más que giros directos hacia la izquierda. La medida de la empresa se
traduce en un ahorro de 38 millones de litros, 22.000 toneladas de 2CO emitidas y 1100 camiones utilizados.
Además, la entrega de paquetes se ha incrementado y se han reducido las distancias en 45 kilómetros. En total,
UPS ha ahorrado gracias a esta medida entre 285 y 380 millones de euros.
Con este ejemplo trato de evidenciar la importancia e influencia que tienen los modelos de optimización de
rutas en la actualidad.
Fig. 1.7 Mensajería UPS
Fuente: Google “imágenes”
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
FORMULACIÓN MATEMÁTICA Página 9
FORMULACIÓN MATEMÁTICA
En este capítulo vamos a comentar la formulación base del Problema de Steiner que vamos a utilizar; se
explicarán también los modelos matemáticos que se utilizan en el proyecto, así como una introducción al
Problema del Viajante de Comercio, para que nos proporcione una perspectiva más global del problema al que
nos enfrentamos.
Las formulaciones a comparar son dos: MTZ y DL. Ambas formulaciones, aunque desarrolladas para evitar la
formación de bucles en el TSP, las vamos a extrapolar al SP.
Antes de adentrarnos en los modelos empleados vamos a presentar la formulación básica de un modelo de
optimización lineal:
jX
bXa
sa
CjXjZMaxMin
j
n
ii
m
j
jij
m
j
,0
}),,({
:
)(
1
1
1
Estos modelos los componen una función objetivo, la cual nos puede interesar maximizar o minimizar
dependiendo del caso, cuyas variables están sujetas a una serie de restricciones.
La programación lineal, como se puede observar, corresponde a un algoritmo a través del cual se resuelven
situaciones reales en las que se pretenden identificar y resolver aquellas dificultades que nos permitan
aumentar la productividad (reduciendo los recursos necesarios, lo que conlleva a una reducción de los costes
que de ellos derivan) y, por tanto, los beneficios. Los resultados obtenidos sirven como respaldo de las
decisiones a tomar frente a las situcaciones planteadas.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
FORMULACIÓN MATEMÁTICA Página 10
Modelo de optimización: el Problema de Steiner
Se han desarrollado hasta la fecha diferentes formulaciones y técnicas de resolución del Problema de Steiner.
Sin embargo, no se conoce ningún algoritmo que resuelva el Problema de manera exacta en tiempo
polinomial, puesto que el SP ha sido probado NP-Hard, como ya comentamos con anterioridad.
Existen, no obstante, multitud de algoritmos (técnicas heurísticas) que se aproximan bastante al óptimo del
problema, e incluso llegan a él en buena parte de los casos. Algunas de estas formulaciones, que son teóricas,
están basadas en flujo, otras se basan en cortes, existe una que consiste en obtener todos los bucles del grafo,
etcétera.
Nosotros partimos en nuestro Proyecto de la formulación arborescente del Problema de Steiner. La
formulación base de nuestro problema es un grafo no dirigido. Se conoce como formulación arborescente
porque plantea el Problema como un árbol. Esta estructura arborescente consiste en convertir cada aristadel
grafo en un par de arcos con distinto sentido (Xij, Xji), de modo que el significado que adquieren si se activan
es que el nodo del que parte el arco(nodo origen) es hijo del nodo destino, que sería el padre.
El modelo arberescente del Problema de Steiner en Grafos considera la conexión de un subconjunto de nodos
de un grafo G=(N,A), llamados nodos Terminales, pudiendo hacer uso, para ello, del otro subconjunto de
nodos, conocidos como nodos Steiner. La red de mínimo coste (Gs) que interconecta todos los nodos
terminales del grafo G dado es la solución óptima que busca el problema.
Dado: un grafo no dirigido G(N,A), con n nodos, m arcos (no dirigidos), con coste asociado a cada arco Cij, un
subconjunto TcN con p nodos Terminales, quedando los restantes nodos n-p caracterizados como nodos
Steiner.
Encontrar: un subgrafo o red Gs de G tal que exista un camino posible entre cada par de nodos terminales del
subconjunto T, siendo el coste total de la red el mínimo posible.
Es conveniente explicar, para facilitar su interpretación, el concepto de grafo no dirigido:
Un grafo está formado por nodos y arcos(o aristas). Cada arco comunica un par de nodos (i,j); tiene, por lo
tanto, dirección y sentido, así como un coste independiente asociado al mismo.
En el caso de nuestro Problema (grafo no dirigido) el arco Xij es igual que el arco Xji , es decir, no hay
diferencias en cuanto el sentido que toma el arco y su coste asociado (Cij).
El modelado matemático que necesitamos busca hacer dirigido el grafo, puesto que va a ser una estructura en
árbol, como hemos explicado anteriormente.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
FORMULACIÓN MATEMÁTICA Página 11
Fig. 2.1 Tipos de arcos
Fuente: Elaboración propia
El modelo del Problema de Steiner (SP) se compone de los siguientes elementos:
Nodos: Los índices “i” y “j” representan los nodos del grafo; “n” es el número total de nodos del grafo G.
Arcos: variable Xij; La variable Xij es binaria. En su caso se activa (Xij=1) si el arco que conecta dos nodos
(i,j) cualesquiera del grafo se incluye en Gs (1 si “j” es el padre de “i”; 0 si no).
Coste: valor del coste asociado a cada arista (Cij); es un dato.
Ti: Ti es un dato que nos proporciona el problema. Indica si un nodo es terminal o no (1 si “i” es terminal; 0 si
no).
Βj: j es una variable que indica si un nodo Steiner “j” cualquiera pertenece a la solución final (1 si “j”
pertenece a la red; 0 si no).
Nº Adyacentes j: el número de nodos adyacentes a otro nodo determinado se refiere a la suma de todas las
aristas que le llegan; es un dato.
La página siguiente muestra un ejemplo donde se pueden apreciar los distintos elementos explicados.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
FORMULACIÓN MATEMÁTICA Página 12
Fig. 2.2 Problema de Steiner
Fuente: Elaboración propia
Los nodos Terminales aparecen en rojo y los nodos Steiner en negro. El grafo de partida del problema es no
dirigido, pues los arcos “Xij” y “Xji” para cada par de nodos son iguales. La solución del problema se muestra
a continuación:
Fig. 2.3 Red solución final
Fuente: Elaboración propia
Como muestra el árbol solución de la Fig. 2.3, todos los nodos terminales, a excepción del raíz, además de
aquellos nodos Steiner que se encuentran activos, tienen un padre (“Xij” donde “j” es el padre de “i” ). El nodo
raíz en nuestro caso será siempre el primer terminal dado (nodo 4). El Terminal principal, por lo tanto, es un
dato, y en nuestro modelo en LINGO, así como en el modelo en C, aparecerá representado con la letra “P”.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
FORMULACIÓN MATEMÁTICA Página 13
La Función objetivo y restricciones del modelo se muestran a continuación:
Función Objetivo (FO): ji
XijCijMin
Se obtiene como el sumatorio del conjunto de arcos seleccionados para formar parte de la red multiplicado por
el coste asignado a cada uno de ellos. A ésta habría que sumarle un dato de coste añadido, que es
independiente para cada problema determinado.
Restricción (1): 1j
Xij Pii / , 1Ti
Todos los nodos terminales deben tener un padre; Xij donde “j” es el padre de “i”. Esta restricción especifica
que de cada nodo terminal sólo puede partir un único arco. Ésto es solo cierto, sin embargo, para el conjunto
de nodos terminales distintos del Principal (P).
Restricción (2): j
Xij 0 Pi
El terminal Principal (P) es el único nodo terminal que no tiene Padre.
Restricción (3): i
jadyacentesNjXij º* 0/ Tjj
La variable “β” se activa para cada nodo de Steiner “j” que se incluye en la solución final (subgrafo Gs).
Restricción (4): i1 1/ Tii
Activa la variable i para los nodos terminales; todos los nodos terminales pertenecen a la red.
Restricción (5): XjiXij 1 jiji /,
Indica que cada arco sólo se puede activar una vez, en un único sentido. Impide la formación de bucles de
grado dos.
Restricción (6): i k
XjkXij 0/ Tjj
Si un nodo de Steiner se activa, éste debe tener un padre. En caso contrario, no.
Restricción (7): }1,0{,, jTiXij
Indica que las variables jTiXij ,, son binarias.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
FORMULACIÓN MATEMÁTICA Página 14
El modelo arborescente del SP sería el siguiente:
MODELO El Problema de Steiner
(FO)
1j
Xij Pii / , 1Ti (1)
j
Xij 0 Pi (2)
i
jadyacentesNjXij º* 0/ Tjj (3)
i1 1/ Tii (4)
XjiXij 1 jiji /, (5)
i k
XjkXij 0/ Tjj (6)
(7)
El modelo base del Problema de Steiner que hemos expuesto no contiene las restricciones antibucles derivadas
del Problema del Viajante, que sí se incluirán en los modelos MTZ y DL que presentaremos más adelante.
Por lo tanto, si se resolviera este modelo se obtendrían soluciones que incluirían ciclos; el modelado del
Problema no estaría completo.
:sa
XijCijMinji
}1,0{,, jTiXij
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
FORMULACIÓN MATEMÁTICA Página 15
El Problema del Viajante de Comercio
En este apartado se explica el Problema del Viajante de Comercio, conocido en inglés como The Travelling
Salesman Problem (TSP). Se tratade uno de los problemas de optimización combinatoria más estudiados
hasta ahora. Tiene su aplicación en diferentes campos y muchas aplicaciones prácticas, como problemas de
rutas e interconexión de localizaciones. Su enunciado es presumiblemente simple y, sin embargo, es uno de los
problemas más desafiantes en Investigación Operacional. Cientos de artículos se han escrito sobre el TSP.
Nuestro objetivo en esta introducción es presentar los conceptos generales del Problema del Viajante.
Definición:
Sea G=(V, A) un grafo donde V es un conjunto de n vértices, A un conjunto de arcos, y sea C=(cij) una matriz
de distancia asociada a A.
El TSP consiste en determinar una red de mínima distancia que pase por cada vértice una vez y sólo una. Al
contrario que el SP no distingue entre nodos Steiner y nodos Terminales, todos se incluyen en el circuito
solución final. Tal circuito es conocido como “Hamiltonian circuit”. En muchas aplicaciones, C también puede
ser interpretado como una matriz de coste o tiempo de viaje. Es útil distinguir entre los casos donde C (o el
problema) es simétrico, cuando cjicij Vji , , y el caso en que es asimétrico. En el caso del Problema
de Steiner en Grafos el problema es simétrico. También, se dice que C satisface la desigualdad triangular
(triangle inequality) si y solo si cikcjkcij , Vkji ,, . Ésto ocurre, por ejemplo, cuando V es un
conjunto de puntos en R2 y cij es la línea recta entre i y j (Euclidean problems).
Aplicaciones:
La interpretación más común del TSP es aquella en la que un vendedor busca el camino más corto a seguir
entre n clientes o ciudades. Este problema, aunque simple, sirve de base a numerosas aplicaciones de rutas
para vehículos. Muchos problemas interesantes, aunque no directamente asociados con ruta, también pueden
describirse como TSPs. Estos son algunos ejemplos:
I. Cableado de ordenadores: algunos sistemas de ordenadores pueden describirse como módulos con
alfileres conectados a ellos. A menudo se quieren conectar estos alfileres con cables, de manera que
exactamente dos cables estén conectados a cada alfiler y la longitud total de cable sea mínima.
II. Perforación de agujeros: en muchos contextos de fabricación es necesario realizar agujeros en
planchas u hojas metálicas. El problema consiste en determinar la secuencia de perforación de tiempo
mínimo. Estos problemas, por lo tanto, también pueden ser formulados como un TSP.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
FORMULACIÓN MATEMÁTICA Página 16
Algoritmos exactos:
Un gran número de algoritmos han sido propuestos para el TSP. En esta sección se explica una formulación
(DFJ) basada en la programación lineal entera. Esta formulación es semejante al modelo que utilizamos en el
Problema de Steiner, y es por ello que las dos formulaciones a comparar, aunque desarrolladas para su
aplicación en el TSP, se pueden extrapolar al primero (SP).
Una de las primeras formulaciones se debe a Dantzig, Fulkerson y Johnson (DFJ): asocia una variable binaria
Xij a cada arco ),( ji , igual a 1 si y sólo si ),( ji es usado en la solución final, con ji .
Como se puede observar, prácticamente no hay ninguna variación entre la formulación para el Problema del
Viajante y la del Problema de Steiner, pues ambas emplean las mismas variables (Xij).
La formulación es la siguiente:
MODELO Formulación del Viajante de Comercio
:sa
CijXijMinji
1
1j
Xij ,,...,1 ni (1)
1
1i
Xij ,,...,1 nj (2)
Sji
SXij,
1||
,VS ,2||2 nS (3)
},1,0{Xij
,,...,1, nji ji (4)
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
FORMULACIÓN MATEMÁTICA Página 17
En esta formulación, la función objetivo (FO) describe claramente el coste de la red óptima.
Las restricciones (1) y (2) especifican que de cada vértice se salga, y en cada vértice se entre una única vez
(restricciones 1 y 2 respectivamente). El Problema de Steiner es diferente en tanto en cuanto la restricción dos
no se contempla.
Las restricción (3) son restricciones de eliminación de ciclos: prohíben que se formen ciclos, es decir, rutas en
un subconjunto menor que n vértices. Si hubiera un ciclo en un subconjunto S de vértices, éste contendría |S|
arcos y los mismos vértices. La restricción (3) sería incumplida por este subconjunto ya que la parte izquierda
de la restricción sería igual a |S| y la mano derecha igual a |S|-1. Debido a las restricciones (1) y (2), los ciclos
sobre un vértice no pueden ocurrir y, por lo tanto, es válido definir la restricción (3) sólo para
.2||2 nS
Finalmente, la restricción (4) impone condiciones binarias en las variables Xij.
Este modelo obtiene previamente a su formulación todos los posibles bucles que pudiera haber en el problema.
Ésto representa un número factorial elevadísimo, por lo que no es práctico, y es por ello que se desarrollaron
las formulaciones MTZ y DL, que establecen un concepto de niveles incorporando una variable (iu ) a cada
nodo ),...,2( ni , lo que reduce el número de iteraciones a realizar y, por tanto, el tiempo de resolución.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
FORMULACIÓN MATEMÁTICA Página 18
Modelos MTZ y DL
Miller, Tucker y Zemlin (MTZ) (1960) propusieron una formulación alternativa a DFJ para el Problema del
Viajante que reduce el número de restricciones de eliminación de ciclos en el modelo, con el coste de añadir
nuevas variables ).,...,2( niui
La formulación MTZ, al igual que la DL, introduce por primera vez el concepto de nivel (o actor medible), de
forma que con esa estructura arborescente, si “j” es el padre de “i” entoces el nivel de “i” tiene que ser mayor
que el de “j”; al nodo raíz se le impone el nivel 0, y a partir de ahí se generan las restricciones. El concepto de
nivel (variables iu ) representa una característica de los nodos y se trata de una variable continua.
La idea se explica aquí de manera sencilla:
Fig. 2.4 Formación de ciclos
Fuente: Elaboración propia
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
FORMULACIÓN MATEMÁTICA Página 19
Se puede observar que la restricción anti-bucles evita que éste se forme. El arco 13,5 x , está activo y, por lo
tanto, debería cumplir la condición impuesta 135 uu . Sin embargo, la condición no se cumple en este
caso 120 ; el arco no se podría activar y el ciclo no se formaría.
También vemos como los arcos 4,3x y 5,4x sí cumplen la condición expuesta: 112 y
101 respectivamente.
Desarrollando esta expresión quedaría:
2)1( nxnuu ijji
,,...,2, nji ji (8)
11 nui .,...,2 ni (9)
La restricción (8) asegura que la solución no contenga ningún ciclo en un conjunto de vértices VS \{1} y,
por lo tanto, ningún ciclo que involucre menos de n vértices.
La restricción (9) asegura que las variables iu estén definidas únicamente para cada red posible.
Para ver cómo funciona la restricción (8) suponemos que hubiese un ciclo ),,...,,( 121 iiii kcon nk .
Escribiendo la restricción para cada arco del ciclo dado:
2)1(
.
.
.
2)1(
2)1(
1
32
21
nnuu
nnuu
nnuu
ii
ii
ii
k
Resumiendo estas restricciones queda )2()1( nknk , una contradicción.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
FORMULACIÓN MATEMÁTICA Página 20
Desrochers y Laporte (DL) (1991) observaron que la restricción (8) del modelo MTZ se podía reforzar
introduciendo un término extra en la mano izquierda de la restricción, dando lugar a la siguiente expresión:
2)3()1( nxnxnuu jiijji
,,...,2, nji ji (10)
Los modelos antibucles MTZ y DL formulados para el Problema de Steiner quedarían de la siguiente forma,
respectivamente.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
FORMULACIÓN MATEMÁTICA Página 21
MODELO MTZ (EL PROBLEMA DE STEINER)
(FO)
1j
Xij Pii / , 1Ti (1)
j
Xij 0 Pi (2)
i
jadyacentesNjXij º* 0/ Tjj (3)
i1 1/ Tii (4)
XjiXij 1 jiji /, (5)
i k
XjkXij 0/ Tjj (6)
2)1( nxnuu ijji MTZ
,,...,2, nji ji (8)
11 nui .,...,2 ni (9)
(7)
}1,0{,, jTiXij
:sa
XijCijMinji
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
FORMULACIÓN MATEMÁTICA Página 22
MODELO DL (EL PROBLEMA DE STEINER)
(FO)
1j
Xij Pii / , 1Ti (1)
j
Xij 0 Pi (2)
i
jadyacentesNjXij º* 0/ Tjj (3)
i1 1/ Tii (4)
XjiXij 1 jiji /, (5)
i k
XjkXij 0/ Tjj (6)
2)3()1( nxnxnuu jiijji DL
,,...,2, nji ji (10)
(7)
}1,0{,, jTiXij
:sa
XijCijMinji
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
IMPLEMENTACIÓN DE LOS MODELOS EN LINGO Página 22
IMPLEMENTACIÓN DE LOS
MODELOS EN LINGO
A la hora de resolver los modelos hemos hecho uso de una conocida librería de optimización llamada LINGO.
Se trata de un Software de Optimización (Programación Lineal, Programación No Lineal y Programación
Entera) para formular problemas extensos de forma precisa, resolverlos, y analizar la solución.
La optimización ayuda a encontrar respuestas que produzcan los mejores resultados: alcanzar el mayor
beneficio, producción o felicidad; tener el mínimo coste, gasto o discomfort. Estos problemas, a menudo,
involucran hacer un uso eficiente de tus recursos: dinero, tiempo, maquinaria, inventario, personal, etcétera.
En nuestros problemas buscamos la ruta mínima que interconecte todos los nodos caracterizados como
Terminales, es decir, buscamos el ahorro máximo de nuestros recursos, que será dinero o tiempo dependiendo
de cómo se defina el coste asociado a los arcos del grafo.
Introducción a LINGO
En esta sección vamos a proceder a explicar los conceptos básicos de LINGO. Para ello haremos uso de un
pequeño modelo que nos servirá de guía.
El esquema básico para la formulación de un modelo en LINGO es el siguiente:
Fig. 3.1 Representación gráfica de un problema en LINGO
Fuente: Elaboración propia
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
IMPLEMENTACIÓN DE LOS MODELOS EN LINGO Página 23
Cuando ejecutamos LINGO, en la pantalla aparecerá algo muy parecido a ésto:
Fig. 3.2 Pantalla de inicio en LINGO
Fuente: Elaboración propia
La ventana de fuera, llamada LINGO, es el marco de la ventana principal. El resto de ventanas que pudiéramos
tener estarían contenidas dentro de ésta. La parte superior del cuadro contiene todos los comandos del menú y
la barra de herramientas. En la parte inferior aparece una barra que proporciona información respecto al estado
actual de LINGO.
La ventana interior LINGO Model – LINGO1 es la ventana de un modelo en blanco nuevo.
Para nuestro ejemplo vamos a considerar una empresa que produce dos modelos de ordenadores: Estandar y
Pro. La empresa puede vender cada unidad Estandar que produce y obtener un beneficio de 100€, y cada
unidad Pro con un beneficio de 150€. Dentro de la empresa, la línea de producción de ordenadores Estandar
puede producir como máximo 100 ordenadores al día. Al mismo tiempo, la línea de producción para
ordenadores Pro puede producir hasta 120 ordenadores al día. Además, nuestra empresa tiene un límite de 160
horas de trabajo disponibles cada día. Los ordenadores Estandar necesitan 1 hora de trabajo al día, mientras
que los ordenadores Pro son más difíciles de producir, requiriendo 2 horas de trabajo. La empresa quiere
determinar qué cantidad de ordenadores de cada tipo debería producir para maximizar el beneficio total sin
exceder las limitaciones de línea y horas de trabajo.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
IMPLEMENTACIÓN DE LOS MODELOS EN LINGO Página 24
Formato del Modelo:
1. EncabezadoFormato: MODEL:
2. Función Objetivo: maximizar o minimizar el valor de los costes de todas las variables
3. Restricciones del problema
4. Restricciones asociadas al tipo de variable
5. FinalFormato: END
Cuando iniciamos un modelo debemos especificar a LINGO que estamos listos para empezar. Ésto se hace
introduciendo la orden MODEL:.
La orden END avisa a LINGO de que hemos terminado de escribir el modelo. Una vez introducimos el
comando END el modelo está listo para ser resuelto.
Siempre que modelemos situaciones de la vida real encontraremos conjuntos de objetos relacionados: como
fábricas, clientes, vehícules, etc. LINGO permite definir conjuntos de objetos relacionados en la sección sets.
Esta sección comienza con la palabra SETS:, en una línea propia, y termina con ENDSETS también en otra
línea. Una vez defindos los conjuntos de objetos, LINGO tiene un grupo de funciones de conjuntos (@FOR,
@SUM), que generan restricciones sobre todos los miembros de un conjunto.
LINGO permite identificar información que ya conocemos dentro de la sección data del modelo. La sección
data empieza con la palabra clave DATA:, en una línea propia, y termina con la palabra ENDDATA también en
una nueva línea.
Función Objetivo (FO) – La FO es la fórmula que expresa exactamente qué es lo que queremos
optimizar. En nuestro ejemplo la función objetivo expresará el beneficio de la compañía como función
de la producción de ordenadores Estandar y Pro
Variables – Variables son las cantidades que tienes bajo control. Debes decidir cuáles son los mejores
valores de las variables (por esta razón se las conoce también como “variables de decisión”). El
objetivo de la optimización es encontrar el valor de las variables del modelo que generan el mejor
valor para la función objetivo, sujeto a limitaciones para estas variables. En el ejemplo tendremos dos
variables que se corresponden con el número de ordenadores a producir de cada tipo.
Restricciones – Siempre habrá restricciones sobre el valor que puedan tomar las variables en un
modelo, al menos un recurso estará limitado. Estas limitaciones se expresan como fórmulas que son
función de las variables del modelo. Se llaman así puesto que restringen los valores que las variables
pueden tomar. Para nuestro ejemplo tendremos una restricción sobre cada línea de producción y otra
sobre el tiempo total de trabajo usado.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
IMPLEMENTACIÓN DE LOS MODELOS EN LINGO Página 25
Ahora construiremos la función objetivo de nuestro ejemplo. Las variables ESTANDAR y PRO denotan el
número de ordenadores a producir de cada tipo, como ya indicamos anteriormente. El objetivo de la empresa
es maximizar el beneficio. El benefio total se calcula como la suma del beneficio que aporta la venta de
ordenadores Estandar (100€) por el número total de ordenadores Estandar fabricados (ESTANDAR) y el
beneficio que aporta la venta de ordenadores Pro (150€) por el total de ordenadores Pro producidos (PRO).
En LINGO, por tanto, nuestra función objetivo se escribiría en la primera línea del modelo como:
MAX = 100 * ESTANDAR + 150 * PRO;
Todas las expresiones matemáticas en LINGO deberán terminar en “;”. El modelo no se resolverá sin ellos.
Lo siguiente que introduciremos serán las restricciones de capacidad y tiempo empleado. Las limitaciones de
las líneas de producción de cada tipo de ordenador son 100 y 120, respectivamente.
ESTANDAR <= 100 ;
PRO <= 120 ;
La primera restricción dice que el número de ordenadores Estandar producidos diariamente debe ser menor o
igual que la capacidad de la línea de producción de 100. De la misma manera, la cantidad de ordenadores Pro
producidos en un día deberá ser menor o igual que la capacidad de la línea de producción de 120.
La restricción para la cantidad de horas de trabajo que se emplean se puede expresar como:
ESTÁNDAR + 2 * PRO <= 160 ;
La cantidad total de horas de trabajo utilizadas (ESTÁNDAR + 2 * PRO) debe ser menor o igual que la
cantidad de horas de trabajo de las que se dispone (160).
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
IMPLEMENTACIÓN DE LOS MODELOS EN LINGO Página 26
Después de introducir las restricciones en LINGO, el modelo quedaría de la siguiente forma:
Fig. 3.3 Ejemplo en LINGO
Fuente: Elaboración propia
Como se puede observar hemos introducido ejemplos de comentarios en nuestro modelo. Los comentarios
deben empezar con el signo de exclamación (!) y se cierran con (;).
LINGO no distingue entre mayúsculas y minúsculas en nombre de variables. De ahí que el siguiente conjunto
de variables pueda considerarse equivalente:
ESTANDAR
Estandar
Estándar
Nuestro ejemplo está listo para ser resuelto. Para comenzar a resolver el modelo, seleccionamos el comando
Solve del menú de LINGO, o bien, pulsamos el botón de la barra de herramientas de la ventana principal.
LINGO comenzará a compilar el modelo. Si el modelo no pasa el test, LINGO nos informará con un mensaje
de error. En este modelo, por ejemplo, si se nos olvidase poner los signos de multiplicación, aparecería un
mensaje de error como el siguiente:
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
IMPLEMENTACIÓN DE LOS MODELOS EN LINGO Página 27
Fig. 3.4 Mensaje de error en LINGO
Fuente: Elaboración propia
Si no hay ningún error en la fase de compilación, LINGO comenzará a buscar por la solución óptima de
nuestro modelo. Cuando el “solver” comienza, muestra en pantalla una ventana solver status de esta forma:
Fig. 3.5 Ventana LINGO Solver Status
Fuente: Elaboración propia
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
IMPLEMENTACIÓN DE LOS MODELOS EN LINGO Página 28
El cuadro Variables muestra el número total de variables en el modelo. Este cuadro también muestra el
número de variables que son no lineales y enteras. En general, mientras mayor sea el número de estas variables
en el modelo, más difícil será resolver el modelo en un tiempo razonable.
Una vez LINGO ha resuelto el modelo, aparecerá una ventana Solution Report que contiene los detalles de la
solución del modelo. La solución debería aparecer así:
Fig. 3.6 Solución del Problema
Fuente: Elaboración propia
Esta solución nos dice que la empresa de nuestro ejemplo debería producir 100 ordenadores Estandar y 30 Pro
cada día para obtener un beneficio diario de 14.500€.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
IMPLEMENTACIÓN DE LOS MODELOS EN LINGO Página 29
Code::Blocks
Nuestro proyecto se basa, como ya explicamos en la presentación del mismo, en la resolución con LINGO de
un conjunto de problemas de grafos (OR-Library), que difieren en su complejidad, haciendo uso de dos
estrategias diferentes de modelado.
La dificultad que se nos presentó a la hora de resolver los problemas, una vez que ya teníamos resuelto el
modelo de optimización a utilizar, fue introducirlos en LINGO. Es importante en nuestro proyecto el trabajo
de programación necesario para transformar los datos de entrada de los problemas de modo que sean viables
en el entorno LINGO.
Los datos de cada uno de los problemas a resolver del conjunto vienen expresados en un archivo de texto. El
hecho de que estos problemas varíen en su tamaño, siendo cada vez más extensos, hizo que tuviéramos que
recurrir al programa Code::Blocks en nuestro proyecto.
Code::Blocks es un entorno de desarrollo integrado, es decir, una aplicación informática que proporciona
servicios para facilitar al programador el desarrollo de software. Se utiliza para el desarrollo de programas en
lenguaje C y C++.
La idea fue crear un programa en lenguaje “C” en Code::Blocks que leyera el fichero donde están incluidos
los datos de un problema (e.j, “Steinb1.txt”) y los copiara en un nuevo fichero (que en nuestro caso se llama
“enunciadolingo.txt”). Este nuevo fichero presenta los datos del problema en un formato adecuado para su
introducción directa en LINGO y posterior resolución.
En nuestro proyecto nos servimos de una carpeta, creada con el nombre “programasimple”, donde se
encuentran los ficheros con los datos de los problemas, el fichero “enunciadolingo” y un fichero “main” que
contiene el modelo desarrollado en lenguaje “C”, que convierte los datos de un problema en el formato que
queremos. Todos estos ficheros deben estar incluidos en la carpeta para que el programa pueda trabajar con
ellos y no dé errores.
El fichero “enunciadolingo.txt” cambia cada vez que introducimos un problema diferente en el código en
“C”. Por ello, dentro de la carpeta principal “programasimple” hemos creado otra carpeta llamada
“lingosimple” donde se encuentra el fichero ”enunciadolingo.txt” de cada problema con su nombre
distinguido (e.j, “steinb1.txt”).
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
IMPLEMENTACIÓN DE LOS MODELOS EN LINGO Página 30
Esta es la versión gráfica de lo que acabamos de explicar:
Fig. 3.7 Cambio de formato de los datos
Fuente: Elaboración propia
El concepto básico en que nos basamos en el programa escrito en “C”, por lo tanto, es el de lectura y escritura
en un fichero.
Un fichero es una agrupación de datos almacenados. Los ficheros se almacenan a través del sistema operativo.
Nuestro programa se comunica con el sistema operativo a través de las instrucciones en C.
Un fichero puede tener cualquier tipo de contenido (texto, gráficos, etc.) y posee una identificación única
formada por un nombre seguido de un punto y una extensión. El nombre suele ser de libre elección del usuario
y la extensión indica el tipo de fichero. Así, en el fichero “Steinb1.txt” la extensión “txt” señala que se trata de
un fichero de texto.
El procedimiento a seguir con los ficheros es el siguiente:
1. Apertura del fichero, para establecer la comunicación entre nuestro programa en “C” y el fichero
almacenadofunción “fopen”.
2. Operación con los datos del fichero:
-Lectura (no modifica los datos del fichero)función “fscanf”
-Escritura (modifica los datos del fichero)función “fprintf”
3. Cierre del fichero, para cerrar la conexiónfunción ”fclose”
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
IMPLEMENTACIÓN DE LOS MODELOS EN LINGO Página 31
Fig. 3.8 Ejemplo apertura y cierre de un fichero
Fuente: Elaboración propia
Fig. 3.9 Ejemplo escritura en un fichero
Fuente: Elaboración propia
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
RESULTADOS EXPERIMENTALES Página 32
RESULTADOS EXPERIMENTALES
Una vez hemos explicado los modelos de programación utilizados en el Trabajo y realizado una introducción a
los programas empleados, procederemos a explicar la programación utilizada para generar los archivos de
entrada a LINGO.
Fig. 4.1 Representación en flujo
Fuente: Elaboración propia
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
RESULTADOS EXPERIMENTALES Página 33
A pesar de haber explicado ya cómo generamos el código que queremos introducir en LINGO para resolver
los problemas, hemos hecho uso aquí de un diagrama de flujo con el objetivo de representar claramente lo que
explicamos con anterioridad.
Ésta sería la explicación de cómo funciona el diagrama de flujo de la Fig. 4.1:
Nuestro programa en “C”, que se encuentra en el fichero “main” dentro de nuestra carpeta
“programasimple”, está diseñado para trabajar con los ficheros de texto que representan cada uno de los
problemas a analizar.
Lo primero que hace el programa al iniciarlo es crear las variables para almacenar la información del
problema.
Seguidamente se introduce el nombre del fichero de texto con el que va a trabajar el modelo (ej: Steinb1.txt).
En el módulo siguiente, el programa lee el archivo .txt que contiene los datos del problema, que se cargan en
las variables del modelo.
A continuación, se escribe el modelo en el fichero de texto indicado (“enunciadolingo.txt”), que
posteriormente resolveremos en LINGO.
El par de modelos a escribir para cada problema se corresponde con las diferentes formulaciones.
Posteriormente, en la sección ANEXOS del proyecto, presentaremos ambos modelos para el problema
“steinb1.txt”, de forma que podamos apreciar la diferencia entre ambos.
Continuaremos el proceso hasta que hayamos escrito cada problema a estudiar en ambos formatos. Una vez
vez hecho ésto procederemos a resolver los problemas en LINGO y a analizar los resultados obtenidos.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
RESULTADOS EXPERIMENTALES Página 34
Características de los problemas
La batería de problemas a resolver en el proyecto se caracteriza por presentar estos problemas en tres bloques
diferenciados. Estos grupos o clases “b”,”c” y ”d” difieren en la dimensión de los problemas que incluyen y,
por lo tanto, en su complejidad, que aumenta progresivamente, siendo “b” la agrupación de problemas más
sencilla y “d” la que representa los problemas con mayor volumen de arcos y nodos.
En la figura 4.2 podemos ver los diferentes grupos de problemas sometidos a análisis en el proyecto.Cada uno
de ellos lo componen un conjunto de problemas con el nombre “stein” seguido de la letra que corresponde al
grupo y el número del problema (Ej: “steinb1.txt”),
Grupo "b" Grupo "c" Grupo "d"
steinbX.txt steincX.txt steindX.txt
Fig. 4.2 Clases de problemas
Fuente: Elaboración propia
Los problemas de grafos a estudiar, como ya hemos comentado, varían en su tamaño. Este hecho repercute
directamente en el tiempo de resolución de los mismos, siendo la clase “d”, por consiguiente, la que mayor
tiempo requerirá a priori.
En la página siguiente se presenta la librería OR-Library de la que hemos hecho uso en el Trabajo. La tabla
muestra los parámetros más determinantes de los problemas pertenecientes a los distintos grupos (número de
nodos y arcos, y número de nodos terminales).
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
RESULTADOS EXPERIMENTALES Página 35
OR-Library
PROBLEMA Nº Nodos Nº Arcos Nº Terminales
steinb1 13 19 8
steinb2 15 21 11
steinb3 20 25 15
steinb4 40 80 9
steinb5 39 80 12
steinb6 45 87 25
steinb7 22 33 11
steinb8 26 38 15
steinb9 27 35 23
steinb10 55 121 13
steinb11 63 129 19
steinb12 63 125 36
steinb13 36 56 14
steinb14 42 65 21
steinb15 48 69 38
steinb16 77 166 17
steinb17 74 153 23
steinb18 82 166 45
steinc1 143 260 5
steinc2 128 234 10
steinc3 178 295 75
steinc4 193 314 102
steinc5 223 341 180
steinc6 366 837 5
steinc7 383 866 10
steinc8 387 867 79
steinc9 418 903 124
steinc10 427 891 242
steinc11 499 2005 5
steinc12 499 2065 10
steinc13 498 2026 83
steinc14 499 1968 125
steinc15 500 1815 250
steinc16 500 3517 5
steinc17 500 3463 10
steinc18 500 3496 83
steinc19 500 3352 125
steind1 272 504 5
steind2 283 519 10
steind3 350 585 148
steind4 359 590 207
steind5 470 708 377
steind6 759 1730 5
steind7 749 1721 10
steind8 802 1778 166
steind9 802 1768 246
steind10 836 1781 485
steind11 993 4442 5
steind12 1000 4437 10
steind13 998 4354 167
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
RESULTADOS EXPERIMENTALES Página 36
La gráfica que aparece a continuación muestra la distribución de las propiedades de los problemas a estudiar.
Fig. 4.3 Gráfico de características de los problemas
Fuente: Elaboración propia
Como se puede observar, la gráfica presenta una tendencia lineal creciente, tanto para el número de nodos
como para el de arcos. Del mismo modo, el número de nodos terminales presenta tendencia al alza, pero no
sigue una relación lineal.
La gráfica tiene su máximo en el problema steind11.txt. Se aprecia un patrón estacional muy marcado en
cuanto a la distribución del número de arcos que se repite por cada grupo de problemas a partir del problema
steinc1.txt.
Los problemas de clase “b” siguen un patrón diferente, como muestra la siguiente comparativa entre las
figuras 4.3 y 4.4.
0
500
1000
1500
2000
2500
3000
3500
4000
4500
5000
stei
nb
1
stei
nb
3
stei
nb
5
stei
nb
7
stei
nb
9
stei
nb
11
st
ein
b1
3
stei
nb
15
st
ein
b1
7
stei
nc1
st
ein
c3
stei
nc5
st
ein
c7
stei
nc9
st
ein
c11
st
ein
c13
st
ein
c15
st
ein
c17
st
ein
c19
st
ein
d2
st
ein
d4
st
ein
d6
st
ein
d8
st
ein
d1
0
stei
nd
12
nº Nodos
nº Arcos
nº Terminales
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
RESULTADOS EXPERIMENTALES Página 37
Fig. 4.4 Gráfico de tendencia del grupo de problemas de clase “b”
Fuente: Elaboración propia
Fig. 4.5 Gráfico de tendencia del grupo de problemas de clase “c”
Fuente: Elaboración propia
0
20
40
60
80
100
120
140
160
180
stei
nb
1
stei
nb
2
stei
nb
3
stei
nb
4
stei
nb
5
stei
nb
6
stei
nb
7
stei
nb
8
stei
nb
9
stei
nb
10
stei
nb
11
stei
nb
12
stei
nb
13
stei
nb
14
stei
nb
15
stei
nb
16
stei
nb
17
stei
nb
18
nº Nodos
nº Arcos
nº Terminales
0
500
1000
1500
2000
2500
3000
3500
4000
stei
nc1
stei
nc2
stei
nc3
stei
nc4
stei
nc5
stei
nc6
stei
nc7
stei
nc8
stei
nc9
stei
nc1
0
stei
nc1
1
stei
nc1
2
stei
nc1
3
stei
nc1
4
stei
nc1
5
stei
nc1
6
stei
nc1
7
stei
nc1
8
stei
nc1
9
nº Nodos
nº Arcos
nº Terminales
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
RESULTADOS EXPERIMENTALES Página 38
La anterior comparativa muestra un “zoom” sobre la Fig. 4.3, lo que nos permite apreciar con mayor claridad
y de forma precisa las diferentes tendencias que comentamos antes.
Los problemas del grupo steinb.txt presentan una tendencia lineal creciente en todas sus series (Fig. 4.4), al
contrario que los grupos de problemas steinc.txt y steind.txt.
La Fig. 4.5 refleja la distribución de los datos para problemas clase “c”, que sería equivalente a aquella
mostrada para la clase “d”.
La siguiente figura representa el problema steinb1.txt de la batería de problemas. Se trata del grafo de menor
dimensión a estudiar. A partir de éste nos podemos hacer una idea del tamaño de los problemas de grafos de
las clases mayores.
Fig. 4.6 Problema Steinb1.txt
Fuente: Elaboración propia
Así, el problema presenta una tipología resultado de conectar todos los nodos terminales entre sí a través de un
conjunto de nodos Steiner, de forma que el coste sea mínimo. Los nodos Steiner que sean seleccionados y
pasen a formar parte de la red serán nodos Steiner activos.
El nodo raíz (P) será el primer terminal dado (en este problema se trata del nodo 4). Todos los nodos
Terminales, así como los nodos de Steiner activos tienen un padre (los nodos Steiner 12, 9 y 3 forman parte de
la red final; los nodos 1 y 2 no). La ruta de coste mínimo que conecta todos los nodos terminales viene
reflejada por los arcos de color azul. El óptimo del problema, al que habría que sumar el dato de coste asociado
al mismo, es 82.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
RESULTADOS EXPERIMENTALES Página 39
En la tabla que aparece a continuación se muestra el óptimo para cada problema de los grupos “steinb.txt” y
“steinc.txt”. No se nos proporcionan los valores óptimos del conjunto de problemas correspondientes a la clase
“steind.txt” de la librería OR-Library
Tabla de óptimos
PROBLEMA ÓPTIMO
steinb1 83
steinb2 83
steinb3 138
steinb4 59
steinb5 61
steinb6 122
steinb7 111
steinb8 104
steinb9 220
steinb10 86
steinb11 88
steinb12 174
steinb13 165
steinb14 235
steinb15 318
steinb16 127
steinb17 131
steinb18 218
steinc1 85
steinc2 144
steinc3 754
steinc4 1079
steinc5 1579
steinc6 55
steinc7 102
steinc8 509
steinc9 707
steinc10 1093
steinc11 32
steinc12 46
steinc13 258
steinc14 323
steinc15 556
steinc16 11
steinc17 18
steinc18 113
steinc19 146
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
RESULTADOS EXPERIMENTALES Página 40
Resultados obtenidos
En este apartado se exponen los resultados experimentales que nos proporciona LINGO para los dos modelos
formulados en nuestro proyecto.
Las estrategias de resolución MTZ y DL, que aplicamos sobre el conjunto de problemas a analizar, se han
podido llevar a cabo una vez completada la transformación de éstos a un formato adecuado para LINGO.
Como ya comentamos anteriormente, es el modelo creado en lenguaje “C”, que presentaremos más adelante
en la sección Anexos del proyecto, el que nos permite realizar este cambio en la forma de presentar los datos de
los problemas, haciendo uso de Code::Blocks.
Resultados obtenidos para la versión del modelo MTZ en el Problema de Steiner:
Problema Solución
obtenida
Nº total de
iteraciones
Tiempo
(h,min,s)
steinb1.txt 82 18 0:00:00
steinb2.txt 83 56 0:00:00
steinb3.txt 138 91 0:00:00
steinb4.txt 59 16989 0:00:04
steinb5.txt 61 229 0:00:00
steinb6.txt 122 8017 0:00:02
steinb7.txt 111 116 0:00:00
steinb8.txt 104 5475 0:00:02
steinb9.txt 220 220 0:00:01
steinb10.txt 86 251 0:00:00
steinb11.txt 88 79597 0:00:31
steinb12.txt 174 616 0:00:01
steinb13.txt 165 24812 0:00:03
steinb14.txt 235 15385 0:00:03
steinb15.txt 318 648 0:00:01
steinb16.txt 127 6684 0:00:03
steinb17.txt 129 14807 0:00:06
steinb18.txt 218 609 0:00:01
steinc1.txt 85 42185 0:00:14
steinc2.txt 144 9998 0:00:04
steinc3.txt 754 208448 0:01:00
steinc4.txt 1079 187174 0:01:10
steinc5.txt 1579 2120329 0:10:02
steinc6.txt 55 46065 0:00:12
steinc7.txt 102 1217 0:00:01
steinc8.txt 509 3294474 0:09:24
steinc9.txt 707 1465170 0:04:28
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
RESULTADOS EXPERIMENTALES Página 41
steinc10.txt 1091 40343 0:00:08
steinc11.txt 32 38628842 *
steinc12.txt 46 134154 0:01:07
steinc13.txt 261 984108 *
steinc14.txt 323 4610 0:00:15
steinc15.txt 556 678430 *
steinc16.txt 11 44524 0:00:51
steinc17.txt 18 37739 0:00:48
steinc18.txt 113 705388 *
steinc19.txt 146 7210 0:00:45
steind1.txt 106 292764 0:00:54
steind2.txt 220 351428 0:00:53
steind3.txt 1565 4537 0:00:03
steind4.txt 1935 4502 0:00:02
steind5.txt 3250 15008 0:00:04
steind6.txt 71 1796306 **
steind7.txt 103 4860 0:00:13
steind8.txt 1099 386606 **
steind9.txt 1448 364561 0:33:50
steind10.txt 2110 321172 0:02:50
steind11.txt 29 705470 0:06:54
steind12.txt 42 9636 0:01:19
steind13.txt 500 10945002 1:03:19
Fig. 4.7 Tabla de resultados MTZ
Fuente: Elaboración propia
Resultados obtenidos para la versión del modelo D&L en el Problema de Steiner:
Problema Solución
obtenida
Nº total de
iteraciones
Tiempo
(h,min,s)
steinb1.txt 82 48 0:00:00
steinb2.txt 83 63 0:00:01
steinb3.txt 138 59 0:00:00
steinb4.txt 59 2293 0:00:01
steinb5.txt 61 359 0:00:01
steinb6.txt 122 48558 0:00:22
steinb7.txt 111 144 0:00:00
steinb8.txt 104 10770 0:00:02
steinb9.txt 220 93 0:00:01
steinb10.txt 86 256 0:00:00
steinb11.txt 88 65925 0:00:18
steinb12.txt 174 487 0:00:01
steinb13.txt 165 3965 0:00:02
steinb14.txt 235 10631 0:00:03
steinb15.txt 318 1103 0:00:00
steinb16.txt 127 12558 0:00:07
steinb17.txt 129 16146 0:00:09
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
RESULTADOS EXPERIMENTALES Página 42
steinb18.txt 218 536 0:00:00
steinc1.txt 85 104435 0:00:41
steinc2.txt 144 92352 0:00:36
steinc3.txt 754 368074 0:02:40
steinc4.txt 1079 544849 0:02:36
steinc5.txt 1579 17813261 1:06:00
steinc6.txt 55 122208 0:00:31
steinc7.txt 102 2003 0:00:04
steinc8.txt 509 8390990 0:55:00
steinc9.txt 707 3304946 3:19:22
steinc10.txt 1091 28310 0:00:17
steinc11.txt 34 30497986 *
steinc12.txt 46 843572 0:18:38
steinc13.txt 265 113761 *
steinc14.txt 323 4464 0:00:16
steinc15.txt 571 1496150 *
steinc16.txt 11 16097 0:00:46
steinc17.txt 18 9140 0:00:42
steinc18.txt 114 1100923 *
steinc19.txt 146 26852 0:00:57
steind1.txt 106 377442 0:01:04
steind2.txt 220 115704 0:00:23
steind3.txt 1565 17020 0:00:04
steind4.txt 1935 8586 0:00:03
steind5.txt 3250 3454 0:00:03
steind6.txt 73 183422 **
steind7.txt 103 15948 0:00:18
steind8.txt 1082 715196 **
steind9.txt 1448 3881832 0:33:46
steind10.txt 2110 226330 0:02:47
steind11.txt 29 437149 0:07:37
steind12.txt 42 6795 0:01:22
steind13.txt 518 2265330 **
Fig. 4.8 Tabla de resultados D&L
Fuente: Elaboración propia
En las tablas anteriormente expuestas en las figuras 4.7 y 4.8 podemos apreciar los resultados obtenidos del
conjunto de problemas que nos fueron proporcionados para estudiar en el Proyecto, una vez éstos han sido
compilados en LINGO según las dos estratégias planteadas (MTZ y DL).
Las tablas representan, para cada grupo de problemas, el resultado obtenido, el número total de iteraciones
realizadas en el análisis y el tiempo de resolución (runtime) que precisó el estudio.
En el grupo “c”, el tiempo de resolución aparece representado con un asterisco (*) para aquellos problemas en
los que el Solver no llegó al óptimo tras un tiempode resolución estimado de 6 horas. Para el grupo “d”, el
tiempo de resolución de aquellos problemas que no llegaron al óptimo tras un tiempo estimado de 4 horas en
este caso aparece representado con dos asteriscos (**).
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
RESULTADOS EXPERIMENTALES Página 43
Analizando los resultados obtenidos para el grupo de problemas “steinb.txt”, apreciamos que en todos ellos,
tanto para el modelo MTZ como para el modelo DL, se alcanza el valor de la función objetivo. Los tiempos de
resolución para todos estos problemas son prácticamente despreciables, del orden de segundos (algunos
incluso de menos de un segundo), en ambos casos.
En la figura 4.9 aparece representada la línea de tendencia del valor óptimo para los problemas del grupo “b”.
Fig. 4.9 Gráfico de óptimos: problemas “steinb.txt”
Fuente: Elaboración propia
La gráfica de óptimos para los problemas “steinb.txt” tiene tendencia lineal creciente. Presenta estacionalidad
cada tres problemas debido a la distribución de los nodos Terminales.
A continuación, en la gráfica de puntos de la figura 4.10, representamos la precisión que tienen los dos
modelos formulados a la hora de resolver los problemas incluidos en este grupo. Hemos hecho uso de una
única gráfica puesto que ambos llegan al óptimo, es decir, sus resultados no difieren.
82
83
138
59
61
122
111
104
220
86
88
174
165
235
318
127 129
218
0
50
100
150
200
250
300
350
stei
nb
1.t
xt
stei
nb
2.t
xt
stei
nb
3.t
xt
stei
nb
4.t
xt
stei
nb
5.t
xt
stei
nb
6.t
xt
stei
nb
7.t
xt
stei
nb
8.t
xt
stei
nb
9.t
xt
stei
nb
10
.txt
stei
nb
11
.txt
stei
nb
12
.txt
stei
nb
13
.txt
stei
nb
14
.txt
stei
nb
15
.txt
stei
nb
16
.txt
stei
nb
17
.txt
stei
nb
18
.txt
Óptimos clase "b"
serie de óptimos
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
RESULTADOS EXPERIMENTALES Página 44
Fig. 4.10 Precisión del modelo para los problemas de clase “b”
Fuente: Elaboración propia
Dentro del grupo “steinc.txt” nos dimos cuenta de que todos los problemas, desde el “steinc1.txt” hasta el
“steinc10.txt”, alcanzan el óptimo para ambos modelos. Sin embargo, los tiempos de resolución de algunos de
estos problemas aumentan considerablemente respecto a aquellos del grupo “b”.
En la figura 4.11 aparece también representada la línea de tendencia del resultado óptimo para los problemas
del grupo “c”.
Fig. 4.11 Gráfico de óptimos: problemas “steinc.txt”
Fuente: Elaboración propia
82
83
138
59 61
122 111 104
220
86 88
174
165
235
318
127 129
218
0
50
100
150
200
250
300
350
0 5 10 15
MTZ/D&L Óptimo
85 144
754
1079
1579
55 102
509
707
1091
32 46
258 323
556
11 18 113 146
0 200 400 600 800
1000 1200 1400 1600 1800
stei
nc1
.txt
stei
nc2
.txt
stei
nc3
.txt
stei
nc4
.txt
stei
nc5
.txt
stei
nc6
.txt
stei
nc7
.txt
stei
nc8
.txt
stei
nc9
.txt
stei
nc1
0.t
xt
stei
nc1
1.t
xt
stei
nc1
2.t
xt
stei
nc1
3.t
xt
stei
nc1
4.t
xt
stei
nc1
5.t
xt
stei
nc1
6.t
xt
stei
nc1
7.t
xt
stei
nc1
8.t
xt
stei
nc1
9.t
xt
Óptimos clase "c"
Series1
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
RESULTADOS EXPERIMENTALES Página 45
Se aprecia claramente que la gráfica de óptimos para el grupo “c” tiene tendencia decreciente, con un claro
patrón estacional que se repite cada cinco problemas (coincide con la distribución que sigue el número de
nodos terminales para cada problema). Podemos concluir que para los problemas de los grupos “b” y “c”el
óptimo es menor cuando el número de nodos terminales (subconjunto T c N ) también es menor, es decir,
cuando la densidad de nodos de Steiner es mayor (la densidad de nodos Steiner se refiere al porcentaje de
nodos (n) del grafo G=(N,A) que pertenecen al subconjunto S c (N-T) ). Ésto se debe a que la cantidad de arcos
incluidos en la solución final (subgrafo Gs) no es tan elevada y, por tanto, los costes a sumar derivados de ellos
tampoco.
Detectamos que el modelo DL responde más lentamente que la estratégia MTZ, como ocurre en los problemas
“steinc5.txt” y “steinc9.txt”, donde el “runtime” pasa del orden de minutos a horas. Otros ejemplos relevantes
son los problemas “steinc8.txt” y “steinc12.txt”, para los que el modelo MTZ también encuentra el óptimo en
menor tiempo.
Es a partir del problema “steinc11.txt” cuando el programa tiene más dificultades para alcanzar el óptimo.
Éste, tras dejarlo correr durante casi 16 horas no dio solución (en la tabla de resultados aparece la solución
obtenida para un runtime de 6 horas). Decidimos entonces reducir los tiempos de resolución a un máximo de 6
horas y, si en ese tiempo no se había obtenido la solución del problema, quedarnos con la mejor que LINGO
hubiese alcanzado hasta el momento.
En la figura 4.12 que se muestra a continuación aparece reflejada gráficamente la diferencia en cuanto al
tiempo que precisa cada uno de los modelos para la resolución de los problemas “steinc5.txt”, “steinc8.txt”,
“steinc9.txt” y “steinc12.txt” que mencionamos antes.
Fig. 4.12 Comparación del tiempo de resolución entre modelos
Fuente: Elaboración propia
1:06:00
0:55:00
3:19:22
0:18 0:10 0:09 0:04 0:01 0:00:00
0:28:48
0:57:36
1:26:24
1:55:12
2:24:00
2:52:48
3:21:36
3:50:24
steinc5.txt steinc8.txt steinc9.txt steinc12.txt
Tiempos de resolución
DL MTZ
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
RESULTADOS EXPERIMENTALES Página 46
En la figura 4.13 se exponen, haciendo uso de un gráfico de barras, los resultados obtenidos de modelar los
problemas “steinc.txt” según las estrategias MTZ y DL.
Fig. 4.13 Precisión de los modelos MTZ y DL para los problemas de clase “c”
Fuente: Elaboración propia
En la gráfica de precisión de los modelos aparecen aquellos problemas para los que Lingo no alcanzó el
óptimo una vez transcurrido el tiempo de resolución estimado de 6 horas.
Haciendo uso de la estrategia MTZ, sólo en el problema “steinc13.txt” el programa no alcanzó el óptimo tras
dejarlo compilar 6 horas. Los problemas “steinc11.txt”, “steinc15.txt” y “steinc18.txt”, aunque alcanzaron el
óptimo, no muestran un resultado fiable pues, en su caso, hubo que interrumpir el Solver, es decir, tras 6 horas
no se llegó al óptimo. Sin embargo, coincide que la mejor solución alcanzada por LINGO hasta el momento es
igual al óptimo del problema.
Cuando interrumpimos el compilador (Solver), éste nos indica que la solución que va a presentar puede no ser
óptima.
En el caso del modelo DL, los problemas “steinc11.txt”, “steinc13.txt”, “steinc15.txt” y “steinc18.txt” no
alcanzaron el óptimo en el tiempo dispuesto para ello (6 horas). Aquí, nos damos cuenta que DL no se
aproxima a la solución óptima tanto como MTZ.
En la gráfica de la figura 4.14 se muestran aquellos problemas de clase “d” para los que el resultado obtenido
por LINGO es diferente. No contamos en nuestro proyecto con los óptimos de los problemas de este grupo,
32
261
556
113
34
265
571
114
32
258
556
113
0
100
200
300
400
500
600
steinc11.txt steinc13.txt steinc15.txt steinc18.txt
MTZ
DL
Óptimo
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
RESULTADOS EXPERIMENTALES Página 47
presumiblemente por la magnitud de los tiempos de resolución que cabía esperar a priori. Sin embargo, una
vez llevamos a cabo el estudio nos damos cuenta de que ambas estratégias, tanto MTZ como DL, llegan a una
solución equivalente, con tiempos de resolución muy reducidos, en la mayoría de los casos. Como muestra la
figura, sólo en los problemas “steind6.txt”, “steind8.txt” y “steind13.txt” la solución encontrada por LINGO
para ambos modelos es diferente tras haber dejado compilar el programa cuatro horas en los dos casos (Solver
interrumpido). En el problema “steind13.txt”, sin embargo, el programa dio una solución al problema haciendo
uso del modelo MTZ y no para el DL. Nuevamente, aunque los resultados son muy similares entre sí, parece
que la estratedia MTZ responde mejor que la desarrollada por Desrochers y Laporte.
Fig. 4.14 Resultados obtenidos para los problemas de clase “d”
Fuente: Elaboración propia
71
1099
500
73
1082
518
0
200
400
600
800
1000
1200
steind6.txt steind8.txt steind13.txt
MTZ
DL
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
CONCLUSIONES Página 48
CONCLUSIONES
Una vez realizado el estudio de los problemas llegamos a una serie de conclusiones derivadas de los resultados
obtenidos. Cabe destacar que las diferentes estrategias antibucles que hemos utilizado en nuestro Proyecto para
resolver el Problema de Steiner, aunque formuladas en un primer momento con el objetivo de evitar la
formación de ciclos dentro del Problema del Viajante de Comercio, funcionan correctamente, ya que los dos
modelos desarrollados encuentran el óptimo en la mayoría de los problemas.
Es cierto también, no obstante, que algunos problemas proporcionan una solución admisible pero no óptima
para los tiempos de resolución establecidos.
A la hora de analizar los problemas, se pueden distinguir dos etapas diferenciadas: primero, nos encontramos
con la etapa relativa a los problemas de la clase “b” (“steinb.txt”), en la cual el análisis es prácticamente
inmediato pues, como ya sabíamos, estos problemas son de menor complejidad al ser su dimensión menor;
después, en la etapa en que se estudia el grupo “c” (“steinc.txt”), la resolución con LINGO de algunos de los
problemas aquí incluidos no es igualmente satisfactoria, si bien se ha de reconocer que la solución obtenida se
acerca al óptimo considerablemente.
En cuanto a la comparación entre los modelos MTZ y DL, sabemos que ambos responden de manera rápida y
precisa para los problemas de clase “b”. Si bien en la primera etapa correspondiente al análisis (problemas
“steinb.txt”) no apreciamos diferencias entre ambos a la hora de resolver los problemas, es en la segunda
etapa, aquella correspondiente a la clase “c”, en la que el modelo MTZ responde mejor para determinados
problemas. Ésto puede deberse a que el número de restricciones en este modelo es mayor que en la estratégia
DL y, en consecuencia, su tiempo de resolución menor.
Dentro del grupo de problemas “steinc.txt” no se ha podido detectar ningún patrón en cuanto a la relación
directa entre el número de nodos, número de arcos y número de nodos terminales y su influencia en el tiempo
de resolución requerido para cada problema. Si parece, no obstante, que cuando la cantidad de nodos
terminales en un problema es pequeña, por lo general, el tiempo de resolución también lo es.
También, es llamativa la rapidez con que ambas estratégias alcanzan una solución óptima para la mayoría de
los problemas del grupo “steind.txt”.
Hemos de recordar que el modelo DL fue propuesto como alternativa a la estrategia MTZ para mejorar ésta
dentro de la formulación DFJ para el Problema del Viajante de Comercio. No obstante, y en vista de los
resultados obtenidos, parece que el modelo expuesto por Desrochers y Laporte no mejora el planteado con
anterioridad por Miller, Tucker y Zemlin cuando lo aplicamos al Problema de Steiner.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
BIBLIOGRAFÍA Página 49
BIBLIOGRAFÍA
1. INGENIERÍA DE ORGANIZACIÓN: Métodos Cuantitativos de Gestión
“Técnicas básicas para el modelado y resolución de problemas de gestión (Bloques)”
Autor: Jose Manuel García Sánchez
2. INGENIERÍA DE ORGANIZACIÓN: Métodos Cuantitativos de Gestión
“Resolución de problemas: librerías de optimización (LINGO, Solver)”
Autor: Jose Manuel García Sánchez
3. European Journal of Operational Research
“The Traveling Salesman Problem: An overview of exact and approximate algorithms”
Autor: Laporte, G. (1992)
4. Operations Research Letters 10
“Improvements and extensions to the Miller-Tucker-Zemlin subtour elimination constraints”
Autores: Desrochers, M., and Laporte, G. (1991)
5. OR-Library: Distributing Test Problems by Electronic Mail
J. E. Beasley: The Journal of the Operational Research Society (Nov., 1990)
6. Antonio García (GIOI): Conversión de los enunciados.txt a LINGO con C (pag.36)
7. https://es.wikipedia.org
8. https://www.wuolah.com
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
ANEXOS Página 50
ANEXOS
Fichero de entrada de un problema
Formato: Problema Steinb1.txt
13 19 “NumNodos“, “NumAristas”
1 5 7 “i”, “j”, “cij”
3 9 1
3 1 7
4 8 2
6 4 2
6 5 2
6 3 8
8 10 4
9 2 8
9 7 5
10 2 6
11 1 8
11 2 14
12 6 8
12 10 9
12 11 2
12 13 7
12 7 15
13 9 11
8 “Nº nodos Terminales”
4 5 6 7 8 10 11 13 “Nodos Terminales”
41 “Coste asociado”
En la primera fila se indica el número de nodos y aristas.
Después aparece una fila para cada arista, con los dos nodos y el coste.
A continuación viene el número de nodos terminales y, en la siguiente fila, la lista de los terminales.
Finalmente viene un dato de coste asociado que hay que sumar a la FO pues estos problemas tienen un proceso
de reducción.
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
ANEXOS Página 51
Modelo en C (Code::Blocks)
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Problema:\n");
FILE*f1;
FILE*f2;
f1=fopen("steind13.txt","r");
f2=fopen("enunciadolingo.txt","w");
if(f1==NULL){
printf("no se puede abrir el programa");
exit(0);}
if(f2==NULL){
printf("error al abrir prueba.txt");
exit(0);}
int nodos,arcos;
int i,j;
fscanf(f1,"%d %d\n",&nodos,&arcos);
fprintf(f2,"MODEL:\nSETS:\nnodos/1..%d/:t,n,b,adyacentes;\narcos(nodos,nodos)/",nodos);
printf("nodos:%d arcos:%d",nodos,arcos);
printf("\n\ni j c\n");
int origen[arcos],destino[arcos],coste[arcos];
for(i=1;i<=arcos;i++)
{
fscanf(f1,"%d %d %d\n",&origen[i],&destino[i],&coste[i]);
if(i==1){
fprintf(f2,"%d %d,%d %d",origen[i],destino[i],destino[i],origen[i]);}
else{
fprintf(f2,",%d %d,%d %d",origen[i],destino[i],destino[i],origen[i]);}
printf("%d %d %d\n%d %d %d\n",origen[i],destino[i],coste[i],destino[i],origen[i],coste[i]);
}
fprintf(f2,"/:coste,x;\nENDSETS\n\nDATA:\nt=");
int numterminales;
fscanf(f1,"%d\n",&numterminales);
printf("\nNumero de terminales:%d\n",numterminales);
printf("Terminales:");
int terminal[numterminales-1];
int w,p;
int u=0;
int t=1;
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
ANEXOS Página 52
for(j=1;j<=nodos-u;j++)
{
if(j<=numterminales){
fscanf(f1,"%d ",&terminal[j]);
for(w=t;w<=terminal[j];w++)
{
if(w!=terminal[j]&&w==1){
fprintf(f2,"0");
u=u+1;}
if(w!=terminal[j]&&w!=1){
fprintf(f2,",0");
u=u+1;}
if(w==terminal[j]&&w==1){
fprintf(f2,"1");}
if(w==terminal[j]&&w!=1){
fprintf(f2,",1");}
}
t=w;
printf("%d ",terminal[j]);}
else{
fprintf(f2,",0");}
}
p=terminal[1];
printf("\nP=%d",terminal[1]);
fprintf(f2,";\nP=%d; !nodo raíz;\ncoste=",terminal[1]);
for(i=1;i<=arcos;i++)
{
if(i==1){
fprintf(f2,"%d,%d",coste[i],coste[i]);}
else{
fprintf(f2,",%d,%d",coste[i],coste[i]);}
}
int costextra;
fscanf(f1,"\n %d",&costextra);
printf("\nEl coste extra es: %d\n",costextra);
fprintf(f2,";\ncostextra=%d;\nadyacentes=",costextra);
int adyacentes[arcos];
for(i=1;i<=nodos;i++)
{
adyacentes[i]=0;
for(j=1;j<=arcos;j++)
{
if(origen[j]==i||destino[j]==i){
adyacentes[i]=adyacentes[i]+1;}
}
if(i==1){
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
ANEXOS Página 53
fprintf(f2,"%d",adyacentes[i]);}
else{
fprintf(f2,",%d",adyacentes[i]);}
}
fprintf(f2,";\nENDDATA\n\n");
fprintf(f2,"!FO y Restricciones;\n");
fprintf(f2,"min=%d+@sum(arcos(i,j)|i#NE#j:coste(i,j)*x(i,j)); !FO;\n\n",costextra);
fprintf(f2,"@for(nodos(i)|i#NE#P #AND# t(i)#EQ#1:1<=@sum(arcos(i,j):x(i,j))); !(1) los nodos terminales
deben tener un padre;\n");
fprintf(f2,"@sum(arcos(i,j)|i#EQ#P:x(i,j))=0; !(2) el terminal principal es el único que no tiene padre;\n\n");
fprintf(f2,"@for(nodos(j)|t(j)#EQ#0:@sum(arcos(i,j)|i#NE#j:x(i,j))<=b(j)*adyacentes(j)); !(3) la variable b(j)
se activa si j pertenece a la red;\n");
fprintf(f2,"@for(nodos(i)|t(i)#EQ#1:b(i)>=1); !(4) valor de la variable b(i)para los nodos terminales;\n\n");
fprintf(f2,"@for(arcos(i,j)|i#NE#j:x(i,j)<=1-x(j,i)); !(5) sólo se puede activar el arco en un único sentido;\n");
fprintf(f2,"@for(arcos(i,j):@sum(arcos(i,j)|i#NE#j:x(i,j))-t(j)<=@sum(arcos(j,k)|i#NE#k:x(j,k))); !(6) si un
nodo Steiner se activa, ese nodo debe tener un padre;\n\n");
fprintf(f2,"@for(arcos(i,j)|i#NE#j #AND# i#GT#1 #AND# j#GT#1:n(i)-n(j)+(%d-1)*x(i,j)<=%d-2);
!(8)MTZ, restricción anticiclos Modelo MTZ;\n",nodos,nodos);
fprintf(f2,"@for(nodos(i)|i#GT#1:1<=n(i)); !(9);\n");
fprintf(f2,"@for(nodos(i)|i#GT#1:n(i)<=%d-1);\n\n",nodos);
fprintf(f2,"@for(arcos(i,j)|i#NE#j #AND# i#GT#1 #AND# j#GT#1:n(i)-n(j)+(%d-1)*x(i,j)+(%d-
3)*x(j,i)<=%d-2); !(10)DL, restricción anticiclos Modelo D&L;\n\n",nodos,nodos,nodos);
fprintf(f2,"@for(nodos(i):@bin(t(i))); !(7) variables binarias{0,1};\n");
fprintf(f2,"@for(nodos(j):@bin(b(j)));\n");
fprintf(f2,"@for(arcos(i,j):@bin(x(i,j)));\n\nEND");
fclose(f1);
fclose(f2);
return 0;
}
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
ANEXOS Página 54
Problema “steinb1.txt” Modelo MTZ en LINGO
MODEL:
SETS:
nodos/1..13/:t,n,b,adyacentes;
arcos(nodos,nodos)/1 5,5 1,3 9,9 3,3 1,1 3,4 8,8 4,6 4,4 6,6 5,5 6,6 3,3 6,8
10,10 8,9 2,2 9,9 7,7 9,10 2,2 10,11 1,1 11,11 2,2 11,12 6,6 12,12 10,10
12,12 11,11 12,12 13,13 12,12 7,7 12,13 9,9 13/:coste,x;
ENDSETS
DATA:
t=0,0,0,1,1,1,1,1,0,1,1,0,1;
P=4; !nodo raíz;
coste=7,7,1,1,7,7,2,2,2,2,2,2,8,8,4,4,8,8,5,5,6,6,8,8,14,14,8,8,9,9,2,2,7,7,1
5,15,11,11;
costextra=41;
adyacentes=3,3,3,2,2,4,2,2,4,3,3,5,2;
ENDDATA
!FO y Restricciones;
min=41+@sum(arcos(i,j)|i#NE#j:coste(i,j)*x(i,j)); !FO;
@for(nodos(i)|i#NE#P #AND# t(i)#EQ#1:1<=@sum(arcos(i,j):x(i,j))); !(1) los
nodos terminales deben tener un padre;
@sum(arcos(i,j)|i#EQ#P:x(i,j))=0; !(2) el terminal principal es el único que
no tiene padre;
@for(nodos(j)|t(j)#EQ#0:@sum(arcos(i,j)|i#NE#j:x(i,j))<=b(j)*adyacentes(j));
!(3) la variable b(j) se activa si j pertenece a la red;
@for(nodos(i)|t(i)#EQ#1:b(i)>=1); !(4) valor de la variable b(i)para los
nodos terminales;
@for(arcos(i,j)|i#NE#j:x(i,j)<=1-x(j,i)); !(5) sólo se puede activar el arco
en un único sentido;
@for(arcos(i,j):@sum(arcos(i,j)|i#NE#j #AND#
t(j)#EQ#0:x(i,j))<=@sum(arcos(j,k)|i#NE#k:x(j,k))); !(6) si un nodo Steiner
se activa, ese nodo debe tener un padre;
@for(arcos(i,j)|i#NE#j #AND# i#GT#1 #AND# j#GT#1:n(i)-n(j)+(13-1)*x(i,j)<=13-
2); !(8)MTZ, restricción antibucles Modelo MTZ;
@for(nodos(i)|i#GT#1:1<=n(i)); !(9);
@for(nodos(i)|i#GT#1:n(i)<=13-1);
@for(nodos(i):@bin(t(i))); !(7) variables binarias{0,1};
@for(nodos(j):@bin(b(j)));
@for(arcos(i,j):@bin(x(i,j)));
END
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER-ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS
ANEXOS Página 55
Problema “steinb1.txt” Modelo DL en LINGO
MODEL:
SETS:
nodos/1..13/:t,n,b,adyacentes;
arcos(nodos,nodos)/1 5,5 1,3 9,9 3,3 1,1 3,4 8,8 4,6 4,4 6,6 5,5 6,6 3,3 6,8
10,10 8,9 2,2 9,9 7,7 9,10 2,2 10,11 1,1 11,11 2,2 11,12 6,6 12,12 10,10
12,12 11,11 12,12 13,13 12,12 7,7 12,13 9,9 13/:coste,x;
ENDSETS
DATA:
t=0,0,0,1,1,1,1,1,0,1,1,0,1;
P=4; !nodo raíz;
coste=7,7,1,1,7,7,2,2,2,2,2,2,8,8,4,4,8,8,5,5,6,6,8,8,14,14,8,8,9,9,2,2,7,7,1
5,15,11,11;
costextra=41;
adyacentes=3,3,3,2,2,4,2,2,4,3,3,5,2;
ENDDATA
!FO y Restricciones;
min=41+@sum(arcos(i,j)|i#NE#j:coste(i,j)*x(i,j)); !FO;
@for(nodos(i)|i#NE#P #AND# t(i)#EQ#1:1<=@sum(arcos(i,j):x(i,j))); !(1) los
nodos terminales deben tener un padre;
@sum(arcos(i,j)|i#EQ#P:x(i,j))=0; !(2) el terminal principal es el único que
no tiene padre;
@for(nodos(j)|t(j)#EQ#0:@sum(arcos(i,j)|i#NE#j:x(i,j))<=b(j)*adyacentes(j));
!(3) la variable b(j) se activa si j pertenece a la red;
@for(nodos(i)|t(i)#EQ#1:b(i)>=1); !(4) valor de la variable b(i)para los
nodos terminales;
@for(arcos(i,j)|i#NE#j:x(i,j)<=1-x(j,i)); !(5) sólo se puede activar el arco
en un único sentido;
@for(arcos(i,j):@sum(arcos(i,j)|i#NE#j #AND#
t(j)#EQ#0:x(i,j))<=@sum(arcos(j,k)|i#NE#k:x(j,k))); !(6) si un nodo Steiner
se activa, ese nodo debe tener un padre;
@for(arcos(i,j)|i#NE#j #AND# i#GT#1 #AND# j#GT#1:n(i)-n(j)+(13-1)*x(i,j)+(13-
3)*x(j,i)<=13-2); !(10)DL, restricción antibucles Modelo DL;
@for(nodos(i):@bin(t(i))); !(7) variables binarias{0,1};
@for(nodos(j):@bin(b(j)));
@for(arcos(i,j):@bin(x(i,j)));
END