proyecto fin de carrera - universidad de...

70
ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER- ZEMLIN Y DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINEREN GRAFOS Proyecto Fin de Carrera Ingeniería Industrial ANÁLISIS DE UNA FORMULACIÓN POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS Autor: David Rubio López Tutor: José Manuel García Sánchez Dto. Organización Industrial y Gestión de empresas I Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2018

Upload: others

Post on 11-Feb-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

ANÁLISIS DE LAS ESTRATEGIAS ANTIBUCLES DE MILLER-TUCKER- ZEMLIN Y

DESROCHERS-LAPORTE PARA EL PROBLEMA DE STEINER EN GRAFOS

Proyecto Fin de Carrera

Ingeniería Industrial

ANÁLISIS DE UNA FORMULACIÓN POR

NIVELES PARA MODELAR EL

PROBLEMA DE STEINER EN GRAFOS

Autor: David Rubio López

Tutor: José Manuel García Sánchez

Dto. Organización Industrial y Gestión

de empresas I

Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Sevilla, 2018

Page 2: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

Proyecto Fin de Carrera

Ingeniería Industrial

ANÁLISIS DE UNA FORMULACIÓN POR

NIVELES PARA MODELAR EL PROBLEMA DE

STEINER EN GRAFOS

Autor:

David Rubio López

Tutor:

José 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 2018

Page 3: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

Proyecto Fin de Carrera: ANÁLISIS DE UNA FORMULACIÓN POR NIVELES PARA MODELAR EL PROBLEMA DE

STEINER EN GRAFOS

Autor: David Rubio López

Tutor: José Manuel García Sánchez

El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:

Presidente:

Vocales:

Secretario:

Acuerdan otorgarle la calificación de:

Sevilla, 2018

El Secretario del Tribunal

Page 4: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

AGRADECIMIENTOS

Agradezco a mi familia, amigos y profesores tales como José Manuel García Sánchez a finalizar una gran

etapa de aprendizaje y superación en la Escuela Técnica Superior de Ingeniería de la Universidad de Sevilla.

Gracias a todos.

Page 5: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

ÍNDICE

1. OBJETO DEL PROYECTO ................................................................................................................................ 8

2. EL PROBLEMA DE STEINER .......................................................................................................................... 9

2.1 Aplicaciones del problema de Steiner ..................................................................................................... 11

2.1.1 Aplicación en rutas de distribución .................................................................................................. 12

2.1.2 Aplicación en red de plataformas logísticas ..................................................................................... 13

2.1.3 Aplicaciones en diseño de redes ....................................................................................................... 14

3. MODELOS MATEMÁTICOS UTILIZADOS .................................................................................................... 15

3.1 Modelo de optimización: el Problema de Steiner .................................................................................... 17

3.2 Estrategia por niveles .............................................................................................................................. 19

4. IMPLEMENTACIÓN DE LOS MODELOS EN LINGO ...................................................................................... 22

4.1 Formato abstracto: Uso de conjuntos ...................................................................................................... 24

4.2 Caso propio: Elaboración del modelo en Lingo ...................................................................................... 29

5. RESULTADOS EXPERIMENTALES ................................................................................................................ 40

5.1 Resultados obtenidos ............................................................................................................................... 42

5.2 Comparativa estrategia por niveles frente a estrategia de flujo ............................................................... 50

6. BIBLIOGRAFÍA ............................................................................................................................................ 53

7. ANEXOS ...................................................................................................................................................... 54

7.1 Problema en formato .txt ......................................................................................................................... 54

7.2 Tabla de óptimos de problemas tipo “b” ................................................................................................. 55

7.3 Código Visual Basic ................................................................................................................................ 56

7.3.1 Código para importar archivo .txt a Microsoft Excel ....................................................................... 56

7.3.2 Código para crear matrices de adyacencia, Xij, costes y escribir modelo en formato Lingo .lg4 .... 61

7.3.3 Modelo en formato Lingo .lg4 .......................................................................................................... 70

Page 6: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

ÍNDICE DE FIGURAS

Fig 1 Grafo de Steiner

Fig 2 Soluciones admisibles grafo de Steiner

Fig 3 Red de telecomunicaciones

Fig 4 Logo Amazon Flex

Fig 5 Spot Amazon Prime

Fig 6 Andenes plataforma logística

Fig 7 Plan estratégico de infraestructuras y transporte C. Torres 2005

Fig 8 Conexionado servidor rack

Fig 9 Estructura diseño red de trabajo

Fig 10 Grafo de Steiner no orientado

Fig 11 Matriz de adyacencia

Fig 12 Matriz de costes

Fig 13 Logo Software Lingo

Fig 14 Barra de herramientas Lingo

Fig 15 Ventana simulación Lingo

Fig 16 Diagrama de flujo de información

Fig 17 Logo Microsoft Visual Basic for Applications

Fig 18 Interface Programa Excel

Fig 19 Matriz de adyacencia

Fig 20 Matriz Xij

Fig 21 Matriz de costes

Fig 22 Logotipo programa Grafos

Fig 23 Grafo Steinb1

Fig 24 Batería de problemas Lingo

Fig 25 Copia de seguridad por fecha

Fig 26 Esquema periodos

Fig 27 Distribución nodos,arcos y periodos problemas Steiner

Fig 28 Distribución nodos,arcos y periodos problemas Steiner tipo b

Fig 29 Tiempo resolución por periodo

Page 7: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 7

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Fig 30 Tiempo estrategia por niveles nodo raíz no forzado

Fig 31 Tiempo estrategia por niveles nodo raíz forzado

Fig 32 Comparativa tiempo estrategia por niveles vs niveles raíz forzado vs flujo simple vs flujo múltiple

Fig 33 Comparativa error estrategia por niveles vs niveles raíz forzado vs flujo simple vs flujo múltiple

Page 8: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 8

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

1. OBJETO DEL PROYECTO

El Problema de Steiner, al que hace referencia dicho Proyecto consiste en buscar la interconexión más corta

(árbol mínimo) entre varios puntos de una red. Fue propuesto por el matemático alemán Jacob Steiner a

principios del siglo XIX.

Debido a que es un problema genérico, se puede aplicar para muchas situaciones tales como redes de

transporte, abastecimiento y sobre todo de telecomunicaciones.

En nuestro caso, dicho proyecto comparará varias estrategias de resolución basadas en formulación

matemática tales como la estrategia de resolución por niveles, una variante de la anterior y la estrategia de

flujo ya que no existe ningún estudio previo que realice esta tarea.

Esto no quiere decir que estas sean las únicas estrategias que existen, ya que también existen otras tales

como las estrategias de antibucles de Miller-Tucker-Zemlin y Desrochers-Laporte [5].

Esta comparativa se llevará a cabo gracias a una batería de problemas de nodos y grafos planteados en la

OR library [8] mantenida por J.Beasley, en la página web del departamento de investigación operativa del

Imperial College de Londres.

Existen un amplio conjunto de problemas como se puede observar en la librería anteriormente descrita que

van desde problemas Stein con menor número de nodos y nodos terminales hasta problemas con una

cantidad muy considerable de nodos y arcos.

Estos problemas varían en su tamaño (número nodos y arcos, y nodos terminales) y afectan al tiempo de

resolución del problema. En nuestro caso solo vamos a poder estudiar los del tipo b como se explicará más

adelante.

Los problemas descritos anteriormente están expresados en formato “.txt” el cual hay que tratar para

alimentar al modelo en Lingo que es la aplicación para resolver modelos matemáticos que usa la extensión

“.lg4”. Para la exportación de esta información a Lingo se ha usado programación en Visual Basic en el

entorno gráfico de Excel.

En los siguientes apartados se desarrollará más en profundidad tantos el problema de Steiner y sus

aplicaciones, como la estrategia utilizada para la resolución y los datos extraídos de su simulación.

El documento seguirá la siguiente estructura, en el primer capítulo se expondrá brevemente el problema de

Steiner de forma teórica y con grafos para una fácil comprensión. También se introducirán algunas de las

aplicaciones más usadas para este problema.

A continuación, veremos los modelos matemáticos utilizados para su resolución y los implementaremos a

través del Programa Lingo para resolución de modelos matemáticos, obteniendo con esto resultados de

nuestra experimentación por niveles con la cual podremos compararla con la estrategia de flujo simple y

múltiple.

Al final de nuestro documento podremos contrastar los resultados obtenidos y sacar conclusiones de dicho

modelo.

Page 9: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 9

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

2. EL PROBLEMA DE STEINER

Dicho problema fue propuesto por el matemático alemán Jacob Steiner a principios del siglo XIX y consiste

en encontrar el árbol mínimo que interconecta varios nodos de una red modelada como un grafo con costes

asociados a sus arcos.

El problema de Steiner tiene aplicaciones tanto en el diseño de circuitos eléctricos y redes de

telecomunicaciones como en redes de transporte y distribución y consiste en conseguir unir todos los nodos

terminales mediante caminos con un mínimo costo.

Este árbol es un grafo no dirigido en el cual para unir todos los nodos terminales puede ser necesario pasar

por otros nodos no terminales llamados de Steiner.

Por norma general, la solución óptima no es trivial de calcular y 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-Completos).

La resolución del Problema de Steiner es un problema de optimización combinatoria. En estos problemas

las variables de decisión son enteras, es de decir, el espacio de soluciones está formado por ordenaciones

o subconjuntos de números naturales. En este caso, se trata de hallar el mejor valor de entre un número

finito o numerable de soluciones viables. A pesar de ello la enumeración de este conjunto resulta

prácticamente imposible, aún para problemas de tamaño moderado.

La resolución de estos problemas se realiza normalmente a través de lenguajes imperativos como Basic,

C++, etc.

El Problema de Steiner se puede definir como:

Un grafo no dirigido G= (N, A) siendo N el número de nodos y A el número de aristas. Existe un N’c N

subconjunto de nodos al que llamaremos Terminales. También podemos definir los nodos Steiner S c N’-

N. Dichos N’ (nodos terminales) deben incluirse obligatoriamente en la solución mientras que los nodos

Steiner sirven de interconexión entre los nodos terminales y pueden formar o no parte de la solución óptima

si lo requiere el problema.

El objeto de dicho problema es encontrar un subgrafo conexo que cubra todos los nodos terminales y que

sea de coste mínimo.

Page 10: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 10

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Nodo Terminal

Nodo Steiner

Fig 1 Grafo de Steiner

En las figuras siguientes podemos ver que un grafo puede tener distintas soluciones admisibles en las que

se encuentran todos los nodos terminales conectados y los Steiner pueden estar o no conectados.

Fig 2 Soluciones admisibles grafo de Steiner

Como explicaremos más adelante, todos los nodos terminales tendrán un padre excepto si ese nodo terminal

es raíz así como también tendrán un padre los nodos Steiner que pertenezcan a la red óptima.

La solución óptima del árbol tendrá N’+S-1 arcos conexos, siendo N’ el número de nodos terminales y S el

número de nodos Steiner.

Page 11: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 11

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

2.1 Aplicaciones del problema de Steiner

Debido a los rasgos generales del problema, las aplicaciones son muy variadas y alberga multitud de

ámbitos tan variados como el transporte, distribución, electrónica, medición de homogeneidad molecular

en materiales, verificación de rostros en tiempo real, protocolos de internet, etc.

En la actualidad, los campos que abarca este problema y sus aplicaciones aumentan al denotarse una gran

efectividad en la resolución de los modelos.

Fig 3 Red de telecomunicaciones

Page 12: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 12

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

2.1.1 Aplicación en rutas de distribución

Como hemos podido ver en las noticias en el último mes, la empresa Amazon va a abrir el reparto de sus

productos a repartidores “low cost” con coche propio, carnet y que sean autónomos a través de su sección

Amazon Flex.

Fig 4 Logo Amazon Flex

Debido al poco margen con el que van a contar, sería una buena idea aplicar este algoritmo para minimizar

los costes por desplazamiento (gasolina, desgaste de vehículo y tiempo de reparto) que van a sufrir dichos

trabajadores va a ser considerable si no lo organizan correctamente pudiendo salir negativo en el peor de

los casos.

Para ello, como coste de arco habría que tomar el tiempo entre los distintos hogares a repartir gracias a

programas de tráfico como Google Maps o similares. Los nodos terminales serían los hogares a los que

tiene que repartir próximamente y los nodos Steiner los que tiene que repartir una vez finalizados los

primeros.

Una vez encontrada la solución óptima con la posibilidad de incorporar los nodos Steiner a la solución

final, habría que comprobar que ese recorrido es factible en términos de consumo de carburante, desgaste

de vehículo y amortización de este simulando esa ruta, aunque teniendo en cuenta ahora que el coste de los

arcos será el coste que acabamos de comentar.

Simulando este caso podría ocurrir que con una ruta óptima también fuera posible repartir en algunos

hogares Steiner ya que están de camino a los hogares Terminales.

Fig 5 Spot Amazon Prime

Page 13: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 13

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

2.1.2 Aplicación en red de plataformas logísticas

Otro caso en el que tiene y tendría gran impacto la aplicación del problema de Steiner sería en el ámbito

de las plataformas logísticas en una red de distribución por carretera.

Fig 6 Andenes plataforma logística

Si tomamos como nodos terminales de nuestro grafo los clientes potenciales de nuestro sector industrial y

elegimos como nodos de Steiner las capitales donde sería factible utilizar una plataforma logística ya

existente, al modelar y resolver el problema encontraríamos las plataformas nexos de unión que serían

útiles para nuestro negocio y tener acceso con mayor facilidad al comercio con nuestro cliente final.

Esto supondría una disminución de costes de transporte y una mayor flexibilidad y reacción de respuesta

ante aumentos de demanda no planificados.

Fig 7 Plan estratégico de infraestructuras y transporte C. Torres 2005

Page 14: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 14

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

2.1.3 Aplicaciones en diseño de redes

Actualmente debido a la necesidad de redes de comunicación cada vez más complejas, el diseño de redes

de comunicación confiables se ha convertido en una de las principales aplicaciones para la aplicación del

problema de Steiner.

Fig 8 Conexionado servidor rack

El objetivo de este diseño se basa en la disminución en coste debido a la multitud de conexiones siempre

y cuando se mantenga la confiabilidad de la red.

El problema de Steiner sin modificación no sería aplicable a la mayoría de casos prácticos ya que la caída

de cualquier nodo haría imposible la comunicación al resto de ellos y para solventar este problema habría

que añadir restricciones de confiabilidad que solvente este problema.

Fig 9 Estructura diseño red de trabajo

Page 15: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 15

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

3. MODELOS MATEMÁTICOS

UTILIZADOS

Como hemos comentado anteriormente, este proyecto va a tomar la estrategia por niveles para resolver el

problema de Steiner y los va a comparar con los resultados obtenidos de la estrategia de flujo simple y con la

estrategia de flujo múltiple.

Este problema se va a formular siguiendo modelos de optimización lineal ya que estos representan la realidad de

la forma más fiel.

La programación lineal es un modelo matemático que se desarrolló tras la segunda Guerra Mundial como

necesidad de resolver problemas de asignación de recursos.

Dicha formulación fue creada por por George B. Dantsig sobre el 1947. Este consejero matemático de la fuerza

Aérea de los Estados Unidos creó un sistema automático de planificación temporal de despliegue y

abastecimiento logístico.

El nombre de programación lineal fue acuñado por el economista y matemático T.C. Koopmans cuando

colaboraba con Dantsig.

La programación lineal estudia la optimización (minimización o maximización) de una función lineal que

satisface unas restricciones lineales de igualdad y/o desigualdad. De dichos resultados podemos sacar

conclusiones que nos ayuden en la toma de decisiones ante problemas de distribución de recursos y reducción de

costes.

Existen varios puntos necesarios para crear un modelo matemático de este tipo:

• Variables de decisión: Son elementos del sistema a modelar que son controlables por el decisor. Toman

valores números reales y son representados con letras con subíndices como x 1, x 2

También se pueden expresar como vectores.

X=( x 1, x 2, )

• Restricciones. Son las limitaciones o casos no posibles de las variables de decisión. Se expresan como

igualdades y desigualdades de las variables de decisión.

gi (x)bi; gi (x)=bi; gi (x) bi;

i=1,…m; con gi una función lineal en x

• Función objetivo. Es la ecuación a optimizar (minimizar o maximizar). Es la que nos da la información

de la calidad de optimización que vamos buscando con este modelo.

Maximizar z=f(x); Minimizar z=f(x)

Page 16: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 16

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Seguidamente podemos ver un ejemplo de programación lineal.

Unos grandes almacenes encargan a un fabricante pantalones y chaquetas deportivas.

El fabricante dispone para la confección de 750 m de tejido de algodón y 1000 m de tejido de poliéster.

Cada pantalón precisa 1 m de algodón y 2 m de poliéster. Para cada chaqueta se necesitan 1.5 m de

algodón y 1 m de poliéster.

El precio del pantalón se fija en 50 € y el de la chaqueta en 40 €.

¿Qué número de pantalones y chaquetas debe suministrar el fabricante a los almacenes para que estos

consigan un beneficio máximo?

Nuestras variables de decisión serán:

x = número de pantalones

y = número de chaquetas

Nuestra función objetivo la podemos escribir:

f(x,y)= 50x + 40y

Para escribir las restricciones nos ayudaremos de la siguiente tabla:

Pantalones Chaquetas Disponible

Algodón 1 1,5 750

Poliéster 2 1 1000

x+1,5y<=750

2x+y<=1000

Como el número de pantalones y chaquetas son números naturales habrá que añadir también las

siguientes restricciones:

x>=0

y>=0

De esta forma se construiría el modelo matemático del problema lineal que hemos planteado.

Page 17: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 17

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Nodo Terminal

Nodo Steiner

Nodo Steiner

Arco orientado

3.1 Modelo de optimización: el Problema de Steiner

Tal y como hemos comentado anteriormente, existen hasta la fecha distintas técnicas para la resolución de este

problema, aunque ninguna que lo resuelva en tiempo polinomial ya que se probó que era del tipo NP-Completo.

Debido a la dificultad de resolución del problema, ya que solo es factible para instancias de tamaño muy

limitado, es necesario en la mayoría de los casos recurrir a técnicas heurísticas para poder generar soluciones

a bajo costo con un consumo razonable de tiempo de ejecución.

En nuestro caso, sea G= (N,A) un grafo con coste definido en cada arco. Siendo T un grupo de nodos llamados

Terminales los cuales tienen que estar conectados con el resto, necesitamos encontrar un árbol de G que

contenga estos nodos terminales y cuyo total de coste de arcos sea tan pequeño como pudiera ser. En el óptimo

del problema puede contener nodos no Terminales llamados de Steiner que son necesarios para encontrar el

árbol de expansión mínimo que una los nodos Terminales y cuyo coste total sea mínimo.

Nuestra estrategia parte de un nodo terminal al que llamaremos raíz. Hay que recalcar que como nodo raíz

puede ser cualquiera que sea terminal. El resto de nodos tanto terminales como Steiner tendrán un padre o

nodo anterior a ellos.

Nuestro grafo se compone de arcos no orientados los cuales tienen un coste asociado Cij. Debido a ser no

orientados, el arco puede ser tanto Xij como Xji siendo su coste asociado el mismo de Cij como de Cji. Véanse

las siguientes imágenes.

Fig 10 Grafo de Steiner no orientado

Arco no orientado Equivalencia del arco no orientado

Page 18: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 18

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Matriz de adyacencia

Fig 11 Matriz de adyacencia

Matriz de costes

Fig 12 Matriz de costes

Page 19: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 19

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

3.2 Estrategia por niveles

Se explicarán a continuación los elementos que van a tomar parte en esta estrategia

ELEMENTOS TIPO VARIABLEAS

ASOCIADAS DATOS ASOCIADOS

Nodos i= 1…N Alfa(i), binario. Terminal(i), binario

Arcos (i,j), (j,i) X(i,j), binario. C(i,j), entero

Nodos_Periodos (i, p) Beta(i,p), binario

N es el total de Nodos del problema.

A es el total de Arcos del problema.

P es el total de periodos del problema.

T es el total de terminales del problema.

A continuación se explican las variables que conforman nuestro problema:

• Terminal(i) es una variable binaria que indica si el nodo i es terminal (Terminal(i)=1) y 0 si no lo es

(Terminal(i)=0).

• Costes(i,j) es una variable entera que representa el peso de los arcos entre los nodos i y j.

Seguidamente se apuntarán las variables de decisión del problema:

• X(i,j) es una variable binaria que nos indica si existe arco entre los nodos representados por i y j cuando

vale 1 (X(i,j)=1) y cero en el caso contrario.

• Alfa(i) es una variable binaria que indica si el nodo i es raíz (Alfa(i)=1) y 0 si no lo es (Alfa(i)=0).

• Beta(i,t) es una variable binaria que nos indica si el nodo i ha entrado en la red en el periodo t.

Los valores de estas variables de decisión serán tomadas conforme el modelo vaya requiriendo debido a las

especificaciones del problema ya que no están definidas previamente como el coste, arcos, nodos o periodos.

En este modelo, tal y como comentamos más adelante, el nodo raíz no lo fijamos y se escoge en función de las

necesidades del problema.

En la siguiente página podremos ver como se constituye nuestro modelo matemático caracterizado por su

función objetivo y restricciones asociadas a esta. Podremos observar que no es un modelo excesivamente

complejo excepto por el funcionamiento de alguna restricción que comentaremos más adelante.

Page 20: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 20

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Nuestro modelo quedaría como sigue:

[1]𝑀𝑖𝑛 ∑ 𝐶𝑖𝑗 ∗ 𝑋𝑖𝑗

(𝑖,𝑗)∈𝐴

s.a:

[2] ∑ 𝑋𝑖𝑗 ≥ 1 − 𝛼𝑖

(𝑖,𝑗)∈𝐴

∀𝑖: 𝑇𝑖 = 1

[3] ∑ 𝛽𝑖𝑝 = 1

𝑝∈𝑃

∀𝑖: 𝑇𝑖 = 1

[4] ∑ 𝛼𝑖

𝑖∈𝑁

≤ 1 ∀𝑖

[5] ∑ 𝑇𝑖 ∗ 𝛼𝑖 ≤ 1

𝑖∈𝑁

∀𝑖

[6] 𝑋𝑖𝑗 + 𝛽𝑖𝑝 ≤ 1 + 𝛽𝑗, 𝑝 − 1 ∀𝑝 > 1: (𝑖, 𝑗) ∈ 𝐴

[7] 𝛽𝑖1 = 𝛼𝑖 ∀𝑖

[8] ∑ 𝑋𝑖𝑗 ≥ ∑ 𝛽𝑖𝑝

𝑖∈𝑁;𝑝∈𝑃(𝑖,𝑗)∈𝐴

∀𝑖: 𝑇𝑖 = 0

[9] 𝑋𝑖𝑗, 𝛽𝑖𝑝 ∈ {0,1}

A continuación vamos a explicar tanto la función objetivo [1] como las restricciones asociadas [2]-[9].

[1] Nuestra función objetivo busca minimizar el coste (Cij) de unir todos los nodos terminales a través de los

arcos de la red (Xij)

[2] Esta restricción nos escoge al simular que nodo terminal queremos que sea el raíz del grafo y se cumple

igualdad cuando el nodo no es raíz (0=0) y la desigualdad cuando el nodo terminal es raíz (1>0).

[3] Esta restricción nos ayuda a que no se formen ciclos en el grafo marcando sólo un nodo por periodo. Para

los nodos terminales, la variable binaria 𝛽 = 1en el periodo p que se una ese nodo con su padre.

[4] Esta restricción nos convierte la variable 𝛼en binaria.

Page 21: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 21

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

[5] Esta restricción nos obliga a que de todos los nodos terminales, sólo uno de ellos sea raíz siendo 1=1 la

ecuación cuando seleccionamos al nodo raíz y 0 ≤ 1 cuando seleccionamos otro nodo terminal cualquiera.

[6] Esta restricción hace que para los periodos 𝑝 > 1 todos los nodos ya sean terminales o Steiner que formen

parte de la solución tengan un padre o nodo con el que está unido. La ecuación queda 1+1=1+1 si el nodo es

terminal o Steiner y 1+0<=1+1 si el nodo i no es hijo de j.

[7] Esta restricción asigna al nodo raíz el periodo 1 y hace a la variable 𝛽 = 1.

[8] Esta restricción hace que para los nodos que no son terminales, puedan entrar o no en la red si fuera

necesario. Si el nodo no terminal entra a la red óptima este será un nodo Steiner y la ecuación será 1=1 y 1>0

en el caso que el nodo no entre en la red óptima.

[9] Esta restricción convierte a la variable 𝛽en binaria.

En resumen:

1 si j es el padre de i

Xij

0 si no

1 si i se incorpora a la red en el periodo p

𝛽𝑖𝑝

0 si no

1 si i es el nodo raíz

𝛼𝑖

0 si no

Una variante del modelo anterior es en la cual el nodo raíz lo fijamos en un nodo terminal concreto.

En nuestro nuevo modelo solo se introducen 2 nuevas restricciones que son las siguientes:

[10]𝛼𝑖 = 1 𝑡𝑜𝑚𝑎𝑛𝑑𝑜 𝑐𝑜𝑚𝑜 𝑖 𝑒𝑙 𝑛𝑜𝑑𝑜 𝑡𝑒𝑟𝑚𝑖𝑛𝑎𝑙 𝑞𝑢𝑒 𝑒𝑙𝑖𝑗𝑎𝑚𝑜𝑠

Si el nodo 4 es terminal, podríamos tomar 𝛼4 = 1

[11] 𝛼𝑖 ∈ {0,1}

Con esto fijamos nuestro nodo raíz y eliminamos una variable de nuestro modelo que pasa a ser ahora

dato.

Estudiaremos con resultados el funcionamiento de esta segunda variante.

Page 22: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 22

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

4. IMPLEMENTACIÓN DE LOS

MODELOS EN LINGO

LINGO es una herramienta integral diseñada para construir y resolver modelos de optimización lineal, no

lineal (convexo y no convexo / global), cuadrático, de constricción cuadrática, cono de segundo orden, semi-

definido, estocástico y entero más rápido, fácil y eficiente. LINGO proporciona un paquete completamente

integrado que incluye un lenguaje potente para expresar modelos de optimización, un entorno con todas las

características para crear y editar problemas, y un conjunto de solucionadores integrados rápidos

Fig 13 Logo Software Lingo

Gracias a este programa, podremos reducir el tiempo de desarrollo y formular problemas lineales, no lineales

y enteros rápidamente de forma legible y ordenada.

El lenguaje de modelado propio de Lingo facilita expresar de manera sencilla utilizando sumas y variables con

subíndices al igual que se haría con lápiz y papel. También puede explotar múltiples núcleos de CPU para una

simulación más rápida.

También permite crear modelos a partir de hojas de cálculo o archivos de texto facilitando así la fabricación

en serie de archivos ejecutables Lingo.

Page 23: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 23

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

El formato básico que emplea Lingo está constituido por los siguientes puntos:

1. Encabezado

Define el inicio del modelo.

MODEL:

2. Función Objetivo

Es la función que queremos minimizar o maximizar

MAX= 20000*X+15000*Y;

3. Restricciones del problema

Son las reglas que van a hacer que las variables del problema tomen unos datos u otros y satisfagan

la función objetivo.

1*X+2*Y<=80;

3*X+2*Y<=120;

X>=0;

Y>=0;

4. Restricciones asociadas al tipo de variable

Las variables por defecto son continuas (>=0)

Ejemplo si la variable es entera: @GIN(X)

Ejemplo si la variable es binaria: @BIN(X)

Ejemplo si la variable es libre: @FREE(X)

5. Fin

Es necesario finalizar el modelo con END

Hay que tener en cuenta lo siguiente para modelar el problema:

Lingo ignora las líneas en blanco haciendo más ordenado y visible nuestro modelo.

Para escribir comentarios hay que precederlos por ! y cerrar con ; .

No distingue entre mayúsculas y minúsculas.

Longitud máxima de una línea es de 512 caracteres.

Page 24: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 24

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

4.1 Formato abstracto: Uso de conjuntos

Para problemas complejos y con mayor número de datos, variables y restricciones es más sencillo y

visualmente atractivo utilizar la forma simplificada (abstracta).

Para ello hacemos uso de conjuntos. Existen 2 tipos:

Conjuntos primitivos: Recogen los actores conjunto del problema y sus atributos propios o compartidos

con actores que no estén en un conjunto.

Conjuntos derivados: Recogen las características compartidas entre actores conjunto. Están formados,

por tanto, por los actores primitivos ya definidos. Las características solo se definen una vez.

Los actores que no forman conjunto no es necesario definirlos. Se definirán en la sección DATA.

Para definir los conjuntos contamos con:

• Sección SET: Definición de los nombres y números de elementos de los conjuntos

• Sección DATA: Definición de los valores de las características.

Podemos ver un ejemplo:

Una empresa elabora tres tipos de piensos usando cuatro tipos de cereales. Cada saco de pienso contiene

50 kg y se vende al precio indicado en la tabla siguiente, que contiene también la composición de cada

saco y las existencias de cereales en la fábrica.

Pienso Avena Maíz Cebada Mijo Precio

1 25 25 0 0 9

2 0 20 20 10 12

3 20 0 30 0 6,2

Existencias 50000 80000 40000 10000

Determina el número de sacos que deberá producir la empresa de cada tipo de pienso para maximizar el

ingreso (supuesto que vende toda la producción).

Page 25: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 25

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

El modelo matemático queda de la siguiente forma:

Max. 9x+12y+6.2z

s.a 25x+20z<=50000

25x+20y<=80000

20y+30z<=40000

10y<=10000

x,y,z >=0

En Lingo sería:

MODEL:

SETS:

Cereal: Existencias;

Pienso/1..3/:Precio, Sacos;

Pareja(Pienso, Cereal): Cantidad;

ENDSETS

DATA:

Cereal = Avena Maiz Cebada Mijo;

Cantidad = 25 25 0 0

0 20 20 10

20 0 30 0;

Existencias = 50000 80000 40000 10000;

Precio = 9, 12, 6.20;

ENDDATA

[Ingresos] Max = @Sum(Pienso(p): precio(p)*Sacos(p));

@For(Cereal(c):[Limite] @Sum(Pienso(p): Cantidad(p,c)*Sacos(p))<Existencias(c));

END

Como podemos ver en la programación del modelo y hemos explicado anteriormente, Lingo permite

programar modelos con conjuntos de índices. Como ventajas de definir conjuntos tenemos:

• Ecuaciones independientes de los datos permitiéndonos interactuar y modificar datos sin influir

en las fórmulas e importar dichos datos desde otro documento.

• Se pueden introducir todas las ecuaciones siguiendo un mismo esquema como una fórmula

general.

La palabra SETS: y ENDSETS: determinan el rango en el que vamos a definir los conjuntos.

Definimos primero el nombre del conjunto y sus elementos entre barras / / y separadas por : las variables

asociadas.

Page 26: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 26

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

En el ejemplo anterior podemos ver como el conjunto Cereal tiene como elementos a Avena, Maíz,

Cebada, Mijo, que hemos declarado en la sección DATA y a esas variables le hemos asociado una

variable Existencias.

Existencias(Avena), Existencias(Maiz), Existencias(Cebada) y Existencias(Mijo).

El mismo procedimiento hemos seguido con el conjunto Pienso definiendo Precio y Sacos, de modo que

tenemos seis nuevas variables, Precio(1), Precio(2), Precio(3), Sacos(1), Sacos(2), Sacos(3).

La definición Pareja(Pienso, Cereal) establece que el conjunto Pareja está formado por todos los pares

de un pienso y un cereal. Cada pareja tiene asociada una variable Cantidad, de modo que hemos definido

12 nuevas variables Cantidad(1, Avena), etc.

Tras definir la sección SETS y DATA pasamos a modelar la función objetivo y restricciones.

La línea de la función objetivo empieza siempre con un Min o Max =. En nuestro caso podemos leer:

“Suma para todo pienso p del precio p por el número de sacos producidos de p”.

En general, dentro de @Sum() ponemos el nombre de un conjunto seguido de una nueva variable (en este

caso p), que hace referencia a un elemento genérico del conjunto, luego : y la expresión (en función de p)

que queremos sumar para todo p.

La segunda línea define simultáneamente cuatro restricciones, una para cada cereal. Podemos leer: “Para

todo cereal c, definimos la restricción etiquetada [Limite] como que la suma para todo pienso p de la

cantidad de cereal c en el pienso p por el número de sacos producidos de p ha de ser ≤ que las existencias

de c”. La sintaxis de @For() es la misma que la de @Sum(). Escribimos el nombre de un conjunto con

una nueva variable entre paréntesis (en este caso c), luego : y luego lo que queremos que LINGO haga

para cada valor de c.

Las instrucciones de Lingo para recorrer los elementos de un conjunto son:

@For(Conjunto(i): ) Repite una tarea para todo i

@Sum(Conjunto(i): ) Suma una expresión para todo i

@Prod(Conjunto(i): ) Multiplica una expresión para todo i

@Max(Conjunto(i): ) Calcula el máximo para todo i

@Min(Conjunto(i): ) Calcula el mínimo para todo i

@Writefor(Conjunto(i): ) Escribe una expresión para todo i

En Lingo se dispone de los siguientes operadores lógicos:

#EQ# igual

#NE# no igual

#GE# mayor o igual

#GT# mayor

#LT# menor

#LE# menor o igual

#AND# y

Page 27: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 27

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

#OR# o (inclusivo)

#NOT# no

Tras modelar nuestro problema, presionamos en el botón Solve

Fig 14 Barra de herramientas Lingo

Obtendremos una ventana emergente que indica el estado de la simulación:

Fig 15 Ventana simulación Lingo

En esta imagen podemos ver un resumen del número de variables, restricciones, tiempo de resolución del

modelo, función objetivo, etc.

Page 28: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 28

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Al pulsar sobre el botón Solve también obtendremos el archivo .lgr que contiene los siguientes resultados

para nuestro ejemplo anterior una vez finalizada la resolución. También se puede interrumpir la

simulación y obtener los resultados hasta el momento.

Variable Value Reduced Cost

SACOS(1) 2000.000 0.000000

SACOS(2) 1000.000 0.000000

SACOS(3) 0.000000 1.000000

Row Slack or Surplus Dual Price

INGRESOS 30000.00 1.000000

LIMITE( AVENA) 0.000000 0.3600000

LIMITE( MAIZ) 10000.00 0.000000

LIMITE( CEBADA) 20000.00 0.000000

LIMITE( MIJO) 0.000000 1.200000

La columna Value contiene el óptimo de cada variable.

La columna Slack or Surplus, contiene a el óptimo de la función objetivo (fila INGRESOS). Los

restantes son variables de holgura que representan en este caso que para el óptimo del problema sobran

20000kg de cebada.

La columna Reduced Cost contiene a los multiplicadores de Kuhn y Tucker de las variables del problema.

La columna Dual Price contiene los multiplicadores de Khun y Tucker de las restricciones.

Page 29: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 29

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

4.2 Caso propio: Elaboración del modelo en Lingo

Tal y como expusimos al principio de este documento, partimos de una librería mantenida por J.Beasley [8]

en el que todos los enunciados de los problemas que vamos a modelar se encuentran en formato .txt .

La tarea de creación del modelo a partir de los datos del grafo en estos archivos de texto no es algo rápido y

fácil. Para ello vamos a crear a partir de Visual Basic para Microsoft Excel un procedimiento que nos ayude a

importar esos datos de cada archivo a Lingo y nos cree el modelo de cada problema.

Con esto conseguiremos automatizar la creación de modelos y reducir el tiempo de elaboración de estos a 0.

El flujo de información será el siguiente:

Fig 16 Diagrama de flujo de información

Inicio

Archivo en Excel con programación

Importación sencilla desde Excel del archivo .txt

Creación automática de matríz de adyacencia, costes y modelo

para las variables dadas

Exportación de datos para la creación del modelo Lingo .lg4

Simulación del modelo y guardado de datos y archivo

obtenido

Fin

Page 30: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 30

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

A continuación, podemos ver la estructura que tienen los archivos de texto donde podemos encontrar los datos

de cada problema:

13 19 Número de nodos y arcos totales

1 5 7

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 Nodo origen, nodo destino y coste del arco que los une (arcos no orientados)

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úmero de nodos terminales

4 5 6 7 8 10 11 13 Nodos terminales

41 Coste fijo a sumar a la función objetivo solución.

El siguiente paso es importar dicha información a Microsoft Excel a través de programación en Visual Basic.

Visual Basic para Excel es una herramienta muy eficaz para manipular, analizar y presentar datos. Cuando

vamos a realizar una tarea repetitiva es especialmente útil.

VBA funciona mediante ejecución de macros, que no dejan de ser procedimientos escritos en lenguaje Visual

Basic.

Fig 17 Logo Microsoft Visual Basic for Applications

El principal motivo de la elección de este método para importar los datos al modelo Lingo es la facilidad de

este lenguaje y la gran cantidad de tutoriales y guías que podemos encontrar en foros y páginas webs al

respecto.

Todo el código creado para la realización de este proyecto se adjuntará más adelante.

El primer paso por realizar es importar los datos desde los archivos de texto a Excel.

Tras escribir en la celda inferior a “Nombre problema” pulsamos en el botón Importar problema.

El código tras este botón lee de una celda determinada en una hoja del libro de Excel qué documento de toda

la batería de problemas (steinb1 a steinb18) .txt queremos abrir que esté dentro de la ruta de directorios

especificada en este código.

Page 31: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 31

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Fig 18 Interface Programa Excel

Tras esto tendremos los datos del archivo de texto en cuestión dentro de nuestra hoja de Excel y una matriz de

adyacencia, una matriz Xij y otra de costes. Estas matrices nos ayudarán a comprobar para los problemas

pequeños que hemos programado bien la importación de datos y corresponde con la realidad. Los diferentes

colores hacen referencia a que al ser arcos no orientados, las matrices son simétricas y por lo tanto existe el

mismo número de celdas de color agua marina que de color verde.

En la matriz Xij no se hace esta distinción de colores al venir reflejados los subíndices.

Fig 19 Matriz de adyacencia

Page 32: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 32

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Fig 20 Matriz Xij

Fig 21 Matriz de costes

Estas matrices nos sirven si queremos construir fácilmente la red a través de un programa llamado “Grafos”

de Alejandro Rodríguez Villalobos el cual nos ayuda a visualizar fácilmente la red de nodos y arcos.

Fig 22 Logotipo programa Grafos

Las matrices de adyacencia y costes las introduciríamos en las tablas de dicho programa y construiría

automáticamente nuestra red. Cada nodo está numerado y conectado mediante arcos con coste a los otros

nodos.

Page 33: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 33

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

La imagen siguiente corresponde con la red del problema Steinb1.

Nodo Terminal

Nodo Steiner

Fig 23 Grafo Steinb1

Page 34: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 34

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

El siguiente paso es escribir el número de periodos con los que queremos resolver el problema. Esta variable

la elegimos nosotros e iremos probando distintos periodos hasta que encontremos el que mejor resuelva el

problema. Cuando elijamos el nº que queramos pulsamos sobre “Exportar a Lingo” y nos escribirá el modelo

completo en Excel y lo exportará a un archivo con la extensión .lg4 .

Fig 24 Batería de problemas Lingo

Gracias a esto podremos crearnos una batería de modelos de forma casi inmediata.

También disponemos de un botón llamado “Guardar por fecha” para hacer copias de seguridad del

documento Excel. Esta copia de seguridad tendrá de nombre la hora y fecha de guardado. Es útil para realizar

pruebas en la programación de Excel y no sobrescribir ficheros.

Fig 25 Copia de seguridad por fecha

En la imagen siguiente podemos ver el modelo del problema Steinb1 con 3 periodos generado en Lingo.

!Problema Steiner steinb1 Periodos t=4;

MODEL:

SETS:

Nodos/1..13/:Alfa,Terminal;

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/:X,Costes;

Periodos/1..4/;

Nodos_Periodos(Nodos,Periodos):Beta;

ENDSETS

DATA:

Costes=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,

15,15,11,11;

Page 35: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 35

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Terminal=0,0,0,1,1,1,1,1,0,1,1,0,1;

ENDDATA

MIN=41+@SUM(Arcos(i,j):X*Costes);

@FOR(Nodos(i)|Terminal(i)#EQ#1: @SUM(Arcos(i,j):X(i,j))>=1-Alfa(i));

@FOR(Nodos(i)|Terminal(i)#EQ#1: @SUM(Periodos(t):Beta(i,t))=1);

@SUM(Nodos(i):Alfa(i)) <=1;

@SUM(Nodos(i):Terminal(i)*Alfa(i)) <=1;

@For(Periodos(t)|t#GT#1:@for(Arcos(i,j):x(i,j)+Beta(i,t)<=1+Beta(j,t-1)));

@FOR(Nodos(i):Beta(i,1)=Alfa(i));

@FOR(Nodos(i)|Terminal(i)#EQ#0:@SUm(Arcos(i,j):x(i,j))>=@Sum(Nodos_Periodos(i

,t):Beta(i,t)));

@FOR(Nodos_Periodos(i,t): @Bin(Beta(i,t)));

END

Ahora vamos a pasar a describir parte por parte el modelo para el problema Steinb1 de 3 periodos.

Los problemas en Lingo comienzan con MODEL: y SETS: a continuación.

En el problema Steinb1, como podemos ver en la primera línea del enunciado, contiene 13 nodos y 19 arcos.

Hemos definido los nodos como un conjunto que va desde 1 hasta 13 y luego le hemos asignado las variables

asociadas Alfa y Terminal.

Alfa representa el nodo raíz. Este nodo a través de las restricciones que explicaremos más adelante será un

nodo terminal. Es una variable binaria que valdrá 1 cuando sea raíz y 0 en el caso contrario.

Terminal representa los nodos que tienen que aparecer obligatoriamente en el resultado óptimo. Es una variable

binaria que valdrá 1 cuando el nodo sea terminal y 0 si no lo es.

Los arcos también los hemos definido como un conjunto, aunque estos necesitan de otro conjunto, en este caso

de los nodos. Necesitan un nodo origen y otro destino, aunque al ser los arcos no orientados, se forma una terna

que va en ambos sentidos. Ej: 1 5,5 1 es el arco no orientado entre el nodo 1 y 5.

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/:X,Costes;

Los arcos llevan asociados las siguientes variables:

X hace referencia a la variable que denota si ese arco en la solución óptima conecta los nodos indicados

(vale 1) o no los conecta (vale 0).

Coste hace referencia al peso de cada arco y es utilizado en la función objetivo para obtener el resultado

óptimo.

Los Periodos los hemos definido como un conjunto que va desde 1 hasta en este caso el periodo 4.

Page 36: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 36

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Fig 26 Esquema periodos

El conjunto Nodos_Periodos representa el esquema anterior y tiene como variable asociada Beta que se utiliza

para marcar los nodos en el periodo que pasen a formar parte de la red principal y define como 1 en ese caso y

0 si no forman parte de la red óptima.

Tras definir los conjuntos de SETS: ahora vamos a pasar a la sección DATA:

En esta sección tenemos:

Costes que representan el peso de cada arco. Existen tantos valores como arcos existen.

Terminales que representan los nodos que tienen que formar parte dentro de la solución óptima. Existen tantos

valores como nodos existen siendo 1 si es terminal y 0 si no lo es el nodo.

DATA:

Costes=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,

15,15,11,11;

Terminal=0,0,0,1,1,1,1,1,0,1,1,0,1;

ENDDATA

Con esto finalizaría la parte de definición de conjuntos y datos y pasaríamos a el modelado de la función

objetivo y las restricciones que condicionan el problema.

Nodo raíz (periodo 1)

Nodo en periodo 1

Nodo en periodo 2

Nodo en periodo 2

Nodo en periodo 3

Nodo en periodo 4

Nodo en periodo 1

Nodo en periodo 2

Page 37: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 37

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Nuestra próxima línea es la función objetivo del problema. Usa la estructura básica de un problema de grafo

de expansión mínima.

MIN=41+@SUM(Arcos(i,j):X*Costes);

Nuestra función objetivo comienza con MIN ya que queremos minimizar en nuestro caso.

El operador @SUM realiza el sumatorio del producto de X*Coste de todos los arcos.

También se le suma una constante al sumatorio que viene definida en la última línea de los enunciados de cada

problema.

Esta línea es equivalente a:

[1]𝑀𝑖𝑛 ∑ 𝐶𝑖𝑗 ∗ 𝑋𝑖𝑗

(𝑖,𝑗)∈𝐴

Tras definir la función objetivo, vamos a pasar a explicar las restricciones que comandan nuestro modelo Lingo.

Nuestra primera restricción nos elige al simular que nodo terminal es mejor para que sea raíz del problema.

@FOR(Nodos(i)|Terminal(i)#EQ#1: @SUM(Arcos(i,j):X(i,j))>=1-Alfa(i));

Con la función @FOR recorremos todos los nodos que son terminales (=1) y realizamos un sumatorio de X >=

1-Alfa que vale 1=1 la igualdad cuando el arco une nodos terminales en el que ninguno de ello es el nodo raíz

y 1=0 cuando uno de ellos es el nodo raíz.

Es equivalente a esta expresión:

[2] ∑ 𝑋𝑖𝑗 ≥ 1 − 𝛼𝑖

(𝑖,𝑗)∈𝐴

∀𝑖: 𝑇𝑖 = 1

La siguiente restricción nos etiqueta en el periodo que entran a formar parte de la solución del problema los

nodos terminales. Esta etiqueta nos ayuda a que un mismo nodo no entre en la solución en distintos periodos

impidiendo la formación de ciclos.

@FOR(Nodos(i)|Terminal(i)#EQ#1: @SUM(Periodos(t):Beta(i,t))=1);

Es equivalente a esta expresión matemática:

[3] ∑ 𝛽𝑖𝑝 = 1

𝑝∈𝑃

∀𝑖: 𝑇𝑖 = 1

La próxima restricción nos obliga a que solo exista un nodo raíz ya que la suma de todas las Alfa para todos

los nodos del problema es <=1.

@SUM(Nodos(i):Alfa(i)) <=1;

Es equivalente a:

[4] ∑ 𝛼𝑖

𝑖∈𝑁

≤ 1 ∀𝑖

La siguiente restricción nos obliga a que el nodo raíz sea un nodo terminal siendo 1=1 la ecuación cuando

seleccionamos al nodo raíz y 0 ≤ 1 cuando seleccionamos otro nodo terminal cualquiera.

Page 38: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 38

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

@SUM(Nodos(i):Terminal(i)*Alfa(i)) <=1;

Es equivalente a:

[5] ∑ 𝑇𝑖 ∗ 𝛼𝑖 ≤ 1

𝑖∈𝑁

∀𝑖

La próxima restricción hace que para los periodos 𝑝 > 1 todos los nodos ya sean terminales o Steiner que

formen parte de la solución tengan un padre o nodo con el que está unido. La ecuación queda 1+1=1+1 si el

nodo es terminal o Steiner y 1+0<=1+1 si el nodo i no es hijo de j.

@For(Periodos(t)|t#GT#1:@for(Arcos(i,j):x(i,j)+Beta(i,t)<=1+Beta(j,t-1)));

Es equivalente a:

[6] 𝑋𝑖𝑗 + 𝛽𝑖𝑝 ≤ 1 + 𝛽𝑗, 𝑝 − 1 ∀𝑝 > 1: (𝑖, 𝑗) ∈ 𝐴

La siguiente restricción asigna el periodo 1 al nodo raíz y etiqueta a la variable Beta de ese nodo como 1.

@FOR(Nodos(i):Beta(i,1)=Alfa(i));

Equivalente a:

[7] 𝛽𝑖1 = 𝛼𝑖 ∀𝑖

La próxima restricción hace que para los nodos que no son terminales, puedan entrar o no en la red si fuera

necesario. Si el nodo no terminal entra a la red óptima la ecuación será 1=1 y 1>0 en el caso que el nodo no

entre en la red óptima.

@FOR(Nodos(i)|Terminal(i)#EQ#0:@SUm(Arcos(i,j):x(i,j))>=@Sum(Nodos_Periodos(i

,t):Beta(i,t)));

Equivalente a:

[8] ∑ 𝑋𝑖𝑗 ≥ ∑ 𝛽𝑖𝑝

𝑖∈𝑁;𝑝∈𝑃(𝑖,𝑗)∈𝐴

∀𝑖: 𝑇𝑖 = 0

Nuestra última restricción nos define como binaria la variable Beta.

@FOR(Nodos_Periodos(i,t): @Bin(Beta(i,t)));

Equivalente a:

[9] 𝑋𝑖𝑗, 𝛽𝑖𝑝 ∈ {0,1}

La longitud del código de Lingo se verá afectado a medida que queremos realizar problemas con mayor

número de nodos y arcos. El problema que hemos representado anteriormente es el más pequeño de todos

ellos que cuenta con 13 nodos y 19 arcos (Steinb1).

Page 39: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 39

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

La variante de dicho modelo que comentamos en puntos anteriores consta de las siguientes

restricciones que deberemos introducir a nuestro modelo en Lingo:

Alfa(4)=1;

Equivalente a:

[10] 𝛼4 = 1

Y también la restricción que nos especifica que Alfa es una variable binaria:

@FOR(Nodos(i):@BIN(Alfa(i)));

Equivalente a:

[11] 𝛼𝑖 ∈ {0,1}

En nuestro caso, hemos escogido como nodo raíz el número 4 ya que este es terminal y esta era

característica obligatoria para que pudiera ser raíz. Se ha elegido el 4 aunque también se podría haber

escogido cualquier otro nodo terminal como el 5,6,7, etc, de la lista de nodos terminales.

Terminal=0,0,0,1,1,1,1,1,0,1,1,0,1;

Page 40: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 40

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

5. RESULTADOS EXPERIMENTALES

Nuestros problemas que van a ser investigados los hemos obtenido como dijimos en capítulos anteriores de la

OR library [8] mantenida por J.Beasley, en la página web del departamento de investigación operativa del

Imperial College de Londres.

Hay distintas clases de problemas que van desde el grupo “b” al “e”. A medida que la letra aumenta, también

su complejidad al tener un mayor número de nodos y arcos.

Dentro de cada grupo existe una numeración de 1 al 20 aproximadamente en la que aumenta también su

complejidad.

A continuación, se recoge una tabla donde aparecen tanto el número de nodos, arcos y terminales de cada uno

de los problemas de esta librería de clase “b”.

Problemas 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

Page 41: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 41

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

En las siguientes gráficas podemos observar cómo se distribuyen el número de nodos, arcos y nodos

terminales a medida que aumentamos el número del problema y su clase.

Fig 27 Distribución nodos,arcos y periodos problemas Steiner

La grafica anterior presenta picos bastante importantes tanto en los últimos problemas de clase “c” como

“d” y “e” en la línea de tendencia que refleja el número de arcos de los problemas llegando a más de 20000

arcos para los últimos problemas de clase “e”.

El número de nodos y terminales no presenta un incremento tan notable como el número de arcos.

En nuestro caso particular, nos vamos a centrar solamente en los problemas de clase “b”.

Fig 28 Distribución nodos,arcos y periodos problemas Steiner tipo b

En la gráfica de la clase “b” podemos observar 3 zonas distintivas donde se produce un repunte del número

de arcos de los problemas. Esto ocurre entre los problemas Steinb4 y Steinb6, Steinb10 y Steinb12, Steinb16

y Steinb18.

El número de nodos y nodos terminales aumenta de forma más progresiva sin zonas de picos y valles como

en los arcos.

Más adelante se comparará estas zonas conflictivas con el resultado de las simulaciones para sacar

conclusiones sobre cómo afectan estos picos a la hora de resolver el problema.

0

5000

10000

15000

20000

25000

Stei

nb

1

Stei

nb

4

Stei

nb

7

Stei

nb

10

Stei

nb

13

Stei

nb

16

Stei

nc1

Stei

nc4

Stei

nc7

Stei

nc1

0

Stei

nc1

3

Stei

nc1

6

Stei

nc1

9

Stei

nd

2

Stei

nd

5

Stei

nd

8

Stei

nd

11

Stei

nd

14

Stei

nd

17

Stei

nd

20

Stei

ne3

Stei

ne6

Stei

ne9

Stei

ne1

2

Stei

ne1

5

Stei

ne1

8

Distribución problemas Steiner

Nº Nodos Nº Arcos Nº Terminales

0

20

40

60

80

100

120

140

160

180

Distribución problemas clase b

Nº Nodos Nº Arcos Nº Terminales

Page 42: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 42

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

5.1 Resultados obtenidos

Los resultados de nuestra experimentación los obtendremos una vez simulados todos los modelos para una

batería de periodos o niveles que vamos a ir definiendo nosotros según se comporte el problema.

Una vez tenemos cada uno de los archivos .lg4 con el nombre del problema y periodo, abrimos el archivos

y ponemos a correr el solucionador pulsando la tecla Solve tal y como explicamos en capítulos anteriores.

Al encontrar problemas cuyo tiempo de resolución excedían con creces las 6 y 7 horas hemos decidido

ponerle como tiempo límite de simulación 30 minutos. Con esto obtendremos soluciones subóptimas. Para

evaluar estas soluciones con la óptima utilizaremos un indicador del error entre estos 2 valores y sacaremos

conclusiones de cuanto nos alejamos de la solución óptima. Hay que recalcar que la solución óptima ha

sido obtenida mediante experimentación ajena a este trabajo.

Los datos recogidos en las tablas siguientes vienen definidos por el software empleado (Lingo) y los

medios técnicos básicos para este software (procesador Intel Core Inside i5) lo cual hace que procesadores

de mayor potencia podrían conseguir tiempos de resolución mejores que los que vamos a exponer.

En la siguiente tabla vamos a recoger la siguiente información obtenida en la simulación de cada problema

para el caso de la estrategia de niveles con nodo raíz no forzado:

• Nombre del problema

• Número de nodos

• Número de nodos terminales

• Número de arcos

• Número máximo de periodos

• Función objetivo obtenida

• Función objetivo real

• Error porcentual de la función objetivo

• Tiempo de resolución del problema (máximo 30 minutos)

• Número de iteraciones

El error lo obtendremos siguiendo la siguiente fórmula:

𝐸𝑟𝑟𝑜𝑟 = |𝑆𝑜𝑙𝑢𝑐𝑖ó𝑛 𝑜𝑏𝑡𝑒𝑛𝑖𝑑𝑎 − Ó𝑝𝑡𝑖𝑚𝑜 𝑟𝑒𝑎𝑙|

Ó𝑝𝑡𝑖𝑚𝑜 𝑟𝑒𝑎𝑙𝑥100

Problema Nodos Nodos

Terminales Arcos Niveles F.Objetivo

F.Objetivo

Real Error

Tiempo de

simulación

(s)

Extended

solver

steps

Total

solver

iterations

steinb1 13 8 19 3 88 82 7% 0 3 1189

steinb1 13 8 19 4 82 82 0% 0 59 1957

steinb1 13 8 19 5 82 82 0% 1 88 17454

steinb1 13 8 19 6 82 82 0% 2 654 28973

steinb1 13 8 19 7 82 82 0% 7 1868 106681

steinb1 13 8 19 8 82 82 0% 8 3231 125061

steinb1 13 8 19 9 82 82 0% 16 7373 210309

steinb2 15 11 21 4 90 83 8% 2 291 22950

steinb2 15 11 21 5 83 83 0% 2 71 19842

steinb2 15 11 21 6 83 83 0% 3 1091 43743

Page 43: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 43

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

steinb2 15 11 21 7 83 83 0% 4 891 59194

steinb2 15 11 21 8 83 83 0% 4 437 57713

steinb2 15 11 21 9 83 83 0% 9 3634 126172

steinb3 20 15 25 4 145 138 5% 2 639 15991

steinb3 20 15 25 5 145 138 5% 6 1925 80065

steinb3 20 15 25 6 142 138 3% 16 9392 223400

steinb3 20 15 25 7 142 138 3% 33 16675 401983

steinb3 20 15 25 8 138 138 0% 21 6843 233933

steinb3 20 15 25 9 138 138 0% 33 14046 358199

steinb3 20 15 25 10 138 138 0% 62 23388 795738

steinb3 20 15 25 11 138 138 0% 46 17223 505003

steinb3 20 15 25 12 138 138 0% 105 29671 1229312

steinb4 40 9 80 5 66 59 12% 48 19804 488244

steinb4 40 9 80 6 60 59 2% 302 98442 1744619

steinb4 40 9 80 7 60 59 2% 321 80463 1702504

steinb4 40 9 80 8 59 59 0% 991 288040 5807116

steinb4 40 9 80 9 59 59 0% 1747 601363 13524551

steinb4 40 9 80 10 59 59 0% 1800 532120 12175047

steinb5 39 12 80 4 67 61 10% 16 5334 169703

steinb5 39 12 80 5 62 61 2% 30 8389 273077

steinb5 39 12 80 6 61 61 0% 43 7880 380907

steinb5 39 12 80 7 61 61 0% 208 70355 1798931

steinb5 39 12 80 8 61 61 0% 837 240111 6991812

steinb5 39 12 80 9 61 61 0% 1170 325876 8053645

steinb6 45 25 87 5 139 122 14% 590 164918 4840462

steinb6 45 25 87 6 139 122 14% 1800 399508 14331885

steinb6 45 25 87 7 129 122 6% 1800 377244 12196984

steinb6 45 25 87 8 125 122 2% 1800 289071 10181263

steinb6 45 25 87 9 126 122 3% 1800 546701 14490360

steinb7 22 11 33 4 113 111 2% 0 142 10195

steinb7 22 11 33 5 111 111 0% 3 2044 38839

steinb7 22 11 33 6 111 111 0% 6 1472 67484

steinb7 22 11 33 7 111 111 0% 29 19957 301841

steinb7 22 11 33 8 111 111 0% 17 4516 214871

steinb7 22 11 33 9 111 111 0% 41 15623 458078

steinb8 26 15 38 5 108 104 4% 11 2500 123487

steinb8 26 15 38 6 105 104 1% 48 22209 521419

steinb8 26 15 38 7 104 104 0% 26 9143 263104

steinb8 26 15 38 8 104 104 0% 68 24466 678783

steinb8 26 15 38 9 104 104 0% 160 45319 1529557

steinb9 27 23 35 6 222 220 1% 46 17170 517275

steinb9 27 23 35 7 221 220 0,5% 174 62526 1541350

steinb9 27 23 35 8 220 220 0% 344 107829 3319281

steinb9 27 23 35 9 220 220 0% 561 189660 5967302

steinb9 27 23 35 10 220 220 0% 1182 321276 11915727

steinb10 55 13 121 4 100 86 16% 102 38094 852956

Page 44: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 44

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

steinb10 55 13 121 5 92 86 7% 329 108876 2199299

steinb10 55 13 121 6 87 86 1% 555 132745 3042252

steinb10 55 13 121 7 90 86 5% 1800 466122 10637871

steinb10 55 13 121 8 90 86 5% 1800 413913 9634727

steinb11 63 19 129 4 126 88 43% 246 72740 2260799

steinb11 63 19 129 5 95 88 8% 538 131295 3323802

steinb11 63 19 129 6 89 88 1% 1095 222243 6455520

steinb11 63 19 129 7 90 88 2% 1800 429131 10506300

steinb11 63 19 129 8 89 88 1% 1800 997367 26469677

steinb12 63 36 125 5 220 174 26% 1800 333150 15187789

steinb12 63 36 125 6 223 174 28% 1800 367884 12055969

steinb12 63 36 125 7 182 174 5% 1800 323467 9896714

steinb12 63 36 125 8 197 174 13% 1800 364622 10065362

steinb12 63 36 125 9 206 174 18% 1800 263901 7790857

steinb13 63 36 56 5 169 165 2% 52 12803 444445

steinb13 63 36 56 6 168 165 2% 285 116198 2599971

steinb13 63 36 56 7 165 165 0% 633 231938 5463807

steinb13 63 36 56 8 165 165 0% 1800 604714 17160238

steinb14 42 21 65 6 239 235 2% 1800 691121 24272503

steinb14 42 21 65 7 237 235 1% 1800 450388 16235063

steinb14 42 21 65 8 235 235 0% 1800 283091 9329656

steinb14 42 21 65 9 235 235 0% 1800 392403 14927137

steinb15 42 21 69 7 327 318 3% 1800 394514 16870626

steinb15 42 21 69 8 324 318 2% 1800 476863 15629062

steinb15 42 21 69 9 319 318 0,3% 1800 1286830 53553900

steinb15 42 21 69 10 319 318 0,3% 1800 239188 14030326

steinb16 77 17 166 5 146 127 15% 1800 559515 12981212

steinb16 77 17 166 6 151 127 19% 1800 482801 9398524

steinb16 77 17 166 7 146 127 15% 1800 272494 5442193

steinb16 77 17 166 8 138 127 9% 1800 299243 5746711

steinb16 77 17 166 9 164 127 29% 1800 221378 5618552

steinb16 77 17 166 10 141 127 11% 1800 355977 6555017

steinb17 74 23 153 6 155 131 18% 1800 518935 15025559

steinb17 74 23 153 7 175 131 34% 1800 437852 14620033

steinb17 74 23 153 8 147 131 12% 1800 615217 12818093

steinb17 74 23 153 9 151 131 15% 1800 334777 6764197

steinb17 74 23 153 10 151 131 15% 1800 270949 9843468

steinb18 82 45 166 6 291 218 33% 1800 368795 27419773

steinb18 82 45 166 7 294 218 35% 1800 211246 7373937

steinb18 82 45 166 8 325 218 49% 1800 387374 18495778

steinb18 82 45 166 9 273 218 25% 1800 232129 7670838

steinb18 82 45 166 10 280 218 28% 1800 198838 5425520

Como podemos ver en la tabla anterior, hemos recogido todos los problemas de clase b para distintos niveles

o periodos (suelen ir desde 3 hasta 10 periodos aproximadamente).

Page 45: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 45

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

También hemos elegido una paleta de colores para identificar con facilidad los problemas de los que no

hemos obtenido la solución óptima ya sea por tener un número muy pequeño de periodos o tiempo

excesivamente elevado.

Hemos simulado los problemas como máximo un tiempo de 30 min (1800s) y obtenido la mejor solución

óptima hasta ese momento.

Los problemas que no han podido resolverse en ese tiempo se ha marcado su fuente en rojo de la columna

Tiempo de simulación.

En la columna de Error también hemos elegido una paleta de colores similar. Hemos tomado como verde

cuando la solución obtenida coincide con la solución óptima real (0% error). Cuando obtenemos un error

inferior al 10% lo consideramos como una solución factible y utilizamos un rojo claro. Para valores de error

mayor del 10% consideramos que esa solución se aleja mucho de la real y la marcamos con un rojo oscuro.

Como podemos observar, para los primeros problemas con un número pequeño de nodos y arcos, este

modelo no tiene problema en solucionarlos en un tiempo bajo. Esto ocurre también probando con niveles

más grandes como 7,8 o 9.

Hay que recalcar que, para periodos pequeños, el modelo no encuentra la solución óptima real, aunque se

aproxima bastante ya que los errores son moderados.

Uno de los puntos que hemos observado es que una vez encontrada la mejor solución para el problema

Steinb y nivel t, si simulamos los siguientes periodos, el tiempo de resolución crece abruptamente.

Cuando se alcanza el óptimo en cierto nivel, si seguimos aumentando niveles también vamos a aumentar el

tiempo de resolución ya que estamos obligando al problema a utilizar un mayor número de niveles para el

mismo óptimo, es decir, una ruta más larga.

En el problema Steinb4 podemos observar lo siguiente:

Problemas Nº Nodos Nº Arcos Nº Terminales

Steinb4 40 80 9

Fig 29 Tiempo de resolución por periodo

54

56

58

60

62

64

66

68

0

200

400

600

800

1000

1200

1400

1600

1800

2000

steinb4t5 steinb4t6 steinb4t7 steinb4t8 steinb4t9 steinb4t10

Tiempo de resolución por periodo Steinb4

Elapsed run time (s) Solución obtenida

Page 46: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 46

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

En la siguiente gráfica recogeremos los tiempos de resolución de todos los problemas del tipo “b” para la

estrategia de niveles con el nodo raíz no forzado:

Fig 30 Tiempo estrategia por niveles nodo raíz no forzado

Para el problema steinb6, observando los datos recogidos encontramos que no es posible encontrar una

solución óptima que coincida con la real para ningún periodo en el tiempo de simulación de 30 minutos.

Lo más que nos acercamos es a un error del 2% para el periodo 8 y 30 minutos. Hay que recalcar que este

problema contiene 45 nodos de los cuales 25 son terminales.

Problemas Nº Nodos Nº Arcos Nº Terminales

Steinb6 45 87 25

Según seguimos avanzando en las simulaciones de los problemas, comprobamos que el problema steinb12

no se puede resolver completamente para el rango de tiempo dado y su solución se aleja un 5% de la real

para el periodo 7. Este problema consta de 125 arcos y 36 terminales dificultando la obtención de la solución

óptima en un tiempo menor de 30 minutos.

Problemas Nº Nodos Nº Arcos Nº Terminales

Steinb12 63 125 36

A partir del problema steinb14, ninguno de ellos puede resolverse en el intervalo de 30 minutos y su

resolución se acerca a las 24 horas o más en la mayoría de los casos gracias a simulaciones realizadas en

las que se comprueba esto.

Para 30 minutos, los errores de los problemas steinb16 ronda entre el 10% y el 35% aproximadamente no

obteniéndose así una buena solución.

0

200

400

600

800

1000

1200

1400

1600

1800

2000

Tiempo E.Niveles raíz no forzado

Tiempo E.Niveles

Page 47: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 47

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

A continuación, se mostrarán los resultados obtenidos de la segunda variante de nuestro problema por

niveles donde el nodo raíz es escogido por nosotros eligiendo un nodo terminal al azar.

Problema Nodos Nodos

Terminales Arcos Niveles F.Objetivo

F.Objetivo Real

Error Tiempo de

simulación

(s)

Extended solver steps

Total solver

iterations

steinb1 13 8 19 4 83 82 1% 0 0 0

steinb1 13 8 19 5 82 82 0% 0 0 103

steinb2 15 11 21 5 84 83 1% 0 0 59

steinb2 15 11 21 6 84 83 1% 0 0 161

steinb2 15 11 21 7 84 83 1% 0 0 992

steinb2 15 11 21 8 83 83 0% 1 0 3631

steinb3 20 15 25 4 158 138 14% 0 0 11

steinb3 20 15 25 5 142 138 3% 1 0 169

steinb3 20 15 25 6 138 138 0% 1 0 1092

steinb4 40 9 80 5 71 59 20% 0 0 275

steinb4 40 9 80 6 68 59 15% 2 177 14358

steinb4 40 9 80 7 68 59 15% 24 4604 187046

steinb4 40 9 80 8 61 59 3% 22 3564 221222

steinb4 40 9 80 9 61 59 3% 50 6834 525741

steinb4 40 9 80 10 60 59 2% 126 39328 1039369

steinb4 40 9 80 11 59 59 0% 343 78506 2623356

steinb5 39 12 80 5 71 61 16% 0 2 1642

steinb5 39 12 80 6 62 61 2% 5 56 19380

steinb5 39 12 80 7 61 61 0% 24 631 62860

steinb5 39 12 80 8 61 61 0% 15 3494 110026

steinb5 39 12 80 9 61 61 0% 60 17058 566765

steinb6 45 25 87 6 144 122 18% 9 186 37131

steinb6 45 25 87 7 138 122 13% 65 13103 498169

steinb6 45 25 87 8 129 122 6% 1110 310488 8622886

steinb6 45 25 87 9 127 122 4% 1800 354947 13395207

steinb7 22 11 33 6 127 111 14% 0 15 1006

steinb7 22 11 33 7 111 111 0% 0 5 3711

steinb8 26 15 38 6 116 104 12% 0 0 169

steinb8 26 15 38 7 113 104 9% 3 12 6389

steinb8 26 15 38 8 108 104 4% 5 32 21773

steinb8 26 15 38 9 107 104 3% 10 242 39208

steinb8 26 15 38 10 107 104 3% 22 1409 134805

steinb8 26 15 38 11 105 104 1% 28 1510 252882

steinb8 26 15 38 12 104 104 0% 39 4929 293881

steinb9 27 23 35 7 232 220 5,5% 0 0 705

steinb9 27 23 35 8 228 220 4% 4 161 24248

steinb9 27 23 35 9 221 220 0,5% 5 138 35683

steinb9 27 23 35 10 221 220 0,5% 19 885 129299

steinb9 27 23 35 11 221 220 0,5% 44 4029 270720

Page 48: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 48

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

steinb9 27 23 35 12 221 220 0,5% 82 15939 732542

steinb9 27 23 35 13 221 220 0,5% 219 39398 1893407

steinb9 27 23 35 14 220 220 0% 374 60258 3742925

steinb10 55 13 121 5 105 86 22% 1 7 7328

steinb10 55 13 121 6 96 86 12% 27 1152 108260

steinb10 55 13 121 7 95 86 10% 51 14254 381142

steinb10 55 13 121 8 90 86 5% 286 81949 1833719

steinb10 55 13 121 9 89 86 3% 1652 315653 10178986

steinb10 55 13 121 10 88 86 2% 1800 367125 11286668

steinb11 63 19 129 5 128 88 45% 0 4 1414

steinb11 63 19 129 6 107 88 22% 19 119 78351

steinb11 63 19 129 7 101 88 15% 36 4029 233102

steinb11 63 19 129 8 97 88 10% 246 58896 1901701

steinb11 63 19 129 9 92 88 5% 1623 30978 1140597

steinb11 63 19 129 10 89 88 1% 1800 328021 12202026

steinb12 63 36 125 6 192 174 10% 6 30 19275

steinb12 63 36 125 7 185 174 6% 62 6018 348108

steinb12 63 36 125 8 178 174 2% 1800 101037 4162048

steinb13 63 36 56 6 207 165 25% 0 4 605

steinb13 63 36 56 7 176 165 7% 6 3 13311

steinb13 63 36 56 8 169 165 2% 29 399 124013

steinb13 63 36 56 9 169 165 2% 31 3312 244996

steinb13 63 36 56 10 165 165 0% 121 26270 1098862

steinb14 42 21 65 7 272 235 16% 1 2 241

steinb14 42 21 65 8 239 235 2% 25 695 106846

steinb14 42 21 65 9 235 235 0% 69 12383 581679

steinb15 42 21 69 7 325 318 2% 3 4 12664

steinb15 42 21 69 8 319 318 0,3% 17 850 86460

steinb15 42 21 69 9 319 318 0,3% 58 10913 421494

steinb15 42 21 69 10 319 318 0,3% 738 136343 6143852

steinb15 42 21 69 11 319 318 0,3% 1425 194235 10135897

steinb15 42 21 69 12 319 318 0,3% 1800 261257 15603689

steinb16 77 17 166 6 151 127 19% 8 8 22080

steinb16 77 17 166 7 135 127 6% 21 2333 136746

steinb16 77 17 166 8 134 127 6% 760 153328 4200773

steinb16 77 17 166 9 147 127 16% 925 91813 2577024

steinb16 77 17 166 10 145 127 14% 1090 130944 3958038

steinb16 77 17 166 11 143 127 13% 1256 256897 8975896

steinb16 77 17 166 12 140 127 10% 1800 365094 10213797

steinb17 74 23 153 6 177 131 35% 5 22 14407

steinb17 74 23 153 7 150 131 15% 59 7753 348279

steinb17 74 23 153 8 142 131 8% 660 97291 3951422

steinb17 74 23 153 9 144 131 10% 860 119669 5086304

steinb17 74 23 153 10 138 131 5% 1274 165867 6677974

steinb17 74 23 153 11 140 131 7% 1645 198523 8457466

steinb17 74 23 153 12 144 131 10% 1800 260032 9225384

Page 49: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 49

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

steinb18 82 45 166 7 235 218 8% 133 14430 765065

steinb18 82 45 166 8 232 218 6% 1260 148355 5567649

steinb18 82 45 166 9 245 218 12% 1800 226323 7721629

steinb18 82 45 166 10 246 218 13% 1800 148623 7412694

La tabla donde está recogidos los datos sigue la misma estructura y paleta de colores que la tabla anterior.

Como podemos ver, los tiempos de resolución son bastante menores que en la primera versión de nuestra

simulación, aunque esto no quiere decir que se obtengan mejores resultados ya que la función objetivo que

obtenemos no se acerca tanto a la real como en la versión primera con lo que obtenemos errores más

considerables que antes.

Fig 31 Tiempo estrategia por niveles nodo raíz forzado

Hay que recalcar que los datos recogidos en las tablas anteriores y las gráficas son en base al software

empleado (Lingo) y los medios técnicos básicos para este software (procesador Intel Core Inside i5)

En el siguiente punto podremos comparar las diferentes estrategias y observar las gráficas de tiempos y

errores cometidos.

0

200

400

600

800

1000

1200

1400

1600

1800

2000

Tiempo E.Niveles raíz forzada

Tiempo E.Niveles raíz forzada

Page 50: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 50

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

5.2 Comparativa estrategia por niveles frente a estrategia de

flujo

Para evaluar nuestro modelo y su operatividad es necesario compararlo con otros modelos y para ello

tomaremos el proyecto de Antonio García Elías sobre el Estudio Experimental de Formulaciones de Flujo

para Resolver el Problema de Steiner en Grafos.

La determinación del tope de tiempo en 30 minutos y el uso del criterio de errores menores del 10% para

soluciones buenas lo hemos tomado siguiendo este trabajo nombrado anteriormente para poder realizar una

comparativa siguiendo la misma norma.

En dicho proyecto se analizan dos estrategias, una de flujo de simple y otra de flujo múltiple. En ambas

estrategias se toma como premisa que por los nodos Steiner entran y salen el mismo número de unidades

de flujo. Los nodos Terminales son sumideros y a cada uno de ellos le tiene que llegar una unidad de flujo.

La diferencia entre ambas estrategias es que en la simple sólo puede circular una unidad de flujo por cada

arco (cota superior =1) y en la estrategia de flujo múltiple no (cota superior >=1).

Hasta la fecha no se ha comparado resultados computacionales entre la estrategia de resolución por niveles

(la expuesta en este trabajo) y la estrategia de flujo para problemas de Steiner y por ello vamos a llevar a

cabo este estudio.

En la tabla anterior donde aparecía la estrategia por niveles con una batería de niveles distintos, hemos

buscado entre todos los periodos de cada problema cual era el que menos error cometía y lo hemos añadido

a esta tabla junto con su tiempo de resolución. También hemos creado columnas asociadas a los tiempos de

resolución y error del problema de Steiner mediante estrategia de flujo simple y la de flujo múltiple extraído

del trabajo [6] de la bibliografía.

Problema

Tiempo E.Niveles

raiz no forzada

Tiempo E.Niveles

raíz forzada

Tiempo E.Flujo Simple

Tiempo E.Flujo

Múltiple

Error E.Niveles

raiz no forzada

Error E.Niveles

raíz forzada

Error E.Flujo Simple

Error E.Flujo

Múltiple

Steinb1 0 0 1 0 0% 0% 0% 0%

Steinb2 2 1 2 0 0% 0% 0% 0%

Steinb3 21 1 7 0 0% 0% 0% 0%

Steinb4 991 343 31 22 0% 0% 0% 0%

Steinb5 43 24 88 118 0% 0% 0% 0%

Steinb6 1800 1800 1800 1800 2% 4% 11% 0%

Steinb7 3 0 8 4 0% 0% 0% 0%

Steinb8 26 39 25 13 0% 0% 0% 0%

Steinb9 344 374 43 18 0% 0,0% 0% 0%

Steinb10 555 1800 303 1800 1% 2% 0% 3%

Steinb11 1095 1800 1800 1800 1% 1% 0% 0%

Steinb12 1800 1800 1800 1800 5% 2% 15% 3%

Steinb13 633 121 243 124 0% 0% 0% 0%

Steinb14 1800 69 1800 1800 0% 0% 2% 0%

Steinb15 1800 1800 1800 1800 0,3% 0,3% 4% 0%

Steinb16 1800 1800 1800 1800 9% 10% 12% 0%

Steinb17 1800 1274 1800 1800 12% 5% 4% 2%

Steinb18 1800 1260 1800 1800 25% 6% 26% 7%

Page 51: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 51

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Para poder comparar la tabla anterior, hemos creado gráficas que enfrenten los datos para poder sacar así

mejores conclusiones.

La gráfica siguiente compara los tiempos de resolución de las cuatro estrategias para cada uno de los

problemas de la batería “b”.

Fig 32 Comparativa tiempo estrategia por niveles vs niveles raíz forzada vs flujo simple vs flujo múltiple

Podemos comprobar que en términos de tiempo, todas las estrategias excepto la de niveles con raíz forzada

se comportan de forma similar, exceptuando problemas como el steinb4 en el que la estrategia por niveles

despunta demasiado o en los problemas entre el steinb9 y steinb12 donde hay una mayor diferencia en

tiempos.

A partir del problema steinb14, tenemos que cortar las simulaciones, explicando esto la coincidencia en

tiempo de la estrategia por niveles, y las de flujo simple y múltiple. La estrategia por niveles con el nodo

raíz forzado se comporta mucho mejor en cuanto a tiempos en problemas de gran número de nodos y arcos

como podemos ver en los steinb del 14 al 18.

En cuanto a errores, vemos en la siguiente gráfica como para los primeros problemas todas las estrategias

devuelven errores muy parecidos excepto la estrategia por niveles con raíz forzada que comete errores

mayores que el resto. Conforme aumenta la dificultad de los problemas, la estrategia de flujo múltiple se

descuelga como la mejor estrategia, seguida por la de niveles con nodo raíz forzado. La estrategia de flujo

simple y la de niveles con el nodo raíz no forzado se comportan bastante pero que nuestras otras dos

estrategias.

0

200

400

600

800

1000

1200

1400

1600

1800

2000

Tiempo de resolución

Tiempo E.Niveles raiz no forzada Tiempo E.Niveles raíz forzada

Tiempo E.Flujo Simple Tiempo E.Flujo Múltiple

Page 52: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 52

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Fig 33 Comparativa error solución estrategia por niveles vs niveles raíz forzada vs flujo simple vs flujo múltiple

La diferencia en tiempos y errores entre las dos estrategias por niveles es debido a que para problemas

pequeños con fácil conmutación, no elegir el nodo raíz y que este lo elija el problema es mejor opción pero

conforme el número de nodos, nodos terminales y arcos se hace más grande, elegir un nodo raíz de forma

forzada hace que se realicen menos simulaciones para encontrar el óptimo. Esto puede degenerar en que no

escojamos el nodo raíz adecuado al azar y cometamos mayor error en el óptimo del problema.

Tras estudiar la tabla de resultados y ambas gráficas, es concluyente extraer que la mejor estrategia en

cuanto a tiempos y errores que comete es la estrategia de flujo múltiple. Su solución encuentra el óptimo

en la mayoría de los casos en tiempos pequeños menores o igual a 30 minutos y cuando no, no se aleja

demasiado de la solución óptima.

Esto no quiere decir que sea la mejor estrategia de todas las que pueden resolver el problema de Steiner, ya

que como podemos ver en el trabajo de Análisis de las estrategias antibucles de Miller-Tucker-Zemlin y

Desrochers-Laporte para el problema de Steiner en grafos [5], sus tiempos de resolución son mucho

mejores que los que podemos ver en nuestro estudio.

La siguiente estrategia que mejor se comportaría sería la de niveles con el nodo raíz forzado. Para problemas

complejos el tiempo de resolución es menor que las dos estrategias restantes e incluso el error que comete

es menor.

Las otras dos estrategias, la de niveles con el nodo raíz no forzado y la estrategia de flujo simple son bastante

similares en términos de tiempo, aunque en la gráfica de errores podemos ver como las soluciones de la

estrategia por niveles se aproxima más a la solución óptima que la de flujo simple en la mayoría de los

casos.

Al contrario de lo que se pensaba a priori, fijar el nodo raíz en un nodo terminal al azar ayuda

significativamente a la resolución del problema tanto en términos de tiempo tal y como nos demuestran los

datos, aunque esto no consigue posicionar a esta estrategia como la mejor de las estudiadas en este proyecto.

0%

5%

10%

15%

20%

25%

30%

Error de la solución obtenida

Error E.Niveles raiz no forzada Error E.Niveles raíz forzada

Error E.Flujo Simple Error E.Flujo Múltiple

Page 53: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 53

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

6. BIBLIOGRAFÍA

1. Análisis de estrategias de modelado para la resolución del problema de Steiner en grafos

Trabajo Fin de Grado. Universidad de Sevilla

Autor: Daniel Guzmán Moreno

Tutor: José Manuel García Sánchez

Año: 2015

2. Resolución de Problemas. Librería de optimización. Métodos Cuantitativos de Gestión

Apuntes Asignatura Métodos de Optimización

Autor: José Manuel García Sánchez

Año: 2016

3. Optimal Trees

Chapter for the Handbooks in Operations Research and Managament Science

Autor: Thomas L.Magnanti y Laurence A. Wolsey

Año: 1994

4. Investigación operativa 2002. Software para programación lineal -LINGO/LINDO-

Autor: Erica Canizo y Paola Lucero

Año: 2002

5. Análisis de las estrategias antibucles de Miller-Tucker-Zemlin y Desrochers-Laporte para el

problema de Steiner en grafos

Proyecto Fin de Grado. Universidad de Sevilla.

Autor: Ignacio Castellano Jiménez

Tutor: José Manuel García Sánchez

Año: 2017

6. Estudio Experimental de Formulación de Flujo para Resolver el Problema de Steiner en Grafos

Trabajo Fin de Grado. Universidad de Sevilla

Autor: Antonio García Elías

Tutor: José Manuel García Sánchez

Año: 2017

7. Ficheros de texto en C

Apuntes de apoyo para la realización del programa en C

URL: http://www.chuidiang.org/clinux/ficheros/fichero-texto.php

8. Archivos de texto de los Enunciados de los Problemas de Steiner

URL: http://www.brunel.ac.uk/~mastjjb/jeb/info.html (OR-Library J E Beasley)

9. Tutoriales y códigos para programación en Visual Basic para Microsoft Excel

URL: https://exceltotal.com/

URL: https://www.todoexpertos.com/

Page 54: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 54

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

7. ANEXOS

7.1 Problema en formato .txt

Problema Steinb1.txt

13 19

1 5 7

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

4 5 6 7 8 10 11 13

41

Page 55: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 55

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

7.2 Tabla de óptimos de problemas tipo “b”

Problema Óptimo

steinb1 82

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

Listado de óptimos para los problemas de clase “b”.

Page 56: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 56

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

7.3 Código Visual Basic

En este apartado se tratará la programación usada tanto para importar los datos de cada uno de los problemas

que se encuentran en formato .txt y llevarlos a Excel para poder gestionar esa información y trabajar con ellas.

Tras analizar todos los datos del problema, es necesario crear el modelo de forma sencilla. Al tratarse de

muchos problemas es necesario crear un método para crear estos modelos en Lingo de forma lo más

automatizada posible.

7.3.1 Código para importar archivo .txt a Microsoft Excel

Public Sub ImportarArchivoTextoDelimitado( _

ByVal rango As Excel.Range, _

ByVal nombreArchivo As String, _

Optional ByVal caracterDelimitadorCampos As String = " ")

' Verificamos los parámetros pasados al procedimiento

'

If (rango Is Nothing) Then _

Err.Raise 91, _

"Importar archivo de texto", _

"El rango no es válido."

If (nombreArchivo = "") Then _

Err.Raise 1, _

"Importar archivo de texto", _

"No se ha especificado un nombre de archivo."

On Error GoTo ErrorImportarArchivoTextoDelimitado

' Referenciamos la hoja de cálculo a la

' que pertenece el rango especificado.

'

Page 57: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 57

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Dim ws As Excel.Worksheet

Set ws = rango.Worksheet

Dim table As Excel.QueryTable

Set table = ws.QueryTables.Add( _

"TEXT;" & nombreArchivo, ws.Cells(1, 1))

With table

.TextFileOtherDelimiter = caracterDelimitadorCampos

.Refresh False

End With

Set table = Nothing

Set ws = Nothing

Exit Sub

ErrorImportarArchivoTextoDelimitado:

' Devolvemos el error al procedimiento llamador

Err.Raise Err.Number

End Sub

'Suponiendo que tienes un archivo de texto delimitado por comas, ejecutarías tu macro para que llame al

procedimiento 'ImportarArchivoTextDelimitado' de la siguiente manera:

Sub Macro1()

Dim i As Integer

Dim j As Integer

Dim cadena As String

Dim a As String

Dim b As String

Page 58: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 58

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Dim c As String

' Importa un archivo de texto delimitado

' a la celda A1 de la hoja de cálculo

' llamada Hoja1.

'

On Error GoTo ErrorMacro1

Dim r As Excel.Range

Set r = Sheets("Auxiliartxt").Range("A1") 'hay que poner en SHEETS el nombre de la pestaña de la

hoja(Auxiliartxt), no la hoja5.

Dim fileName As String

cadena = "C:\Users\David Rubio\Desktop\Proyecto\ProblemasReducidos\"

a = cadena

b = Hoja1.Cells(15, 10)

c = ".txt"

cadena = a & b & c

fileName = cadena

'fileName = "C:\Users\David Rubio\Desktop\Proyecto\ProblemasReducidos\steinb5.txt"

ImportarArchivoTextoDelimitado r, fileName

Hoja1.Cells.Clear

Page 59: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 59

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

cadena = "Escribir nombre problema"

Hoja1.Cells(14, 10) = cadena

cadena = "Escribir número de periodos T"

Hoja1.Cells(16, 10) = cadena

Hoja1.Cells(15, 10).Interior.Color = RGB(255, 192, 0)

Hoja1.Cells(17, 10).Interior.Color = RGB(127, 127, 127)

For i = 1 To 500

For j = 1 To 100

'bucle copiar a primeras columnas

Hoja1.Cells(i, j) = Hoja5.Cells(i, j)

Next j

Next i

cadena = "Escribir nombre problema"

Hoja1.Cells(14, 10) = cadena

Hoja1.Cells(15, 10).Interior.Color = RGB(255, 192, 10)

cadena = "Escribir número de periodos T"

Hoja1.Cells(16, 10) = cadena

Hoja1.Cells(17, 10).Interior.Color = RGB(127, 127, 127)

Hoja1.Cells(15, 10) = b

Hoja5.Cells.Clear

Page 60: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 60

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Exit Sub

ErrorMacro1:

MsgBox Err.Description, vbExclamation, "Importar Archivo"

End Sub

Page 61: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 61

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

7.3.2 Código para crear matrices de adyacencia, Xij, costes y escribir

modelo en formato Lingo .lg4

Sub Programa()

Dim i As Integer

Dim j As Integer

Dim k As Integer

Dim l As Integer

Dim cont As Integer

Dim var As Integer

Dim a As String

Dim b As String

Dim c As String

Dim d As String

Dim e As String

Dim f As String

Dim longitudcadena As String

Dim nodos As Integer

Dim arcos As Integer

nodos = Hoja1.Cells(1, 1)

arcos = Hoja1.Cells(1, 2)

Hoja2.Cells.Clear

Hoja3.Cells.Clear

Hoja4.Cells.Clear

'BUCLE DE 1 Y 0 y costes en Hoja4

Dim cadena As String

j = 1

Do While j <= nodos

i = 2

Page 62: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 62

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Do While i < arcos + 2

If Hoja1.Cells(i, 1) = j Then

var = Hoja1.Cells(i, 2)

Hoja2.Cells(j, var) = 1

Hoja2.Cells(var, j) = 1 'No orientado

Hoja2.Cells(var, j).Interior.Color = RGB(0, 255, 255) 'No orientado

Hoja2.Cells(j, var).Interior.Color = RGB(0, 255, 0)

Hoja4.Cells(j, var) = Hoja1.Cells(i, 3).Value

Hoja4.Cells(var, j) = Hoja1.Cells(i, 3).Value 'No orientado

Hoja4.Cells(var, j).Interior.Color = RGB(0, 255, 255) 'No orientado

Hoja4.Cells(j, var).Interior.Color = RGB(0, 255, 0)

'Hoja1.Cells(j, 10 + j) = 1 'NO ORIENTADO

'Else

'Hoja1.Cells(j, 10 + var) = 0 'AÑADIDO CEROS

End If

i = i + 1

Loop

j = j + 1

Loop

For i = 1 To nodos

For j = 1 To nodos

If Hoja2.Cells(i, j) <> 1 Then

Hoja2.Cells(i, j) = 0

Hoja2.Cells(i, j).Interior.Color = RGB(0, 0, 255)

Hoja4.Cells(i, j) = 0

Hoja4.Cells(i, j).Interior.Color = RGB(0, 0, 255)

Page 63: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 63

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

End If

Next j

Next i

'NO ORIENTADO

'j = 1

'Do While j <= 5

'Hoja1.Cells(j, 10 + j) = 1

'j = j + 1

'Loop

'INTRODUCIR X

i = 1

Do While i <= nodos

j = 1

Do While j <= nodos

If Hoja2.Cells(i, j) = 1 Then 'LO QUITO PARA QUE ESTÉN LOS 0X11

a = i

b = j

c = "X"

'd = Hoja1.Cells(i, 10 + j) 'AÑADIDO PARA 0X12

Hoja3.Cells(i, j) = d & c & a & b

Hoja3.Cells(i, j).Interior.Color = RGB(0, 255, 0)

Else

Hoja3.Cells(i, j).Interior.Color = RGB(0, 0, 255)

End If

j = j + 1

Loop

i = i + 1

Loop

' concatenar X12 Y METER SUMAS

Page 64: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 64

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

For i = 1 To nodos

cadena = ""

For j = 1 To nodos

If Hoja3.Cells(i, j) <> "" Then

cadena = cadena & "+" & Hoja3.Cells(i, j).Value

End If

Next j

Hoja1.Cells(i, 5) = cadena

Next i

'quitar + y poner punto y coma final

j = 6

cadena = ""

For i = 1 To nodos

cadena = Hoja1.Cells(i, 5)

cadena = cadena & ">=1;"

longitudcadena = Len(cadena) 'eliminar + del principio

cadena = Right(cadena, longitudcadena - 1) 'eliminar + del principio

If cadena = "=1;" Then

cadena = ">=1;"

End If

Hoja1.Cells(i, j) = cadena

If Hoja1.Cells(i, j) = ">=1;" Then

Hoja1.Cells(i, j) = ""

End If

Next i

'escribir modelo antes de lingo

Page 65: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 65

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

cadena = ""

a = "Nodos/1.."

b = nodos

c = "/:Alfa,Terminal;"

cadena = a & b & c

Hoja1.Cells(1, 20) = cadena

cadena = ""

a = "Arcos(Nodos,Nodos)/"

For i = 2 To arcos + 1

b = Hoja1.Cells(i, 1)

c = Hoja1.Cells(i, 2)

d = " "

e = ","

cadena = cadena & b & d & c & e & c & d & b & e

Next i

longitudcadena = Len(cadena) 'eliminar + del principio

cadena = Left(cadena, longitudcadena - 1)

f = "/:X,Costes;"

cadena = a & cadena & f

Hoja1.Cells(2, 20) = cadena

cadena = "Periodos/1.."

a = Hoja1.Cells(17, 10)

b = "/;"

cadena = cadena & a & b

Hoja1.Cells(3, 20) = cadena

cadena = "Nodos_Periodos(Nodos,Periodos):Beta;"

Page 66: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 66

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Hoja1.Cells(4, 20) = cadena

cadena = "Costes="

a = ""

'k = 10 'prueba para ver que pasa con la longitud de la cadena

For i = 2 To arcos + 1

'For j = 1 To nodos 'lo quito para ver que pasa en lingo con el número de costes

a = Hoja1.Cells(i, 3) 'Originalmente a = Hoja4.Cells(i, j)

a = a & ","

cadena = cadena & a & a 'originalmente solo es "cadena = cadena & a"

'Hoja1.Cells(k, 20) = cadena

'Next j ''lo quito para ver que pasa en lingo con el número de costes

'k = k + 1

Next i

longitudcadena = Len(cadena)

cadena = Left(cadena, longitudcadena - 1)

cadena = cadena & ";"

Hoja1.Cells(5, 20) = cadena

cadena = "Terminal="

var = Hoja1.Cells(arcos + 2, 1)

For i = 1 To nodos

k = 0

For j = 1 To var

If Hoja1.Cells(arcos + 3, j) = i Then

Page 67: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 67

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

cadena = cadena & "1,"

k = 1

Else

End If

Next j

If k = 0 Then

cadena = cadena & "0,"

End If

Next i

longitudcadena = Len(cadena)

cadena = Left(cadena, longitudcadena - 1)

cadena = cadena & ";"

Hoja1.Cells(6, 20) = cadena

Dim numarchivo As Integer

Dim nombreArchivo As String

Dim linea As String

Dim t As Integer

Dim g As String

nodos = Hoja1.Cells(1, 1)

arcos = Hoja1.Cells(1, 2)

a = Hoja1.Cells(arcos + 4, 2)

b = "MIN=" & a & "+@SUM(Arcos(i,j):X*Costes);"

a = Hoja1.Cells(15, 10)

'c = "!Problema Steiner " & a & ";"

e = Hoja1.Cells(15, 10)

f = Hoja1.Cells(17, 10)

c = "!Problema Steiner " & a & " Periodos t=" & f & ";"

Page 68: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 68

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

d = "C:\Users\David Rubio\Desktop\Proyecto\Problemas-Periodos\"

d = d + e

d = d + "t"

d = d + f

d = d + ".lg4"

numarchivo = FreeFile

nombreArchivo = d

'nombreArchivo = "C:\Users\David Rubio\Desktop\Proyecto\V1.lg4"

Open nombreArchivo For Output As numarchivo

Print #numarchivo, c

Print #numarchivo, ""

Print #numarchivo, "MODEL:"

Print #numarchivo, ""

Print #numarchivo, "SETS:"

For i = 1 To 4

Print #numarchivo, Hoja1.Cells(i, 20)

Next i

Print #numarchivo, "ENDSETS"

Print #numarchivo, "DATA:"

For i = 5 To 6

Print #numarchivo, Hoja1.Cells(i, 20)

Next i

Print #numarchivo, "ENDDATA"

Print #numarchivo, b

Page 69: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 69

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

Print #numarchivo, "!Alfa(1)=1;!para la versión por niveles v2 donde el nodo raíz es forzado;"

Print #numarchivo, "@FOR(Nodos(i)|Terminal(i)#EQ#1: @SUM(Arcos(i,j):X(i,j))>=1-Alfa(i));"

Print #numarchivo, "@FOR(Nodos(i)|Terminal(i)#EQ#1: @SUM(Periodos(t):Beta(i,t))=1);"

Print #numarchivo, "@SUM(Nodos(i):Alfa(i)) <=1;"

Print #numarchivo, "@SUM(Nodos(i):Terminal(i)*Alfa(i)) <=1;"

Print #numarchivo, "@For(Periodos(t)|t#GT#1:@for(Arcos(i,j):x(i,j)+Beta(i,t)<=1+Beta(j,t-1)));"

Print #numarchivo, "@FOR(Nodos(i):Beta(i,1)=Alfa(i));"

Print #numarchivo, "@FOR(Nodos(i)|Terminal(i)#EQ#0:

@SUm(Arcos(i,j):x(i,j))>=@Sum(Nodos_Periodos(i,t):Beta(i,t)));"

Print #numarchivo, "@FOR(Nodos_Periodos(i,t): @Bin(Beta(i,t)));"

Print #numarchivo, "!@FOR(Nodos(i):@BIN(Alfa(i)));! para la versión por niveles v2 donde el nodo raíz es

forzado ;"

'Print #numarchivo, "@FOR(Nodos(i)|Terminal(i)#EQ#1:"

'Print #numarchivo, "@SUM(Arcos(i,j):X(i,j))>=1-Alfa(i));"

'Print #numarchivo, "@FOR(Nodos(i):@BIN(Alfa(i)));"

'Print #numarchivo, "@FOR(Nodos(i)|Terminal(i)#EQ#1:"

'Print #numarchivo, "@SUM(Periodos(t)|t#GT#1:Beta(i,t))=1);"

'j = 6

'For i = 1 To nodos

'Print #numarchivo, Hoja1.Cells(i, j)

'Print #numarchivo, ""

'Next i

Print #numarchivo, "END"

Close numarchivo

End Sub

Sub guardado()

nbre = Format(Now, "dd-mm-yy hh mm ss")

ruta = "C:\Users\David Rubio\Desktop\Proyecto\Autoguardado por fechas"

ActiveWorkbook.SaveCopyAs ruta & "\" & nbre & ".xls"

End Sub

Page 70: Proyecto Fin de Carrera - Universidad de Sevillabibing.us.es/proyectos/abreproy/5891/fichero/PFC-5891... · anÁlisis de las estrategias antibucles de miller-tucker- zemlin y desrochers-laporte

pág. 70

ANÁLISIS DE UNA FORMULACION POR NIVELES PARA MODELAR EL PROBLEMA DE STEINER EN GRAFOS

7.3.3 Modelo en formato Lingo .lg4

Modelo Steinb1 para 3 periodos

MODEL:

SETS:

Nodos/1..13/:Alfa,Terminal;

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/:X,Costes;

Periodos/1..3/;

Nodos_Periodos(Nodos,Periodos):Beta;

ENDSETS

DATA:

Costes=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;

Terminal=0,0,0,1,1,1,1,1,0,1,1,0,1;

ENDDATA

MIN=41+@SUM(Arcos(i,j):X*Costes);

!Alfa(1)=1;!para la versión por niveles v2 donde el nodo raíz es forzado;

@FOR(Nodos(i)|Terminal(i)#EQ#1: @SUM(Arcos(i,j):X(i,j))>=1-Alfa(i));

@FOR(Nodos(i)|Terminal(i)#EQ#1: @SUM(Periodos(t):Beta(i,t))=1);

@SUM(Nodos(i):Alfa(i)) <=1;

@SUM(Nodos(i):Terminal(i)*Alfa(i)) <=1;

@For(Periodos(t)|t#GT#1:@for(Arcos(i,j):x(i,j)+Beta(i,t)<=1+Beta(j,t-1)));

@FOR(Nodos(i):Beta(i,1)=Alfa(i));

@FOR(Nodos(i)|Terminal(i)#EQ#0:

@SUm(Arcos(i,j):x(i,j))>=@Sum(Nodos_Periodos(i,t):Beta(i,t)));

@FOR(Nodos_Periodos(i,t): @Bin(Beta(i,t)));

!@FOR(Nodos(i):@BIN(Alfa(i)))! para la versión por niveles v2 donde el nodo

raíz es forzado;

END