UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
MODELOS DE OPTIMIZACION DE REDES Los modelos de redes son aplicables a una extensa variedad de problemas de decisión, los cuales pueden ser modelados como problemas de optimización de redes que pueden ser eficiente y efectivamente resueltos. Algunos de estos problemas de decisión son realmente problemas físicos, tales como el transporte o flujo de bienes materiales, redes de comunicación, vuelos de los aeropuertos, rutas de navegación de los cruceros, estaciones de bombeo que transportan fluido a través de tuberías, rutas entre ciudades, redes de conductos y todas aquellas situaciones que puedan representarse mediante una red donde los nodos representan las estaciones o las ciudades, los arcos los caminos, las líneas aéreas, los cables, las tuberías y el flujo lo representan los camiones, mensajes y fluidos que pasan por la red. Con el objetivo de encontrar la ruta más corta si es una red de caminos o enviar el máximo fluido si es una red de tuberías. Sin embargo, muchos problemas de redes son más que una representación abstracta de procesos o actividades, tales como el camino crítico en las actividades entre las redes de un proyecto gerencial. La familia de redes de los problemas de optimización incluye los siguientes prototipos de modelos: Problemas de asignación, camino crítico, flujo máximo, camino más corto, transporte y costo mínimo de flujos. Los problemas son establecidos fácilmente mediante el uso de arcos de redes y de los nodos. Uno de los mayores desarrollos recientes en investigación de operaciones (IO) ha sido el rápido avance tanto en la metodología como en la aplicación de los modelos de optimización de redes. La aparición de algunos algoritmos ha tenido un impacto importante, al igual que las ideas de ciencias de la computación acerca de estructuras de datos y la manipulación eficiente de los mismos. En consecuencia, ahora se dispone de algoritmos y paquetes de computadora y se usan en forma rutinaria para resolver problemas muy grandes que no se habrían podido manejar hace dos o tres décadas. Cuando se trata de encontrar el camino más corto entre un origen y un destino, la técnica, algoritmo o el modelo adecuado es el de la ruta más corta; aunque existen otros modelos de redes como el árbol de expansión mínima, flujo máximo y flujo de costo mínimo cada uno abarca un problema en particular. En esta separata se mencionan los modelos de redes existentes y los problemas que abarca cada uno de ellos, además se describen los algoritmos que aplican estos modelos para encontrar la solución optima al problema. Utilizando la terminología utilizada para representarlos como una red.
NOTACIÓN Y TERMINOLOGÍA Definición de Red: Una red consiste en una serie de nodos(o vértices) enlazados con arcos (o ligaduras, aristas, o ramas). La notación para describir una red es (N, A), donde N es el conjunto de nodos y A es el conjunto de arcos. Por ejemplo, la red de la figura siguiente se describe como sigue: N = {1, 2, 3, 4, 5} A = {(1,2), (1,3), (2,3), (2,5), (3,4), (3,5), (4,2), (4,5)} Los arcos se etiquetan para dar nombres a los nodos en sus puntos terminales, por ejemplo, 13 es el arco entre los nodos 1 y 3. En un problema de programación lineal, las redes pueden representar un conjunto de estaciones, campos petrolíferos, almacenes, fabricas, sucursales, ciudades, interconectadas entre sí a través de caminos, conductos, tuberías que permiten fluir productos para la comercialización o la distribución. Ejemplo de una red (N, A)
Figura No 1: Representación de una red
Con cada red se asocia algún tipo de flujo (por ejemplo, flujo de productos petroleros en un oleoducto y flujos de tráfico de automóviles en carretearas). En general, el flujo en una red está limitado por la capacidad de sus arcos, que pueden ser finitos o infinitos. Modelos de Optimización de Redes
1
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Red de distribución: Una colección finita de nodos (cada uno de los cuales representa una planta, un almacén o una tienda detallista); un arco indica la posibilidad de enviar bienes entre los dos nodos conectados por el arco.
Red de flujo: Entendiendo una red de flujo como un grafo dirigido, donde la fuente es quien produce o inicia el traspaso de algún material o producto por los arcos, estos últimos, vistos como caminos o conductos y tomando en cuenta la ley de corrientes de Kirchoff, donde, la suma de flujos entrantes a un vértice debe ser igual a la suma de flujos saliendo del vértice.
Nodo: Es usualmente llamado vértice, o punto. Es usualmente representado por un círculo de una red de distribución. En las redes de distribución o transporte, estos deberían ser las localidades o las ciudades en un mapa, plantas, almacenes o tiendas al menudeo.
Arco: Es usualmente llamado borde o flecha. Línea de una red de distribución que conecta un par de nodos. Se le utiliza para representar una ruta válida desde el nodo de origen al nodo distribución. La cabeza es el destino, y la cola el origen. La cabeza y la cola son nodos que pueden estar tanto al origen como al final. En las redes de transporte, los arcos podrían ser los caminos, los canales de navegación en un río, o los patrones de vuelo de un avión. Los arcos proporcionan la conectividad entre los nodos. Una calle de una sola dirección podría ser representada por un arco, mientras que una calle de dos direcciones podría representada por un arco sin dirección o por dos arcos que apuntan a direcciones opuestas.
Arcos Dirigidos: Se dice que un arco es dirigido cuando el arco tiene flujo en una dirección (como en una calle de un sentido). La dirección se indica agregando una cabeza de flecha al final de la línea que representa el arco. Al etiquetar un arco dirigido con el nombre de los nodos que une, siempre se coloca primero al nodo de donde viene y después el nodo a donde va, esto es, un arco dirigido del nodo 1 al nodo 2 debe etiquetarse como 12 y no como 21. Otra Manera es 1 2.
Arcos no Dirigidos: Si el flujo a través de un arco se permite en ambas direcciones (como una tubería que se puede usar para bombear fluido en ambas direcciones), se dice que es un arco no dirigido. También se les llama ligadura. Aunque se permita que el flujo a través de un arco no dirigido ocurra en cualquier dirección, se supone que ese flujo será en una dirección, en la seleccionada, y no se tendrá flujos simultáneos en direcciones opuestas.
Ruta o Trayectoria: Es una sucesión de arcos distintos que unen dos nodos pasando por otros nodos, independientemente de la dirección de flujo de cada arco. Una colección de arcos formados por una serie de nodos adyacentes Los nodos están conectados si existe una ruta entre ellos.
Trayectoria Dirigida o Red Dirigida: Una trayectoria dirigida del nodo i al nodo j, es una sucesión de arcos cuya dirección (si la tienen) es hacia el nodo j, de manera que el flujo del nodo i al nodo j, a través de esta trayectoria es factible. Una red es dirigida si tiene todos sus arcos dirigidos.
Trayectoria no Dirigida o Red no Dirigida: Una trayectoria no dirigida del nodo i al nodo j es una sucesión de arcos cuya dirección (si la tienen) pueden ser hacia o desde el nodo j. Con frecuencia alguna trayectoria no dirigida tendrá algunos arcos dirigidos hacia el nodo j y otros desde él (es decir, hacia el nodo i).
Ciclo: Un ciclo se produce cuando al partir de un nodo por un cierto camino se vuelve al mismo nodo por otra ruta. Por ejemplo en la figura No 1, los arcos (2,3), (3,5) y (5,2) forman un bucle o circuito cerrado. Un ciclo es dirigido si consiste en una ruta dirigida, por ejemplo (2,3), (3,4) y (4,2) en la figura No 1. Red conectada es aquella en que cada dos nodos distintos están enlazados al menos por una ruta. La red de la figura es un ejemplo de este tipo.
Red Conexa: Una red conexa es una red en la que cada par de nodos está conectado. Se dice que dos nodos están conectados si la red contiene al menos una trayectoria no dirigida entre ellos. Se debe resaltar que no es necesaria que la trayectoria sea dirigida aun cuando la red sea dirigida. La figura No 1 representa una red conexa.
Árbol: Un grafo que no tiene ciclos y que conecta a todos los puntos, se llama un árbol. En un grafo con n vértices, los árboles tienen exactamente n - 1 aristas, y hay nn-2 árboles posibles. Su importancia radica en que los árboles son Modelos de Optimización de Redes
2
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
grafos que conectan todos los vértices utilizando el menor número posible de aristas. Un importante campo de aplicación de su estudio se encuentra en el análisis filogenético, el de la filiación de entidades que derivan unas de otras en un proceso evolutivo, que se aplica sobre todo a la averiguación del parentesco entre especies . Un árbol es una red conectada que puede consistir sólo en un subconjunto de todos los nodos en ella, donde no se permiten ciclos.
Figura No 2: Ejemplo de un árbol
Árbol de Expansión: es una red conexa para los n nodos, que contiene ciclos no dirigidos. Todo árbol de expansión tiene justo n-1 arcos, ya que este es el número mínimo de arcos necesarios para tener una red conexa y el máximo número posible para que no haya ciclos no dirigidos.
Flujo: Corresponde a la cantidad que debe transportarse desde un nodo i a un nodo j a través de un arco que los conecta. La siguiente notación es usada: Xij= cantidad de flujo Uij= cota mínima de flujo que se debe transportar Lij= cota máxima de flujo que se puede transportar.
Nodos adyacentes: Un nodo j es adyacente con un nodo i si existe un arco que une el nodo j con el nodo i. Ruta: Una colección de arcos formados por una serie de nodos adyacentes Los nodos están conectados si existe una ruta entre ellos.
Capacidad de Arco: Es la cantidad máxima de flujo (quizás infinito) que puede circular en un arco dirigido. Nodo Fuente: (o nodo de origen) tiene la propiedad de que el flujo que sale del nodo excede al flujo que entra a él. Nodo Demanda: (o nodo destino) es el caso contrario al nodo fuente, donde el flujo que llega excede al que sale de él.
Nodo de Trasbordo: (o nodo intermedio) satisface la conservación del flujo, es decir, el flujo que entra es igual al que sale.
La importancia de los modelos de redes: o o o
Muchos problemas comerciales pueden ser resueltos a través de modelos redes El resultado de un problema de redes garantiza una solución entera, dada su estructura matemática. No se necesitan restricciones adicionales para obtener este tipo de solución. Problemas de redes pueden ser resueltos por pequeños algoritmos, no importando el tamaño del problema, dada su estructura matemática.
Vista general de algunas aplicaciones prácticas de la optimización de redes 1. 2. 3.
Diseño de redes de telecomunicación (redes de fibra óptica, de computadores, telefónicas, de televisión por cable, etc.) Diseño de redes de transporte para minimizar el costo total de proporcionar las ligaduras (vías ferroviarias, carreteras, etc.) Diseño de una red de líneas de transmisión de energía eléctrica de alto voltaje.
Modelos de Optimización de Redes
3
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
4. 5. 6. 7. 8.
9.
Diseño de una red de cableado en equipo eléctrico (como sistemas de computo) para minimizar la longitud total del cable. Diseño de una red de tuberías para conectar varias localidades. Diseño de una red de tuberías de gas natural mar adentro que conecta fuentes del golfo de México con un punto de entrega en tierra con el objetivo de minimizar el costo de construcción. Determinación de la ruta más corta que une dos ciudades en una red de caminos existentes. Determinar la capacidad anual de máxima en toneladas de una red de conductos de pasta aguada de carbón que enlaza las minas carboneras de Wyoming con las plantas generadoras de electricidad Houston. (Los conductos de pasta aguada de carbón transportan éste bombeando agua a través de tubos adecuadamente diseñados que operan entre las minas de carbón y el destino deseado.) Determinación del programa de costo mínimo de los campos petrolíferos a refinerías y finalmente a los campos de distribución. Se pueden enviar petróleo crudo y productos derivados de la gasolina en buques tanque, oleoductos y/o camiones. Además de la disponibilidad de la oferta máxima en los campos petrolíferos y los requisitos de demanda mínima en los centros de distribución, deben tomarse en cuenta restricciones sobre la capacidad de las refinerías y los modos de transporte.
MODELOS DE REDES Los problemas de optimización de redes se pueden representar en términos generales a través de uno de estos cuatro modelos: o Problemas de transporte o Problemas de asignación o Modelo de la ruta más corta. (Algoritmo de Dijkstra, Algoritmo de Floyd-Warshall, Bellman-Ford, Algoritmo de Johnson) o Modelo de minimización de redes (Problema del árbol de mínima expansión: Algoritmo de Kruskal, Algoritmo de Prim). o Modelo del flujo máximo(Algoritmo de Ford-Fulkerson, Algoritmo de Edmonds-Karp) o Modelo del flujo del costo mínimo. o Camino critico en la planificación de Proyecto de Redes
MODELO DE LA RUTA MÁS CORTA En la Teoría de grafos, el problema de los caminos más cortos es el problema que consiste en encontrar un camino entre dos vértices (o nodos) de tal manera que la suma de los pesos de las aristas que lo constituyen es mínima. Un ejemplo es encontrar el camino más rápido para ir de una ciudad a otra en un mapa. En este caso, los vértices representan las ciudades, y las aristas las carreteras que las unen, cuya ponderación viene dada por el tiempo que se emplea en atravesarlas. Formalmente, dado un grafo ponderado (que es un conjunto V de vértices, un conjunto E de aristas y una función de variable real ponderada f: E → R) y un elemento v ∈ V encuentra un camino P de v a v' ∈ V, tal que:
Es el mínimo entre todos los caminos que conectan v y v'. El problema es también conocido como el problema de los caminos más cortos entre dos nodos, para diferenciarlo de la siguiente generalización: El problema de los caminos más cortos desde un origen en el cual tenemos que encontrar los caminos más cortos de un vértice origen v a todos los demás vértices del grafo. El problema de los caminos más cortos con un destino en el cual tenemos que encontrar los caminos más cortos desde todos los vértices del grafo a un único vértice destino, esto puede ser reducido al problema anterior invirtiendo el orden. El problema de los caminos más cortos entre todos los pares de vértices , el cual tenemos que encontrar los caminos más cortos entre cada par de vértices (v, v') en el grafo.
Algoritmos Los algoritmos más importantes para resolver este problema son: Algoritmo de Dijkstra, resuelve el problema de los caminos más cortos entre dos vértices, desde un origen y un único destino. Modelos de Optimización de Redes
4
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Algoritmo de Floyd - Warshall, resuelve el problema de los caminos más cortos entre todos los vértices. Algoritmo de Bellman - Ford, resuelve el problema de los caminos más cortos desde un origen si la ponderación de las aristas es negativa. Algoritmo de Búsqueda A, resuelve el problema de los caminos más cortos entre un par de vértices usando la heurística para intentar agilizar la búsqueda. Algoritmo de Johnson, resuelve el problema de los caminos más cortos entre todos los vértices y puede ser más rápido que el de Floyd - Warshall en grafos de baja densidad. Teoría perturbacional, encuentra en el peor de los casos el camino más corto a nivel local.
Problemas Relacionados El problema de viajante de comercio, es el problema que trata de encontrar el camino más corto que pasa sólo una vez por cada vértice y regresa al comienzo. A diferencia de los caminos más cortos, el cual puede ser resuelto en un tiempo polinomial en grafos sin ciclos negativos.
EL PROBLEMA DEL AGENTE VIAJERO El popular problema del agente viajero, como los demás de redes, involucra un conjunto de nodos y arcos que conectan todos los nodos. El objetivo es encontrar la forma de realizar una gira completa que conecte todos los nodos visitando sólo una vez cada nodo y minimizar o maximizar la distancia de la gira total (itinerario optimo desde un cierto punto de vista económico, tiempo mínimo, política de relaciones públicas, comodidad, etc.) y volver al punto de partida. Este modelo tiene múltiples aplicaciones en ingeniería. Este es un problema típico de fenómenos de organización y tiene consecuencias e implicaciones económicas y técnicas importantes. Formulación del El Problema del Agente Viajero (PAV) o Traveling Salesman Problem (TSP) El TSP presenta una gran facilidad para formularse, pero a medida que crece el número de ciudades, el tiempo para obtener una solución óptima crece más. Para formular el TSP como un problema de programación entera se usa la variable X ij que toma el valor de 1 si el arco (i, j) es usado, y el valor de 0 en cualquier otro caso. La formulación de este problema es la siguiente: { Cij = el costo asociado a la visita de la ciudad j después de visitar la ciudad i. Min z = ∑
∑
Sujeto a las siguientes restricciones, Para garantizar que se llega a cada ciudad exactamente una vez: ∑ (j= 1,2,……., n+1) Para garantizar que se sale de cada ciudad exactamente una vez: ∑ (i= 1,….., n) Por su gran facilidad para ser formulado y por su gran adaptabilidad a múltiples situaciones prácticas el TSP ha sido uno de los problemas de optimización que mayor interés ha despertado a los investigadores en las áreas de matemáticas discretas, computación e investigación de operaciones. La figura del ejemplo No 1 representa ciudades, en los nodos, y los valores en los arcos son las distancias que las separan. Definición del problema - Existen m nodos Modelos de Optimización de Redes
5
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
- Un costo unitario C ij es asociado al arco (i,j). El objetivo es encontrar el ciclo que minimice el costo total al visitar todos los nodos exactamente una vez Complejidad Escribir el modelo matemático y resolverlo resulta muchas veces incómodo, ya que un problema de 20 ciudades requiere de 500,000 restricciones. Ejemplo Desarrollado No 1: Problema del Controlador Se debe realizar una visita a cuatro oficinas locales de la empresa, partiendo de la oficina principal y volviendo a la misma, la cual está ubicada en Lima. Hacia la oficina Oficina1 Oficina2
Oficina principal (H)
De
Oficina principal (H) Oficina1 Oficina2 Oficina3 Oficina4
30 30 45 65 80
25 50 50
45 25 40 40
Oficina3
Oficina4
65 50 40
80 50 40 40 35
35
Tabla No 1: Datos del problema
Figura No 3: Tiempo en minutos para trasladarse de la oficina principal a cualquier oficina y entre oficinas
Solución - Identificación de los posibles ciclos. - Existen (m-1)1 ciclos posibles - Solo problemas pequeños pueden ser resueltos. - Se utiliza una combinación de problemas de asignación con la técnica Branch and Bound. - Problemas con menos de 20 nodos pueden ser resueltos en forma eficiente por este método. EL PROBLEMA DEL CONTROLADOR - Identificación de los posibles ciclos Ciclo Tiempo Total 1. H-O1-O2-O3-O4-H 210 2. H-O1-O2-O4-O3-H 195 3. H-O1-O3-O2-O3-H 240 4. H-O1-O3-O4-O2-H 200 5. H-O1-O4-O2-O3-H 225 6. H-O1-O4-O3-O2-H 200 7. H-O2-O3-O1-O4-H 265 8. H-O2-O1-O3-O4-H 235 9. H-O2-O4-O1-O3-H 250 10. H-O2-O1-O4-O3-H 220 11. H-O3-O1-O2-O4-H 260 12. H-O3-O1-O2-O4-H 260 Modelos de Optimización de Redes
6
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
SOLUCION CON WINQSB Hacer clic sobre el comando NetWork Modeling La opción Nuevo Problema (New Problem) generará la siguiente ventana:
Figura No 4: Primera ventana del WINQSB en blanco
Existen 7 modelos fundamentales para el tratamiento de los problemas que involucran redes con el fin de optimizar el uso de algún recurso, generalmente tratándose de la minimización de costos, tiempo o la maximización del flujo a través de una red. Estos modelos son: • Flujo en redes o modelo de trasbordo (Network Flow) • Problema de transporte (Transportation Problem) • Problema de asignación (Assignment Problem) • Problema de la ruta más corta (Shortest Path Problem) • Problema de flujo máximo (Maximal Flow Problem) • Árbol de mínima expansión (Minimal Spanning Tree) • Problema del agente viajero (Traveling Salesman Problem)
Figura No 5: Primera ventana del WINQSB con datos
Para modificar los nombres de los nodos pulsamos sobre Node Name en el menú Editar (Edit). Modifiquemos dichos nombre como se muestra a continuación: Figura No 6: Ventana en forma de matriz para los datos de entrada que son las distancias
Modelos de Optimización de Redes
7
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Datos de entrada para el problema del controlador Figura No 7: Ventana de opciones
En esta ventana marque la opción Branch And Bound Method
Figura No 8: Solución de WINQSB, una combinación de problema de asignación y la técnica Branch and Bound
Ejemplo Desarrollado No 2: Un viajero tiene que visitar cada una de las cuatro ciudades y lo quiere hacer de tal manera que visite una sola vez partiendo de la ciudad 1 y regresando al final del recorrido, viajando el menor tiempo posible, la siguiente tabla muestra los tiempos entre ciudades (horas):
De
1
2
3
4
1
0
1
5
4
2
7
0
3
1
3
5
3
0
2
4
4
1
2
0
De 1 2 3 4
1 X4 X7 X10
2 X1 X8 X11
3 X2 X5
4 X3 X6 X9
X12
Cada cuidad debe visitarse una sola vez. Planteamiento Modelos de Optimización de Redes
8
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
1 Sí pasa por la ciudad i a la j X ij = { 0 No pasa por la ciudad i a la j
Min Z = X1 + 5X2 + 4X3 + 7X4 + 3X5 + X6 + 5X7 + 3X8 + 2X9 + 4X10 + X11 + 2X12 Sujeto a: X1 + X2 + X3 = 1 X4 + X5 + X6 = 1 X7 + X8 + X9 = 1 X10 + X11 + X12 = 1 Limitación de salida
X4 + X7 + X10 = 1 X1 + X8 + X11 = 1 X2 + X5 + X12 = 1 X3 + X6 + X9 = 1 Limitación de llegada
Xij >= 0 Є Z Solución DS POM Ejecute DS POM, seleccione la opción programación lineal
Seleccione 8 restricciones y 12 variables y de clic en OK
Digite los datos en la matriz anterior y ejecute Solve
Modelos de Optimización de Redes
9
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Solución: Variable X1 = 1 X6 = 1 X7 = 1 X12 = 1 Total
Horas 1 1 5 2 9
Interpretación de resultados Par la interpretación de resultados regresamos al nombre original de las variables y obtener lo siguiente: Por lo tanto se dice que el recorrido será de siguiente manera: Pasa de la ciudad 1 a la 2 Pasa de la ciudad 2 a la 4 Pasa de la ciudad 4 a la 3 Pasa de la ciudad 3 a la 1 terminando donde se inició el recorrido. El tiempo mínimo usado asiendo este recorrido será de 9 horas.
Redes de flujo Los problemas relacionados con la comunicación de diferentes lugares, en donde existe la necesidad de enviar y /o recibir unidades (bienes, servicios, gente, información), se pueden analizar como modelos de red con flujo de tales unidades. La estructura matemática del modelo obtenido a partir de una red de flujo, es muy especial y ha facilitado el desarrollo de algoritmos de solución, específicos de esos problemas. La aplicación de dichos algoritmos de redes de flujo, es la oportunidad para comprobar su gran eficiencia en cuanto a labor de cálculo, comparados con el simplex que así se reconoce, eficiente y, además versátil. Ahora se presenta la aplicación de redes de flujo y algoritmos a problemas importantes en el transporte de unidades.
Teoría de grafos En matemáticas y en ciencias de la computación, la teoría de grafos (también llamada teoría de las gráficas) estudia las propiedades de los grafos (también llamadas gráficas). Un grafo es un conjunto, no vacío, de objetos llamados vértices (o nodos) y una selección de pares de vértices, llamados aristas (edges en inglés) que pueden ser orientados o no. Típicamente, un grafo se representa mediante una serie de puntos (los vértices) conectados por líneas (las aristas). Modelos de Optimización de Redes
10
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Diagrama de un grafo con 6 vértices y 7 aristas.
Vértice Los vértices constituyen uno de los dos elementos que forman un grafo. Como ocurre con el resto de las ramas de las matemáticas, a la Teoría de Grafos no le interesa saber qué son los vértices. Diferentes situaciones en las que pueden identificarse objetos y relaciones que satisfagan la definición de grafo pueden verse como grafos y así aplicar la Teoría de Grafos en ellos.
Grafo Un grafo es una pareja de conjuntos G = (V, A), donde V es el conjunto de vértices, y A es el conjunto de aristas, este último es un conjunto de pares de la forma (u, v) tal que, tal que. Para simplificar, notaremos la arista (a, b) como ab. En teoría de grafos, sólo queda lo esencial del dibujo: la forma de las aristas no son relevantes, sólo importa a qué vértices están unidas. La posición de los vértices tampoco importa, y se puede variar para obtener un dibujo más claro. Muchas redes de uso cotidiano pueden ser modeladas con un grafo: una red de carreteras que conecta ciudades, una red eléctrica o la red de drenaje de una ciudad.
Aristas dirigidas y no dirigidas
En algunos casos es necesario asignar un sentido a las aristas, por ejemplo, si se quiere representar la red d e las calles de una ciudad con sus direcciones únicas. El conjunto de aristas será ahora un subconjunto de todos los posibles pares ordenados de vértices, con (a, b) ≠ (b, a). Los grafos que contienen aristas dirigidas se denominan grafos orientados, como el siguiente: Las aristas no orientadas se consideran bidireccionales para efectos prácticos (equivale a decir que existen dos aristas orientadas entre los nodos, cada una en un sentido). En el grafo anterior se ha utilizado una arista que tiene sus dos extremos idénticos: es un lazo (o bucle), y aparece también una arista bidireccional, y corresponde a dos aristas orientadas. Aquí V = {a, b, c, d, e }, y A = { (a, c), (d, a), (d, e), (a, e), (b, e), (c, a), (c, c), (d, b) }. Se considera la característica de "grado" (positivo o negativo) de un vértice v (y se indica como (v)), como la cantidad de aristas que llegan o salen de él; para el caso de grafos no orientados, el grado de un vértice es simplemente la cantidad de aristas incidentes a este vértice. Por ejemplo, el grado positivo (salidas) de d es 3, mientras que el grado negativo (llegadas) de d es 0. Según la terminología seguida en algunos problemas clásicos de Investigación Operativa (p.ej.: el Problema del flujo máximo), a un vértice del que sólo salen aristas se le denomina fuente (en el ejemplo anterior, el vértice d); tiene grado negativo 0. Por el contrario, a aquellos en los que sólo entran aristas se les denomina pozo o sumidero (en el caso anterior, el vértice e); tiene grado positivo 0. Modelos de Optimización de Redes
11
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Caracterización de grafos Grafos simples Un grafo es simple si a lo sumo sólo 1 arista une dos vértices cualesquiera. Esto es equivalente a decir que una arista cualquiera es la única que une dos vértices específicos. Un grafo que no es simple se denomina Multigráfica o Grafo múltiple.
Grafos conexos Un grafo es conexo si cada par de vértices está conectado por un camino; es decir, si para cualquier par de vértices (a, b), existe al menos un camino posible desde a hacia b. Un grafo es fuertemente conexo si cada par de vértices está conectado por al menos dos caminos disjuntos; es decir, es conexo y no existe un vértice tal que al sacarlo el grafo resultante sea disconexo. Es posible determinar si un grafo es conexo usando un algoritmo Búsqueda en anchura (BFS) o Búsqueda en profundidad (DFS). En términos matemáticos la propiedad de un grafo de ser (fuertemente) conexo permite establecer en base a él una relación de equivalencia para sus vértices, la cual lleva a una partición de éstos en "componentes (fuertemente) conexas", es decir, porciones del grafo, que son (fuertemente) conexas cuando se consideran como grafos aislados. Esta propiedad es importante para muchas demostraciones en teoría de grafos.
Grafos completos Un grafo es completo si existen aristas uniendo todos los pares posibles de vértices. Es decir, todo par de vértices (a, b) debe tener una arista e que los une. El conjunto de los grafos completos es denominado usualmente
, siendo
el grafo completo de n vértices.
Un K n, es decir, grafo completo de n vértices tiene exactamente aristas. La representación gráfica de los K n como los vértices de un polígono regular da cuenta de su peculiar estructura.
Grafos ponderados o etiquetados En muchos casos, es preciso atribuir a cada arista un número específico, llamado valuación, ponderación o coste según el contexto, y se obtiene así un grafo valuado. Formalmente, es un grafo con una función v: A → R+. Por ejemplo, un representante comercial tiene que visitar n ciudades conectadas entre sí por carreteras; su interés previsible será minimizar la distancia recorrida (o el tiempo, si se pueden prever atascos). El grafo correspondiente tendrá como vértices las ciudades, como aristas las carreteras y la valuación será la distancia entre ellas. Y, de momento, no se conocen métodos generales para hallar un ciclo de valuación mínima, pero sí para los caminos desde a hasta b, sin más condición.
ALGORITMO DE DIJKSTRA El algoritmo de Dijkstra, también llamado algoritmo de caminos mínimos, es un algoritmo para la determinación del camino más corto dado un vértice origen al resto de vértices en un grafo dirigido y con pesos en cada arista. Su nombre se refiere a Edsger Dijkstra, quien lo describió por primera vez en 1959. La idea subyacente en este algoritmo consiste en ir explorando todos los caminos más cortos que parten del vértice origen y que llevan a todos los demás vértices; cuando se obtiene el camino más corto desde el vértice origen, al resto de vértices que componen el grafo, el algoritmo se detiene. El algoritmo es una especialización de la búsqueda de costo uniforme, y como tal, no funciona en grafos con aristas de costo negativo (al elegir siempre el nodo con distancia menor, pueden quedar excluidos de la búsqueda nodos que en próximas iteraciones bajarían el costo general del camino al pasar por una arista con costo negativo).
Algoritmo Teniendo un grafo dirigido ponderado de N nodos no aislados, sea x el nodo inicial, un vector D de tamaño N guardará al final del algoritmo las distancias desde x al resto de los nodos. Modelos de Optimización de Redes
12
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
1. 2. 3. 4.
5. 6. -
Inicializar todas las distancias en D con un valor infinito relativo ya que son desconocidas al principio, exceptuando la de x que se debe colocar en 0 debido a que la distancia de x a x sería 0. Sea a = x (tomamos a como nodo actual). Recorremos todos los nodos adyacentes de a menos los nodos marcados, llamaremos a estos v i. Si la distancia desde x hasta vi guardada en D es mayor que la distancia desde x hasta a sumada a la distancia desde a hasta vi; esta se substituye con la segunda nombrada, esto es: si (D i > D a + d(a,vi)) entonces D i = D a + d(a, vi) Marcamos como completo el nodo a. Tomamos como próximo nodo actual el de menor valor en D (puede hacerse almacenando los valores en una cola de prioridad) y volvemos al paso 3 mientras existan nodos no marcados. Una vez terminado al algoritmo, D estará completamente lleno.
ALGORITMO DE DIJKSTRA PARA RUTA MÍNIMA EN RED ORIENTADA Condiciones: Se aplica en una red estrictamente orientada, entendiendo que cada una de sus ramas es unidireccional y ningún conjunto, de ramas incluidas, forma ciclo. También se utiliza una etiqueta que puede ser de carácter temporal, o bien permanente, para cada uno de los nodos graficados. Algo para anotar es que, una red, con todas sus ramas unidireccionales, ya tiene definido el nodo origen. Los pasos a seguir del algoritmo de Dijkstra son: 1. El nodo origen siempre se etiqueta permanente así: (-, 0) P 2. Enseguida debe etiquetarse permanente aquel nodo que tenga como único inverso al origen: ( # del origen, costo cero + costo desde el origen ) P 3. A partir de los nodos con permanencia deben etiquetarse en forma temporal, los que sean nodos vecinos directos conectados a los mismos. Luego se revisan las temporales, con el propósito de eliminar la etiqueta duplicada y mantener una sola ( la que tenga el menor costo), para cada nodo directo. 4. Convertir a permanente, aquel nodo que tenga todos sus nodos vecinos inversos con etiqueta permanente. En caso de empate en menor costo, se deben considerar todas las etiquetas que cumplan tal condición. 5. Se repite el procedimiento desde el paso 3, hasta que todos los nodos tengan etiqueta permanente. 6. Las rutas mínimas para cada uno de los nodos, se definen con la identificación del nodo inmediato anterior de la ruta en el lado izquierdo de la etiqueta permanente, retrocediendo hacia el origen conforme a lo indicado. El proceso se completa señalando las n-1 rutas calculadas, tanto en la red como en una tabla.
Aplicaciones del Algoritmo de Dijkstra Problema Desarrollado No 3: De ruta mínima Definición: Dada una red de n nodos ( i ) conectadas por ramas ( i, j ), asociadas a un costo Cij; el objetivo es determinar n-1 rutas mínimas, desde un nodo ( i ) fijado como origen, hasta los restantes n-1 nodos.
Figura No 9: Datos del problema No 3
La red de la figura anterior muestra las rutas con sus longitudes, en Km, entre la ciudad 1(nodo 1) y otras ciudades (nodos 2 a 5): Determinar las rutas más cortas entre la ciudad 1 y cada una de las cuatro ciudades restantes. Iteración 0: Asignar la etiqueta permanente [0, -] al nodo 1
Modelos de Optimización de Redes
13
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Figura No 10: Iteración 0
Iteración 1: Se puede llegar a los nodos 2, 3 y 5 desde el nodo 1 (último que se etiquetó en forma permanente). Así, la lista de los nodos etiquetados (temporales y permanentes) es la siguiente: Nodo Etiqueta Estado 1 [0, -] Permanente 2 [2, 1] Temporal 3 [1, 1] Temporal 5 [3, 1] Temporal Para las tres etiquetas temporales [2,1], [1,1] y [3,1], el nodo 3 produce la menor distancia (u3 = 1). Entonces, se cambia el estado del nodo 3 a permanente.
Figura No 11: Iteración 1
Iteración 2: Del nodo 3 se puede ir a los nodos 5 y 2, y la lista de nodos etiquetados es: Nodo Etiqueta Estado 1 [0, -] Permanente 2 [2, 1], [2,3] Temporal 3 [1, 1] Permanente 5 [3, 1], [2, 3] Temporal El estado de la etiqueta temporal [2,3] en el nodo 2 se cambia a permanente (u 2 = 2). Observe que también empata el nodo 5 con una etiqueta [2,3].
Figura No 12: Iteración 2
Iteración 3: Del nodo 2 se puede ir al nodo 4. Entonces la lista actualizada de los nodos etiquetados es: Nodo Etiqueta Estado 1 [0, -] Permanente 2 [2,3] Permanente 3 [1, 1] Permanente Modelos de Optimización de Redes
14
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
5 4
[2, 3] [6, 2]
Temporal Temporal
Figura No 13: Iteración 3
La etiqueta temporal del nodo 5, [2,3], en una ruta más corta que pasa por el nodo 5. Nodo Etiqueta Estado 1 [0, -] 2 [2,3] 3 [1, 1] 5 [2, 3] 4 [6, 2]
la iteración 3 se cambia a permanente, para indicar que se ha encontrado
Permanente Permanente Permanente Permanente Temporal
Figura No 14: Iteración 4
Iteración 4: Del nodo 5 no se puede ir a convierte en permanente. Nodo Etiqueta Estado 1 [0, -] 2 [2,3] 3 [1, 1] 5 [2, 3] 4 [6, 2]
ningún nodo, pero el nodo 4 tiene una etiqueta temporal, por tanto se
Permanente Permanente Permanente Permanente Permanente
Aplicación del Algoritmo de Dijkstra Problema Desarrollado No 4: La red en la figura proporciona las rutas permisibles y sus longitudes en km entre la ciudad 1 (nodo 1) y otras cuatro ciudades (nodos 2 al 5). Se desea determinar las rutas más cortas de la ciudad 1 a cada una de las cuatro ciudades restantes. Iteración 0: Asignar la clasificación permanente [0, -] al nodo 1
Modelos de Optimización de Redes
15
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Figura No 15: Datos del problema No 4
Iteración 0: Asignar la clasificación permanente [0, -] al nodo 1 Iteración 1: Es posible llegar a los nodos 2 y 3 desde el nodo 1 (el último clasificado permanentemente)
Iteración 2: Se puede llegar a los nodos 4 y 5 desde el nodo 3 (el último clasificado permanente)
Iteración 3: Se puede llegar a los nodos 2 y 5 desde el nodo 4 (el último clasificado permanente)
Iteración 4: Solo se puede llegar al nodo 3 desde el nodo 2. Sin embargo, debido a que el nodo 3 está clasificado permanentemente, no se puede volver a clasificar. La nueva lista de clasificaciones permanece igual que en la iteración 3, excepto que la clasificación en el nodo 2 es permanente. Esto deja al nodo 5 como la única clasificación temporal. Debido a que el nodo 5 no lleva a otros nodos, su status se convierte a permanente y el proceso termina. La ruta más corta entre el nodo 1 y el nodo 2 se obtiene así: 2 4 3 1 (2) [55,4] (4) [40,3] (3) [30, 1] (1)
Ejercicios propuestos
Problema Propuesto No 1: En la siguiente red orientada de 7 nodos (Figura No 16), determinar las rutas mínimas desde el origen O hacia los restantes nodos, utilizando el algoritmo de Dijkstra. También utilice el software Grafos
Modelos de Optimización de Redes
16
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Figura No 16: Red del problema propuesto No 1
Problema Propuesto No 2: Ruta mínima, aplicar algoritmo de Dijkstra. La siguiente red (Figura No 17) es no orientada, con un total de ocho nodos de los cuales se fija como origen al nodo 8. Determine las rutas mínimas desde el origen hasta los 8 - 1 = 7 nodos restantes, utilizando el algoritmo de Dijkstra. Figura No 17: Red del problema propuesto No 2
Problema Propuesto No 3: Como ejercicio para el estudiante, considere la red ejemplo anterior con los mismos costos Cij asociados a las ramas. Pero en este caso se considera al nodo No 6, como origen, lo cual produce un problema diferente, que podrá comprobar con sus resultados y los anotados en la red correspondiente.
Problema Propuesto No 4: Aplicar el algoritmo de Dijkstra a la siguiente Red:
Figura No 18: Red del problema propuesto No 4
Problema Propuesto No 5: Determine la ruta mínima, aplicando el algoritmo Dijkstra, desde el nodo 1 fijado como origen y el 8 como destino en la siguiente red:
Modelos de Optimización de Redes
17
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Figura No 19: Red del problema propuesto No 5
Respuesta problema No 5: Rutas mínimas, red no orientada, algoritmo de Dijkstra.
ALGORITMO DE FLOYD-WARSALL: CAMINOS MINIMOS ENTRE POSIBLES PARES DE NODOS DE UNA RED En informática, el algoritmo de Floyd-Warshall, descrito en 1959 por Bernard Roy, es un algoritmo de análisis sobre grafos para encontrar el camino mínimo en grafos dirigidos ponderados. El algoritmo encuentra el camino entre todos los pares de vértices en una única ejecución. El algoritmo de Floyd-Warshall es un ejemplo de programación dinámica.
Algoritmo El algoritmo de Floyd-Warshall compara todos los posibles caminos a través del grafo entre cada par de vértices. El algoritmo es capaz de hacer esto con sólo V3 comparaciones (esto es notable considerando que puede haber hasta V2 aristas en el grafo, y que cada combinación de aristas se prueba). Lo hace mejorando paulatinamente una estimación del camino más corto entre dos vértices, hasta que se sabe que la estimación es óptima. Sea un grafo G con conjunto de vértices V, numerados de 1 a N. Sea además una función camino Mínimo (i, j, k) que devuelve el camino mínimo de i a j usando únicamente los vértices de 1 a k como puntos intermedios en el camino. Ahora, dada esta función, nuestro objetivo es encontrar el camino mínimo desde cada i a cada j usando únicamente los vértices de 1 hasta k + 1. Hay dos candidatos para este camino: un camino mínimo, que utiliza únicamente los vértices del conjunto (1...k); o bien existe un camino que va desde i hasta k + 1, después de k + 1 hasta j que es mejor. Sabemos que el camino óptimo de i a j que únicamente utiliza los vértices de 1 hasta k está definido por camino Mínimo(i, j, k), y está claro que si hubiera un camino mejor de i a k + 1 a j, la longitud de este camino sería la concatenación del camino mínimo de i a k + 1 (utilizando vértices de (1...k)) y el camino mínimo de k + 1 a j (que también utiliza los vértices en (1...k)). Por lo tanto, podemos definir camino Mínimo (i, j, k) de forma recursiva: Camino Mínimo (i, j, k)=min (camino Mínimo (i,j,k-1), camino Mínimo(i, k, k-1)+camino Mínimo(k,j,k-1));
Camino Mínimo (i, j, 0) = peso Arista (i, j) Esta fórmula es la base del algoritmo Floyd-Warshall. Funciona ejecutando primero camino Mínimo (i,j,1) para todos los pares (i, j), usándolos para después hallar camino Mínimo(i,j,2) para todos los pares (i, j)... Este proceso continúa hasta que k = n, y habremos encontrado el camino más corto para todos los pares de vértices (i, j) usando algún vértice intermedio.
Modelos de Optimización de Redes
18
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Comportamiento con ciclos negativos Para que haya coherencia numérica, Floyd-Warshall supone que no hay ciclos negativos (de hecho, entre cualquier pareja de vértices que forme parte de un ciclo negativo, el camino mínimo no está bien definido porque el camino puede ser infinitamente pequeño). No obstante, si hay ciclos negativos, Floyd-Warshall puede ser usado para detectarlos. Si ejecutamos el algoritmo una vez más, algunos caminos pueden decrementarse pero no garantiza que, entre todos los vértices, caminos entre los cuales puedan ser infinitamente pequeños, el camino se reduzca. Si los números de la diagonal de la matriz de caminos son negativos, es condición necesaria y suficiente para que este vértice pertenezca a un ciclo negativo. Este algoritmo proporciona las distancias y caminos mínimos entre todos los posibles pares de nodos de la red. El algoritmo de Floyd es más general que el de Dijkstra, porque determina la ruta más corta entre dos nodos cualesquiera de la red. El algoritmo representa una red de n nodos como matriz cuadrada con n renglones y n columnas. El elemento (i, j) de la matriz expresa la distancia o valor d ij del nodo i al nodo j, que es finita si i está conectado directamente con j, e infinita en caso contrario.
El concepto del algoritmo de Floyd es directo. Dados tres nodos i, j y k en la figura anterior, con las distancias entre si indicadas en los tres arcos, es más corto ir a k desde i pasando por j si
dij + djk < dik En este caso, lo óptimo es reemplazar la ruta directa de i k por la ruta indirecta i j k. Este intercambio de operación triple se aplica en forma sistemática a la red, con los siguientes pasos: Paso 0: Definir las matrices iníciales de distancias D0 y de secuencias de nodos S0 como se describe abajo. Los elementos diagonales se marcan con (--) para indicar que están bloqueadas. Igualar k = i. …
j
…
n
d1j
…
d1n
…
d2j
…
d2n
…
…
…
…
di1 di2 … … … … dn1 dn2 …
… … dnj
… … …
din … ―
1
2
1
―
d12 …
2
d21 ― …
Do = … i … n
…
2
… j
… n
1
― 2
… j
… n
2
1
― … j
… n
1
So = … … … … … … … i
1
2
… j
… n
… … … … … … … n
1
2
… j
Modelos de Optimización de Redes
… ― 19
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Paso general k: Definir el renglón k y la columna k como renglón pivote y columna pivote. Aplicar la operación triple a cada elemento dij en Dk-1 para toda i y j. Si se satisface la condición
dik + dkj < dij (i k, j
k e i
j)
Hacer los siguientes cambios a) Crear Dk reemplazando dij en Dk-1 por dik + dkj b) Crear Sk reemplazando sij en Sk-1 por k. Igualar k = k + 1 y repetir el paso k.
Figura No 18: Implementación de la operación triple en forma matricial Se puede explicar el paso k del algoritmo representando a D k-1 como se ve en la figura No . Aquí, el renglón k y la columna k definen el renglón y la columna pivote actual. El renglón i representa cualesquiera de los renglones 1, 2, …, y k – 1, y el renglón p representa cualesquiera de los renglones k+1, k+2, …, y n. De igual modo, la columna j representa cualquiera de las columnas 1, 2,…, y k-1, y la columna q representa cualquiera de las columnas k+1, k+2,… y n. Con la operación triple, si la suma de los elementos del renglón pivote y la columna pivote (representado por cuadrados) es menor que el elemento de intersección asociado (representado por un círculo), entonces es óptimo reemplazar la distancia de intersección por la suma de las distancias pivote. Después de n pasos se puede determinar la ruta más corta entre los nodos i y j con las matrices Dn y S n con las siguientes reglas: 1. 2.
En Dn, dij representa la distancia más corta entre los nodos i y j. En Sn, se determina el nodo intermedio k = sij que forme la ruta i k j. Si S ik = k y skj = j, detenerse; todos los nodos intermedios de la ruta se han determinado. En caso contrario, repetir el procedimiento entre los nodos i y k y entre los nodos k y j.
Otra forma de aplicar este algoritmo Al valor de los arcos lo denominaremos Cij, que indicará el valor del arco que va del nodo i al nodo j. Si no existe el arco que va de la i a j: Cij = Se forma una matriz, C, cuyos elementos son los Cij y otra matriz D, cuyos elementos son los nodos del grafo y que está construida como sigue: Si se tienen n nodos, la dimensión de la matriz D será de: nxn. Para inicializar la matriz cada fila se rellena con el identificador del nodo correspondiente. Si la red tiene los nodos 1, 2, 3, 4 y 5:
Modelos de Optimización de Redes
20
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
En estas condiciones la matriz C proporcionara las distancias y la matriz D los caminos. El algoritmo sigue los siguientes pasos: Paso 1: Se forman las matrices C y D. Paso 2: Se selecciona la fila 1 y la columna 1 de la matriz C. Para todo i, j 1 Cij = min [ ( )] Si (C i1 + C1j) < Cij entonces dij = d1j Paso 3: Se reitera el paso 2 seleccionando la fila k y la columna k. Paso 4: Se termina el algoritmo cuando k coincide con el número de nodos del grafo. Los elementos de la matriz C son las distancias entre los nodos. Con los elementos de la matriz D se obtiene el camino existente entre el nodo i y el nodo j de la siguiente forma: En el elemento dij de la matriz D el nodo 1 es el predecesor del nodo j. Si 1 = i ya se ha obtenido el camino; si no, miramos el elemento di1 que será el predecesor de 1. Terminaremos cuando de encuentre en la matriz el nodo i.
Problema Desarrollado No 5: Para la red en la figura, encuentre las rutas más cortas entre cada dos nodos. Las distancias se dan en los arcos. El arco (3,5) es direccional, de manera que no está permitido ningún tráfico del nodo 5 al nodo 3. Todos los demás arcos permiten el tráfico en ambas direcciones. Figura No 20: Red del problema desarrollado No 5
Modelos de Optimización de Redes
21
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Las matrices D0 y S0 son la representación inicial de la red. D0 es simétrica, excepto que d 53 = permite trafico del nodo 5 al nodo 3.
porque no se
Iteración 1: Se iguala k = 1. El renglón y la columna pivotes se ven en la matriz D 0 con sombra ligera: son el primer renglón y la primera columna: Las celdas más oscuras, d 23 y d32 son las únicas que pueden mejorar con la operación triple. Así, D1 y S1 se obtienen partiendo de D0 y S0 como sigue: 1. Sustituir d23 con d21 + d13 = 3+ 10 = 13, e igualar s23 = 1 2. Sustituir d32 con d31 + d12 = 10 + 3 = 13, e igualar s32 = 1 Estos cambios se muestran en negritas, en las matrices D1 y S1
Modelos de Optimización de Redes
22
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Iteración 2: Se iguala k = 2, como indican el renglón y la columna con sombra ligera en D 1. Se aplica la operación triple a las celdas más oscuras de D1 y S1. Los cambios que resultan se indican con negritas en D 2 y en S2.
Modelos de Optimización de Redes
23
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Iteración 3: Se iguala k = 3, como indican el renglón y la columna sombreadas en D 2. Las nuevas matrices son D3 y S3.
Modelos de Optimización de Redes
24
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Iteración 4: Se iguala k = 4 como se indica con el renglón y la columna con sombra ligera en D 3. Las nuevas matrices son D4 y S4.
Modelos de Optimización de Redes
25
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Iteración 5: Se iguala k = 5, como se ve en el renglón y la columna sombreada de D4. No hay más mejoras posibles en esta iteración. Por consiguiente, D5 y S5 son iguales que D4 y S4.
Modelos de Optimización de Redes
26
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Las matrices finales D5 y S5 contienen toda la información necesaria para determinar la ruta más corta entre dos nodos cualesquiera de la red. Por ejemplo para determinar la ruta más corta del nodo 1 al nodo 5, primero se ve la distancia asociada d15 = 12. Para determinar la ruta asociada, recuérdese que un segmento (i, j) representa un enlace directo sólo si sij = j. En caso contrario, i y j están enlazados mediante al menos un nodo intermedio. Como s15 = 4, la ruta inicial es 1 4 5. Ahora bien, como s14 = 2 4, el segmento (1,4) no es un enlace directo y 1 4 se debe reemplazar por 1 2 4, y la ruta 1 4 5 se transforma ahora en 1 2 4 5. A continuación, como s12 = 2, s24 = 4 y s45 = 5, la ruta 1 2 4 5 no necesita más ―disecciones‖ y el proceso termina.
Solución con DS POM
Ejecute DS POM Seleccione la opción Networks
Seleccione la opción New
Modelos de Optimización de Redes
27
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Seleccione la opción Shortest Route
Digite el título y seleccione el número de arcos, para este caso hay 11 (tenga en cuenta que el arco sin flechas quiere decir que es de doble sentido, excepto el que va de 3 a 5, es de 1 solo sentido) Haga clic en OK, se presentara el siguiente cuadro donde debe digitar el inicio y fin del arco, así como su distancia respectiva.
A continuación haga clic en Solve
Modelos de Optimización de Redes
28
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Este cuadro es igual que el cuadro de distancias calculado anteriormente
Ejemplo Desarrollado No 6: Ejercicios propuestos
Problema Propuesto No 1: Aplique el algoritmo de Floyd a la red de la figura No 20. Los arcos (7,6) y (6,4) son unidireccionales y todas las distancias son en Km. Determine la ruta más corta entre los siguientes pares de nodos: a) Del nodo 1 al nodo 7. b) Del nodo 7 al nodo 1. c) Del nodo 6 al nodo 7. Figura No 21: Red del problema propuesto No 1
Problema Propuesto No 2: Aplique el algoritmo de Floyd, para encontrar la distancia más corta del origen al destino de la siguiente red.
Figura No 22: Red del problema propuesto No 2
Problema Propuesto No 3: Desarrolle la siguiente red, aplicando el algoritmo de Floyd
5
2
2 2
Modelos de Optimización de Redes
6 2
2
2 2
2
3
1
2 2
Figura No 23: Red del problema propuesto No 3
4 29
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Problema Propuesto No 4. Una empresa química fabrica 5 compuestos diferentes. Debido a economías de escala, cada compuesto es producido una sola vez al día. Los costes que se generan no solo dependen de las materias primas usadas para generar cada compuesto, sino que también de la secuencia elegida para generarlos. Debido a que cada compuesto deja algunas impurezas que afectan a la calidad de los siguientes productos a generar, y que esta pérdida de calidad tiene algunos costes asociados, se desea encontrar el plan diario de producción de los compuestos con un coste mínimo. Los costes en euros se indican en la siguiente matriz C, el valor cij es el coste cuando se pasa de producir el compuesto i a producir el compuesto j:
Problema Propuesto No 5. Mediante el algoritmo de Floyd, encuentre el camino mínimo del nodo H al resto de nodos.
ALGORITMO DE BELLMAN-FORD El algoritmo de Bellman-Ford (algoritmo de Bell-End-Ford), genera el camino más corto en un Grafo dirigido ponderado (en el que el peso de alguna de las aristas puede ser negativo). El algoritmo de Dijkstra resuelve este mismo problema en un tiempo menor, pero requiere que los pesos de las aristas no sean negativos. Por lo que el Algoritmo Bellman-Ford normalmente se utiliza cuando hay aristas con peso negativo. Este algoritmo fue desarrollado por Richard Bellman, Samuel End y Lester Ford. Según Robert Sedgewick, ―Los pesos negativos no son simplemente una curiosidad matemática; […] surgen de una forma natural en la reducción a problemas de caminos más cortos‖, y son un ejemplo de una reducción del problema del camino hamiltoniano que es NP-completo hasta el problema de caminos más cortos con pesos generales. Si un grafo contiene un ciclo de coste total negativo entonces este grafo no tiene solución. El algoritmo es capaz de detectar este caso. Si el grafo contiene un ciclo de coste negativo, el algoritmo lo detectara, pero no encontrará el camino más corto que no repite ningún vértice. La complejidad de este problema es al menos la del problema del camino más largo de complejidad NP-Completo. Modelos de Optimización de Redes
30
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Algoritmo El Algoritmo de Bellman-Ford es, en su estructura básica, muy parecido al algoritmo de Dijkstra, pero en vez de seleccionar vorazmente el nodo de peso mínimo aun sin procesar para relajarlo, simplemente relaja todas las aristas, y lo hace |V|-1 veces, siendo |V| el numero de vértices en el grafo. Las repeticiones permiten a las distancias mínimas recorrer el árbol, ya que en la ausencia de ciclos negativos, el camino más corto solo visita cada vértice una vez. A diferencia de la solución voraz, la cual depende de la suposición de que los pesos sean positivos, esta solución se aproxima más al caso general. Existen dos versiones: Versión no optimizada para grafos con ciclos negativos, cuyo coste de tiempo es O(VE) Versión optimizada para grafos con aristas de peso negativo, pero en el grafo no existen ciclos de coste negativo, cuyo coste de tiempo, es también O(VE). Aplicaciones de encaminamiento Una variante distribuida del Algoritmo del Bellman-Ford se usa en protocolos de encaminamiento basados en vector de distancias, por ejemplo el Protocolo de encaminamiento de información (RIP). El algoritmo es distribuido porque envuelve una serie de nodos (routers) dentro de un Sistema autónomo(AS), un conjunto de redes y dispositivos router IP administrados típicamente por un Proveedor de Servicio de Internet (ISP). Se compone de los siguientes pasos: 1. Cada nodo calcula la distancia entre él mismo y todos los demás dentro de un AS y almacena esta información en una tabla. 2. Cada nodo envía su tabla a todos los nodos vecinos. 3. Cuando un nodo recibe las tablas de distancias de sus vecinos, éste calcula la ruta más corta a los demás nodos y actualiza su tabla para reflejar los cambios. Las desventajas principales del algoritmo de Bellman-Ford en este ajuste son: No escala bien Los cambios en la topología de red no se reflejan rápidamente ya que las actualizaciones se distribuyen nodo por nodo. Contando hasta el infinito(si un fallo de enlace o nodo hace que un nodo sea inalcanzable desde un conjunto de otros nodos, éstos pueden estar siempre aumentando gradualmente sus cálculos de distancia a él, y mientras tanto puede haber bucles de enrutamiento) Mejoras En 1970 Yen describió una mejora del algoritmo Bellman-Ford para un grafo sin ciclos con peso negativo. Esta mejora primero asigna un orden arbitrario lineal a todos los vértices y luego divide el conjunto de todas las aristas en uno o dos subconjuntos. El primer subconjunto, Ef, contiene todas las aristas (v i,vj) tales que i < j; mientras que el segundo, Eb, contiene aristas (v i,vj) tales que i > j. Cada vértice se visita en orden v1,v2,…,vn, relajando cada arista saliente de ese vértice en E f. Cada vértice es, después, visitado en orden v|v|,v|v| ,…,v1 , relajando cada arista saliente de ese vértice en Eb. La mejora de Yen reduce a la mitad, de manera efectiva, el número de ―pases‖ requeridos para la solución del camino más corto desde una única fuente.
Problema Desarrollado No 6: Algoritmo de Bellman – Ford En este artículo se mostrará un ejemplo del Algoritmo de Bellman-Ford. Para ello se mostrará la siguiente tabla y a partir de esta se explicará el procedimiento para hallar el camino mínimo de todos los vértices a un único vértice destino.
Figura No 24: Grafo inicial Modelos de Optimización de Redes
31
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Grafo inicial y Tabla de relaciones En este ejemplo partimos de este grafo, cuyas relaciones están expuestas a su derecha: o
Figura No 25: Grafo inicial y tabla de relaciones
Figura No 25: Camino mínimo final de todos los nodos al primero Tabla de resolución final En esta tabla se muestran las soluciones parciales que se han ido obteniendo a través de la realización del algoritmo.
Modelos de Optimización de Redes
32
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Explicación del algoritmo En la tabla anterior donde queda desarrollado el algoritmo paso por paso, podemos apreciar que la resolución del algoritmo viene dada por aplicar las fórmulas que vienen escritas en el paso n, a cada paso. El objetivo del algoritmo es encontrar el camino mínimo desde todos los nodos al vértice 1. En las fórmulas donde viene D, es la distancia mínima desde el nodo que aparece en el subíndice al vértice destino, en este caso, el vértice 1. En el paso 0, inicializamos todas las distancias mínimas a . En el paso 1, actualizamos el paso anterior, aplicando las fórmulas. En este caso ponemos la distancia de los nodos que tienen accesos directos al vértice 1 y se la sumamos a la distancia mínima acumulada que hay hasta el vértice oportuno. Aquí esta distancia acumulada sería 0 para 1, debido a que sería la distancia a él mismo, e infinito para el resto porque no han sido analizados todavía. En el paso 2, al saber ya una distancia mínima acumulada desde los nodos 2 y 3 hasta 1, podemos actualizar las distancias mínimas de los nodos 4 y 5. En los pasos sucesivos, se van actualizando las distancias mínimas acumuladas (D) de los distintos vértices hasta 1, y se van utilizando en los pasos siguientes para optimizar el camino mínimo. El final del algoritmo se da cuando no hay ningún cambio de un paso a otro, es decir, cuando ya no se puede encontrar un camino más corto.
ALGORITMO DE JOHNSON El algoritmo de Johnson es una forma de encontrar el camino más corto entre todos los pares de vértices de un grafo dirigido disperso. Permite que las aristas tengan pesos negativos, si bien no permite ciclos de peso negativo. Funciona utilizando el algoritmo de Bellman-Ford para hacer una transformación en el grafo inicial que elimina todas las aristas de peso negativo, permitiendo por tanto usar el algoritmo de Dijkstra en el grafo transformado. Su nombre viene de Donald B. Johnson, quien fuera el primero en publicar la técnica en 1977. Descripción del algoritmo El algoritmo de Johnson consiste en los siguientes pasos: 1. Primero se añade un nuevo nodo q al grafo, conectado a cada uno de los nodos del grafo por una arista de peso cero. 2. En segundo lugar, se utiliza el algoritmo de Bellman-Ford, empezando por el nuevo vértice q, para determinara para cada vértice v el peso mínimo h(v) del camino de q a v. Si en este paso se detecta un ciclo negativo, el algoritmo concluye. 3. Seguidamente, a las aristas del grafo original se les cambia el peso usando los valores calculados por el algoritmo de Bellman-Ford: una arista de u a v con tamaño w(u,v), da el nuevo tamaño w(u,v) + h(u) – h(v) 4. Por último, para cada nodo s se usa el algoritmo de Dijkstra para determinar el camino más corto entre s y los otros nodos, usando el grafo con pesos modificados. En el grafo con pesos modificados, todos los caminos entre un par de nodos s y t tienen la misma cantidad h(s) – h(t) añadida a cada uno de ellos, así que un camino que sea el más corto en el grafo original también es el camino más corto en el grafo modificado y viceversa. Sin embargo, debido al modo en el que los valores h(v) son computados, todos los pesos modificados de las aristas son no negativos, asegurando entonces la optimalidad de los caminos encontrados por el algoritmo de Dijkstra. Las distancias en el grafo original pueden ser calculadas a partir de las distancias calculadas por el algoritmo de Dijkstra en el grafo modificado invirtiendo la transformación realizada en el grafo. Ejemplo Las etapas del algoritmo de Johnson están descritas en la siguiente ilustración:
En la imagen de la izquierda tiene dos aristas negativas y no contiene ciclos negativos. En la segunda imagen se muestra el nuevo vértice q con peso 0 hacia todos los nodos. En la tercera imagen, se muestra el árbol de caminos mínimos calculado con el algoritmo de Bellman-Ford con q como vértice inicial, y los valores h(v) calculados para Modelos de Optimización de Redes
33
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
cada otro nodo como la longitud del camino más corto entre q y ese nodo. A modo de ilustración, en dicha imagen solo aparecen los caminos que se tomarían para determinar cada valor h(v). Nótese que todos estos valores h(v) no son positivos, porque q tiene una arista de unión con cada nodo de peso 0, y por tanto el camino más corto no puede ser mayor que ese valor. En la parte derecha se muestra el grafo modificado, hecho reemplazando el peso de cada arista w(u,v) por w(u,v) + h(u) – h(v). En este grafo modificado, todos los pesos de las aristas son positivos y el camino más corto entre dos nodos cualesquiera usa la misma secuencia de aristas que en el camino más corto entre los mismos dos nodos en el grafo original. El algoritmo concluye aplicando el algoritmo de Dijkstra para cada uno de los cuatro nodos originales en el grafo modificado (cuarta imagen). Implementación La estructura de datos para almacenar el grafo consiste en una representación de cada vértice como una lista de las aristas que parten del mismo. Estas aristas constan de un origen, un destino y un peso. El conjunto de vértices se representa como un array de vértices y un índice que nos indica el último vértice empleado del array. La implementación del algoritmo devuelve una matriz de elementos precedentes y otra de distancias, mediante la primera se puede seguir el camino de menor coste desde un nodo dado a cualquier otro nodo del grafo, y si paralelamente vamos sumando las distancias de la otra matriz, obtenemos los costes totales de dichos caminos mínimos. Pseudocódigo
Algoritmo de búsqueda A
ÁRBOL DE EXPANSIÓN En el campo matemático de la teoría de grafos, un árbol de expansión T de un grafo conexo, no dirigido G es un árbol compuesto por todos los vértices y algunas (quizá todas) de las aristas de G. Informalmente, un árbol de expansión de G es una selección de aristas de G que forman un árbol que cubre todos los vértices. Esto es, cada vértice está en el árbol, pero no hay ciclos. Por otro lado, todos los puentes de G deben estar contenidos en T. Un árbol de expansión de un grafo conexo G puede ser también definido como el mayor conjunto de aristas de G que no contiene ciclos, o como el mínimo conjunto de aristas que conecta todos los vértices. En ciertos campos de la teoría de grafos es útil encontrar el mínimo árbol de expansión de un grafo ponderado. También se han abordado otros problemas de optimización relacionados con los árboles de expansión, como el máximo árbol de expansión, el máximo árbol que cubre al menos k vértices, el mínimo árbol de expansión con k aristas por vértice como máximo (árbol de expansión de mínimo grado, MDST por sus siglas en inglés), el árbol de expansión con el máximo número de hojas (estrechamente relacionado con el problema del menos conjunto dominante y conexo), el árbol de expansión con el menor número de hojas (relacionado con el problema del camino hamiltoniano), el árbol de expansión de mínimo diámetro o el árbol de expansión de la mínima dilación.
Árboles de Expansión Mínimales Ciclos fundamentales y cortes fundamentales Si se añade una sola arista a un árbol de expansión, se crea un ciclo: los ciclos de ese tipo se denominan ciclos fundamentales. Hay un ciclo fundamental distinto para cada arista; es decir, hay una correspondencia biyectiva (uno a uno) entre ciclos fundamentales y aristas ausentes del árbol de expansión. Para un grafo conexo con V vértices, cualquier árbol de expansión tiene V-1 aristas, y así, un grafo con E aristas tiene E-V+1 ciclos fundamentales. En cualquier árbol de expansión dado, esos ciclos forman una base del espacio de ciclos. De manera dual a la noción de ciclo fundamental, existe el concepto de corte fundamental. Al eliminar una arista del árbol de expansión, los vértices se dividen en dos conjuntos disjuntos (desconectados). El corte fundamental se Modelos de Optimización de Redes
34
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
define como el conjunto de aristas que deben ser eliminados de un grafo G para llegar a la misma división. Por tanto, hay exactamente V-1 cortes fundamentales en un grafo, uno por cada arista del árbol de expansión. La dualidad entre cortes y ciclos fundamentales se manifiesta al observar que las aristas de un ciclo que no pertenece al árbol de expansión sólo pueden aparecer en los cortes de otras aristas del ciclo, y viceversa: las aristas en un corte sólo pueden aparecer en aquellos ciclos no contenidos en la arista correspondiente al corte. Este problema tiene algunas similitudes con el problema de la ruta más corta. De manera general, en ambos casos se considera una red no dirigida y conexa, en la que los datos dados incluyen medidas para cada ligadura (distancia, costo, tiempo, etc.). Involucran también el hecho de seleccionar un conjunto de ligaduras que tiene la longitud total más corta entre todas las ligaduras que cumplen determinada propiedad. En el problema de la ruta más corta, la ligadura seleccionada debe generar una trayectoria entre el origen y el destino, mientras que para el árbol de expansión mínima se requiere que las ligaduras seleccionadas generen una trayectoria entre cada par de nodos, de tal manera que la suma de todas las trayectorias sea mínima. Una red con n nodos solo requiere n – 1 ligaduras para generar una trayectoria entre cada par de nodos. Por lo tanto, el problema es encontrar el árbol de expansión total mínima de sus ligaduras. El problema del árbol de mínima expansión se resuelve normalmente con el inicio en cualquier nodo. El primer paso consiste en seleccionar la rama más corta posible a otro nodo desde el inicio, sin preocuparse del efecto que esta elección pueda tener en las decisiones posteriores. El segundo paso consiste en identificar el nodo no conectado más cercano a cualquiera de los dos que se acaban de conectar y después agregar la ligadura correspondiente a la red. Este proceso se repite, según el resumen que se da a continuación, hasta que se hayan conectado todos los nodos.
Algoritmo para el problema del árbol de expansión mínima. Paso 1: Se selecciona, de manera arbitraria, cualquier nodo y se conecta al nodo más cercano distinto de éste. Paso 2: Se identifica el nodo no conectado más cercano a un nodo conectado, y se unen estos nodos dos nodos. Este paso se repite hasta que se hayan conectado todos los nodos. Los empates para el nodo no conectado más cercano, se rompen arbitrariamente y el algoritmo aún tiende a una solución óptima. Sin embargo, los empates indican la posibilidad de soluciones óptimas múltiples: Todas esas soluciones, si existen, se pueden encontrar si se buscan las demás formas de romper los empates hasta el final. Es un problema clásico de optimización combinatoria, formulado en 1926 por Boruvka quien lo planteó para resolver el problema de hallar la forma más económica de distribuir energía eléctrica en el sur de Moravia. La formulación de este problema ha sido útil para la realización de muchas investigaciones en varios campos como el transporte, electrónica, telecomunicaciones e investigación de operaciones. El modelo contempla un conjunto de arcos que conectan todos los nodos de la red sin crear un solo ciclo o vuelta. El problema consiste en determinar el árbol que minimiza la distancia de conexión total; se resuelve por el Algoritmo de Etiquetado. En cuanto a la introducción de datos y el proceso de solución es similar a los modelos anteriores de este módulo. El algoritmo de árbol de expansión mínima enlaza los nodos de una red, en forma directa o indirecta, con la mínima longitud de las ramas enlazantes. Una aplicación característica es en la construcción de carreteras pavimentadas que unen varias poblaciones. El camino entre dos poblaciones puede pasar por uno o más poblaciones adicionales. El diseño más económico del sistema de caminos indica que se minimice la distancia total de caminos pavimentados, resultado que se obtiene implementando el algoritmo de árbol de expansión mínima.
Modelos de Optimización de Redes
35
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Figura No 27: Árbol de expansión mínima Un ejemplo de árbol expandido mínimo. Cada punto representa un vértice, el cual puede ser un árbol por sí mismo. Se usa el Algoritmo para buscar las distancias más cortas (árbol expandido) que conectan todos los puntos o vértices. Este problema surge cuando todos los nodos de una red se deben conectar entre ellos, sin formar un ciclo. Se dice que un ciclo se presenta cuando el nodo de inicio de una ruta es el nodo final. El árbol de expansión mínima es apropiado para problemas en los cuales el flujo a lo largo de los arcos se considera instantáneo.
ALGORITMO DE KRUSKAL El algoritmo de Kruskal es un algoritmo de la teoría de grafos para encontrar un árbol recubridor mínimo en un grafo conexo y ponderado. Es decir, busca un subconjunto de aristas que, formando un árbol, incluyen todos los vértices y donde el valor total de todas las aristas del árbol es el mínimo. Si el grafo no es conexo, entonces busca un bosque expandido mínimo (un árbol expandido mínimo para cada componente conexa). El algoritmo de Kruskal es un ejemplo de algoritmo voraz. Funciona de la siguiente manera: se crea un bosque B (un conjunto de árboles), donde cada vértice del grafo es un árbol separado se crea un conjunto C que contenga a todas las aristas del grafo mientras C es novacío o eliminar una arista de peso mínimo de C o si esa arista conecta dos árboles diferentes se añade al bosque, combinando los dos árboles en un solo árbol o en caso contrario, se desecha la arista Al acabar el algoritmo, el bosque tiene una sola componente, la cual forma un árbol de expansión mínimo del grafo. Este algoritmo fue publicado por primera vez en Proceedings of the American Mathematical Society, pp. 48–50 en 1956, y fue escrito por Joseph Kruskal. Como el algoritmo de Prim, el algoritmo ideado por J.B. Kruskal en el año 1956 (―On the shortest spanning subtree of a graph and the traveling salesman problema‖) se basa en la propiedad de los arboles de expansión minimales: partiendo del árbol vacío, se selecciona a cada paso la arista de menor etiqueta que no provoque ciclo sin requerir ninguna otra condición sobre sus extremos. 1. 2. 3.
Comenzar en forma arbitraria en cualquier nodo y conectarlo con el más próximo (menos distante o costoso). Identificar el nodo no conectado que está más cerca o menos costoso de alguno de los nodos conectados. Deshacer los empates de forma arbitraria. Agregar este nodo al conjunto de nodos conectado. Repartir este caso hasta que se hayan conectado todos los nodos.
Problema Desarrollado No 8: EL TRANSITO DE LA CIUDAD DE LIMA Modelos de Optimización de Redes
36
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
La ciudad de Lima está planificando el desarrollo de una nueva línea en sistemas de tránsito. El sistema debe unir 8 zonas residenciales y centros comerciales. El Dirección metropolitana de transito necesita seleccionar un conjunto de líneas que conecten todos los centros a un mínimo costo. La red seleccionada debe permitir: - Factibilidad de las líneas que deban ser construidas. - Mínimo costo posible por línea. RED QUE REPRESENTA EL ARBOL EXPANDIDO.
Figura No 28: Red del problema desarrollado No 7
Solución - Analogía con un problema de redes El algoritmo que resuelve este problema es el algoritmo de Kruskal. Algoritmo: Empezar seleccionando, desde un arco inicial, el arco de menor longitud. En cada iteración, agregue el siguiente arco de menor longitud del conjunto de arcos disponibles, tomando la precaución de no formar ningún ciclo El algoritmo finaliza cuando todos los nodos están conectados.
Figura No 29: Primera Iteración
Partimos del nodo 1 y marcamos la arista que une el nodo 1 y el 2, por ser la arista de menor valor (28) no marcada.
Modelos de Optimización de Redes
37
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Figura No 30: Primera Iteración
Figura No 31: Segunda Iteración
Marcamos la arista que une el nodo el nodo 2 con el 4, por ser la arista de menor valor (32), no marcada que no forma ciclos.
Figura No 32: Segunda Iteración
Modelos de Optimización de Redes
38
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Figura No 33: Tercera Iteración
Marcamos la arista que une el nodo 4 y el nodo 3, por ser la arista menor (30) que no forma ciclos con los ya marcados anteriormente.
Figura No 34: Cuarta Iteración
Figura No 35: Cuarta Iteración
Marcamos la arista que une el nodo 2 y el nodo 5, por ser la arista menor (35) que no forma ciclos con los ya marcados anteriormente. Modelos de Optimización de Redes
39
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Figura No 36: Cuarta Iteración
Figura No 37: Quinta Iteración
Figura No 38: Quinta Iteración
Marcamos la arista que une el nodo 2 y el nodo 7, por ser la arista menor (37) que no forma ciclos con los ya marcados anteriormente. Modelos de Optimización de Redes
40
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Figura No 39: Quinta Iteración
Marcamos la arista que une el nodo 6 y el nodo 7, por ser la arista menor (36) que no forma ciclos con los ya marcados anteriormente.
Figura No 40: Sexta Iteración
Figura No 41: Sétima Iteración
Marcamos la arista que une el nodo 5 y el nodo 8, por ser la arista menor (38) que no forma ciclos con los ya marcados anteriormente. Modelos de Optimización de Redes
41
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Figura No 42: Sétima Iteración
FIN. Tenemos marcados n—1 aristas, siendo n el número de nodos.
Figura No 43: Árbol de expansión mínima
RESPUESTA RUTA
COSTO
1-2
28
2-4
32
4-3
30
2-7
37
7-6
36
2-5
35
5-8
38 236
Solución con DS POM del Árbol de Expansión Mínima Modelos de Optimización de Redes
42
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Seleccione la opción Minimum Spanning Tree Figura No 44: Ventana para ingresar y seleccionar del DS POM
Ingrese el número de arcos y digite el nombre
Figura No 44: Ventana en forma de matrix para el ingreso de datos En la ventana anterior debe digitar el inicio, fin y distancia del arco. A continuación de clic en Solve
Modelos de Optimización de Redes
43
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Figura No 45: Ventana de resultados Figura No 46: Red que representa la solución optima
Ejemplo Desarrollado No 9: La figura siguiente muestra todas las posibilidades de construir una red eléctrica entre siete municipios (nodos) de un distrito a partir de una subestación colocada en el nodo 1. Loa valores asociados con los arcos son los costos en millones de dólares para unir cada par de municipios, determinar cómo debe tenderse la red entre los municipios, de tal manera que todos queden conectados a un costo mínimo.
Modelos de Optimización de Redes
44
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
La tabla de la página siguiente muestra que el árbol de expansión de mínimo costo total para la red eléctrica entre los siete municipios (nodos) del distrito de la figura anterior es de 44 millones de dólares, representado por los siguientes circuitos: 1 2 4 3 5
6
7
Figura No 47: Posibilidades de construir una red eléctrica entre siete municipios Aplicación del algoritmo del árbol de expansión mínima para el ejemplo. Nodos conectados i 1 1 1 1 1
2 2 2 2
4 4 4
3 3
Nodo k de menor costo que puede ser conectado a un nodo i 1 2 2 4 4 3 4 5 5 6
1
2
5 4
3
6
5
6
7
Costo Cik
Costo acumulado Tk
Costo menor acumulado Tk
6 6 4 9 4
6 6+6 12+4 16+9 25+4
6 12 16 25 29
15
29+15
44
Figura No 48: Diseño para construir una red eléctrica entre siete municipios Modelos de Optimización de Redes
45
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Ejemplo Desarrollado No 8: Algoritmo de Kruskal
Este es el grafo original. Los números de las aristas indican su peso. Ninguna de las aristas está resaltada.
AD y CE son las aristas más cortas, con peso 5, y AD se ha elegido arbitrariamente, por tanto se resalta.
Sin embargo, ahora es CE la arista más pequeña que no forma ciclos, con peso 5, por lo que se resalta como segunda arista.
La siguiente arista, DF con peso 6, ha sido resaltada utilizando el mismo método.
Modelos de Optimización de Redes
46
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Las siguientes aristas más pequeñas son AB y BE, ambas con peso 7. AB se elige arbitrariamente, y se resalta. La arista BD se resalta en rojo, porque formaría un ciclo ABD si se hubiera elegido.
El proceso continúa marcando las aristas, BE con peso 7. Muchas otras aristas se marcan en rojo en este paso: BC (formaría el ciclo BCE), DE (formaría el ciclo DEBA), y FE (formaría el ciclo FEBAD).
Finalmente, el proceso termina con la arista EG de peso 9, y se ha encontrado el árbol expandido mínimo .
Problema Desarrollado No 11: Resolver la siguiente red, con el algoritmo de Kruskal, para encontrar el árbol expandido mínimo
Modelos de Optimización de Redes
47
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Figura No 49: Red para el problema desarrollado No 10
Algoritmo de Kruskal Paso Inicio 1 2 3 4 5 6 7
Arista considerada (1,2) (2,3) (4,5) (6,7) (1,4) (2,5) (4,7)
Componentes conexos {1}{2}{3}{4}{5}{6}{7} {1,2}{3}{4}{5}{6}{7} {1,2,3}{4}{5}{6}{7} {1,2,3}{4,5}{6}{7} {1,2,3}{4,5}{6,7} {1, 2, 3, 4, 5}{6, 7} Rechazado {1, 2, 3, 4, 5, 6, 7}
Figura No 50: Árbol de expansión mínimo como resultado de aplicar el algoritmo de Kruskal
Modelos de Optimización de Redes
48
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Problema Propuesto No 1: Encuentre el árbol de mínima expansión, aplicando el algoritmo de Kruskal 3
2
Figura No 51: Red para el ejercicio propuesto No 1
6 4 1 5 9 1
5 7 3
5
10
8 3
4
6
o
Problema Propuesto N 2: Determinar el árbol de expansión mínima de la malla de la Figura Figura No 52: Red para el ejercicio propuesto No 2
Problema Propuesto No 3: Determine las rutas mínimas desde el nodo 1 fijado como origen en las siguientes redes, hasta el nodo 8. Asimismo encuentre su árbol de expansión mínima. :
Figura No 53: Red para el ejercicio propuesto No 3
Modelos de Optimización de Redes
49
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Problema Propuesto No 4: Determine las rutas mínimas desde el nodo 1 fijado como origen en las siguientes redes, al nodo 4. Asimismo encuentre su árbol de expansión mínima. :
Problema Propuesto No 5: Determine las rutas mínimas desde el nodo s fijado como origen en las siguientes redes, al nodo t. Asimismo encuentre su árbol de expansión mínima. :
ALGORITMO DE PRIM El algoritmo de Prim es un algoritmo de la teoría de los grafos para encontrar un árbol recubridor mínimo en un grafo conexo, no dirigido y cuyas aristas están etiquetadas. En otras palabras, el algoritmo encuentra un subconjunto de aristas que forman un árbol con todos los vértices, donde el peso total de todas las aristas en el árbol es el mínimo posible. Si el grafo no es conexo, entonces el algoritmo encontrará el árbol recubridor mínimo para uno de los componentes conexos que forman dicho grafo no conexo. El algoritmo fue diseñado en 1930 por el matemático Vojtech Jarnik y luego de manera independiente por el científico computacional Robert C. Prim en 1957 y redescubierto por Dijkstra en 1959. Por esta razón, el algoritmo es también conocido como algoritmo DJP o algoritmo de Jarnik.
Modelos de Optimización de Redes
50
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Descripción conceptual El algoritmo incrementa continuamente el tamaño de un árbol, comenzando por un vértice inicial al que se le van agregando sucesivamente vértices cuya distancia a los anteriores es mínima. Esto significa que en cada paso, las aristas a considerar son aquellas que inciden en vértices que ya pertenecen al árbol. El árbol recubridor mínimo está completamente construido cuando no quedan más vértices por agregar. El algoritmo de Prim tiene como objetivo formar un árbol abarcador de costo mínimo dado un grafo no dirigido con sus respectivos pesos. Problema desarrollado N o 11 Image
Modelos de Optimización de Redes
Descripción
No visto
En el En el grafo árbol
Este es el grafo ponderado de partida. No es un árbol ya que requiere que no haya circuitos y en este grafo los hay. Los números cerca de las aristas indican el peso. Ninguna C, G de las aristas está marcada, y el vértice D ha sido elegido arbitrariamente como el punto de partida.
A, B, D E, F
El segundo vértice es el más cercano a D: A está a 5 de distancia, B a 9, E a 15 y F a 6. De estos, 5 es el valor C, G más pequeño, así que marcamos la arista DA.
B, E, F
A, D
El próximo vértice a elegir es el más cercano a D o A. B está a 9 de distancia de D y a 7 de A, E está a 15, y F está C a 6. 6 es el más chico, así que marcamos el vértice F y a la arista DF.
B, E, G
A, D, F
51
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
El algoritmo continúa. El vértice B, que está a una distancia de 7 de A, es el siguiente marcado. En este punto la arista DB es marcada en rojo porque sus dos null extremos ya están en el árbol y por lo tanto no podrá ser utilizado.
C, E, A, D, G F, B
Aquí hay que elegir entre C, E y G. C está a 8 de distancia de B, E está a 7 de distancia de B, y G está a 11 de distancia de F. E está más cerca, entonces marcamos null el vértice E y la arista EB. Otras dos aristas fueron marcadas en rojo porque ambos vértices que unen fueron agregados al árbol.
C, G
A, D, F, B, E
Sólo quedan disponibles C y G. C está a 5 de distancia de E, y G a 9 de distancia de E. Se elige C, y se marca con null el arco EC. El arco BC también se marca con rojo.
G
A, D, F, B, E, C
G es el único vértice pendiente, y está más cerca de E que de F, así que se agrega EG al árbol. Todos los vértices null están ya marcados, el árbol de expansión mínimo se muestra en verde. En este caso con un peso de 39.
null
A, D, F, B, E, C, G
DE FLUJO MAXIMO Los algoritmos de flujos resuelven el problema de encontrar el flujo máximo de una fuente a un sumidero respetando una serie de restricciones. La primera de ellas que el flujo los flujos se miden como el flujo que sale de un nodo, si así ocurriera el flujo se considera positivo, en caso contrario tenemos un flujo negativo. De esta forma, si el flujo de i a j es positivo entonces el flujo de j a i es negativo. La fuente tiene un flujo neto positivo, el sumidero tiene un flujo neto negativo y los nodos intermedios en los caminos que van de la fuente al sumidero tienen un flujo neto igual a cero. A esta propiedad se le conoce como conservación del flujo y es el equivalente a las leyes de conservación de la materia en física y leyes de Kirchoff en electricidad. Así el flujo neto que sale de la fuente es igual al flujo que entra al sumidero. Para todos los demás nodos el flujo neto debe ser cero, entendiendo como flujo
Modelos de Optimización de Redes
52
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
neto a la suma de todos los flujos que entran y salen de un nodo. Por ultimo, ningún flujo debe sobrepasar la capacidad máxima indicada para cada arista en el grafo que representa la red de nodos. Basado en las propiedades y restricciones anteriores se desarrollo el algoritmo de Ford-Fulkerson cuyo seudocódigo se presenta a continuación: FORD-FULKERSON (f, s) 1. Para cada arista (u, v) en el grafo f[u][v] = 0 f[v][u] = 0 2. Mientras exista un camino de flujo residual entre f y s incremento = min(cap(u,v) tal que (u,v) está en el camino) para cada arista (u,v) en el camino o f[u][v] = f[u][v] + incremento o f[v][u] = -f[u][v] Muchos problemas pueden ser modelados mediante una red en la cual se considera que los arcos tienen la capacidad de limitar la cantidad de un producto que se puede enviar a través del arco. En estas situaciones, frecuentemente se desea transportar la máxima cantidad de flujo desde un punto de partida llamado fuente hacia un punto final denominado pozo.
ALGORITMO DE FORD-FULKERSON. FLUJO MÁXIMO Tenemos el conocido problema de flujo máximo o maximal: ¿cuál es la tasa mayor a la cual el material puede ser transportado de la fuente al sumidero sin violar ninguna restricción de capacidad? En otras palabras, el problema consiste en determinar la máxima capacidad de flujo que puede ingresar a través de la fuente y salir por el nodo de destino. El procedimiento para obtener el flujo máximo de una red, consiste en seleccionar repetidas veces cualquier trayectoria de la fuente al destino y asignar el flujo máximo posible en esa trayectoria. Capacidad residual: es la capacidad adicional de flujo que un arco puede llevar:
Dada una red de flujo máximo, plantee la red residual asociada. Encuentre la trayectoria de la fuente al destino con capacidad de flujo estrictamente positivo (si no existe alguno, es porque se ha encontrado el óptimo). Examine estas trayectorias para encontrar la rama o arco con la menor capacidad de flujo restante e incremente en éste valor, la capacidad del flujo en sentido contrario. Determine todas las trayectorias estrictamente positivas, hasta que no se permita flujo del nodo a un nodo destino. El problema consiste en determinar la máxima capacidad de flujo que se puede llevar desde el nodo origen hasta el nodo destino de una red.
Teorema de máximo flujo mínimo corte: Para una red conexa dirigida con un origen y un destino el valor del flujo máximo es igual al valor mínimo de las capacidades de corte de cualquier corte de la red. En el óptimo no existen caminos de aumento en la red residual y se obtiene un corte con capacidad de corte cero en la red residual.
El método de Ford-Fulkerson. Para una red de transporte G, estamos interesados en obtener la forma de utilizar óptimamente las "tuberías" de las que se dispone, dicho de otra forma queremos obtener la mayor cantidad de flujo que se pueda transportar por la red sin violar las capacidades predefinidas. El método de Ford-Fulkerson resuelve el problema del flujo máximo. Le llamamos método y no un "algoritmo" dado que permite varias implementaciones con diferentes tiempos de ejecución (para un estudio sobre tiempos de ejecución se sugiere consultar [1,4]). El método Ford-Fulkerson es iterativo, puesto que se empieza con un flujo nulo (soportado por las tuberías de la red) y luego éste se va aumentando hasta que logre el mayor flujo posible sin violar las restricciones de capacidad. Para lograr ir aumentando la cantidad de flujo transportado, en cada paso utilizaremos el concepto de ruta aumentante o semivía, la cual puede pensarse como un camino desde la fuente hasta el destino por el que se puede empujar o mandar todavía flujo. El método de Ford-Fulkerson consiste en utilizar tantas rutas aumentantes como existan. En [5], el método de Ford-Fulkerson se resume de la siguiente forma:
ALGORITMO DE FORD-FULKERSON Modelos de Optimización de Redes
53
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
El algoritmo de Ford-Fulkerson propone buscar caminos en los que se pueda aumentar el flujo, hasta que se alcance el flujo máximo. Es aplicable a los Flujos maximales. La idea es encontrar una ruta de penetración con un flujo positivo neto que una los nodos origen y destino. Su nombre viene dado por sus creadores, L. R. Ford, Jr. y D. R. Fulkerson. Introducción Sea (V, A, w) con V vértices, A aristas y w peso de las aristas, una red con una única fuente s y un único sumidero t; w(α) es la capacidad de α perteneciente a la arista A. Un flujo f es viable si f(α) <= w(α) para todo α perteneciente a la arista A. Se trata de hallar un flujo viable con el valor máximo posible. En un red con fuente s y sumidero t único el valor máximo que puede tomar un flujo variable es igual a la capacidad mínima que puede tomar un corte. El algoritmo de Ford-Fulkerson, que data de 1962, es el primer algoritmo propuesto para resolver el problema del flujo máximo. Se basa en el concepto de grafo residual. Dado un flujo f en un grafo G = (V, A), se define el grafo residual G f como aquel grafo con los mismos vértices que G, arcos (u, v) tal que (u, v) ∈ A o (v, u) ∈ A y capacidades cf (u, v) = c(u, v) -f(u, v). Es decir, por cada arco del grafo G aparecen dos arcos en sentidos opuestos en el grafo residual. Un camino aumentado es un camino de s a t en el grafo residual Gf que pase por arcos con capacidad residual cf no nula. Este método depende de tres ideas importantes: Camino de aumento y red residual. Este método es iterativo. Se comienza con f(u, v) =0 para cada par de nodos. En cada iteración se incrementa el valor del flujo buscando un camino de aumento, el cual es un camino desde la fuente al resumidero que puede conducir más flujo. Capacidad residual: Es la capacidad adicional de flujo que un arco puede llevar: cf(u, v)= c(u, v) - f(u, v) Dado una red de flujo G=(V,E) y un flujo f, la red residual: inducida por f es Gf=(V, Ef), con Ef={(u, v) ∈ VxV:
cf(u, v)>0} Algoritmo del aumento del flujo: algoritmo de Ford-Fulkerson Este es uno de los algoritmos más sencillos y a la vez eficientes para determinar el flujo máximo en una red, partiendo de un nodo fuente S y teniendo como destino el nodo sumidero T. La idea básica del algoritmo es partir de una función de flujo, flujo cero, e iterativamente ir mejorando el flujo. La mejora se da en la medida que el flujo de S a T aumenta, teniendo en cuenta las condiciones que ha de cumplir la función de flujo: - Flujo que entra=flujo que sale - El flujo no puede superar la capacidad del arco Los arcos de la red pueden clasificarse en 3 categorías: - No modificable: arcos cuyo flujo no puede aumentarse ni disminuirse, por tener capacidad 0 o tener un coste prohibitivo. - Incrementable: arcos cuyo flujo puede aumentarse pues transportan un flujo inferior a su capacidad - Reducible: arcos cuyo flujo puede ser reducido
Algoritmo del aumento del flujo: algoritmo de Ford-Fulkerson Pasos que sigue el algoritmo: 1. Parte de un flujo inicial Fij=0. Determina arcos incrementables y reducibles. Marca vértice fuente S. 2. Repetir hasta marcar sumidero T, o no sea posible marcar más vértices. 3. Si un vértice i está marcado y ∃(i,j) incrementable, marcamos vértice j 4. Si vértice i está marcado y ∃(i,j) con (j,i) reducible, marcamos vértice j 5. Si ha sido marcado sumidero T, hemos obtenido una cadena de aumento de flujo. Aumentar el flujo al máximo aumento de flujo permitido por la cadena. Actualizar los flujos de cada arco con las unidades de aumento. - Cadenas de arcos incrementables: Mínimo { (Uij-Fij), ∀(i,j)∈P } - Cadenas de arcos reducibles: Mínimo { Fij, ∀(i,j)∈P’ } - Cadenas de arcos incrementables-reducibles: mínimo de las dos cantidades anteriores - Este mínimo se llama aumento de flujo máximo de la cadena Borrar todas las marcas, salvo la del vértice S, y repetir desde paso 2 al 4. Si vértice T no marcado, finalizar algoritmo, pues no es posible enviar más flujo de S a T. Problema desarrollado No 13 Modelos de Optimización de Redes
54
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Figura No 54: Solución del problema de flujo máximo Animación del algoritmo de flujo máximo http://www.lix.polytechnique.fr/~durr/MaxFlow/ Modelo del flujo máximo: En algunas redes circula por los arcos un flujo (envío o circulación de unidades homogéneas de algún producto: automóviles en una red de carreteras, litros de petróleo en un oleoducto, bits por un cable de fibra óptica) desde el origen o fuente al destino, también denominado sumidero o vertedero. Los arcos tienen una capacidad máxima de flujo, y se trata de enviar desde la fuente al sumidero la mayor cantidad posible de flujo, de tal manera que: o El flujo es siempre positivo y con unidades enteras. o El flujo a través de un arco es menor o igual que la capacidad. o El flujo que entra en un nodo es igual al que sale de él. En el caso de que el origen o el destino no existan en el problema, se añaden ficticiamente utilizando arcos unidireccionales de capacidad infinita, como en grafo mostrado a continuación:
Otra Descripción del Algoritmo de Ford-Fulkerson (flujo máximo) Se puede considerar un grafo como una red de flujo. Donde un nodo fuente produce o introduce en la red cierta cantidad de algún tipo de material, y un nodo sumidero lo consume. Cada arco, por tanto, puede considerarse como un conducto que tiene cierta capacidad de flujo. De igual modo que en redes eléctricas (Ley de Kirchhoff), la suma de flujos entrantes a un nodo, debe ser igual a la suma de los salientes (principio de conservación de energía), excepto para el nodo fuente y el nodo sumidero. Por tanto, el problema de flujo máximo se enuncia como: ¿cuál es la tasa a la cual se puede transportar el material desde el nodo fuente al nodo sumidero, sin violar las restricciones de capacidad?. Este algoritmo se puede usar para resolver modelos de: transporte de mercancías (logística de aprovisionamiento y distribución), flujo de gases y líquidos por tuberías, componentes o piezas en líneas de montaje, corriente en redes eléctricas, paquetes de información en redes de comunicaciones, tráfico ferroviario, sistema de regadíos, etc. Una red de flujo es un grafo dirigido G=(V,E) donde cada arco (u,v) perteneciente a E tiene una capacidad no negativa. Se distinguen dos nodos: la fuente o nodo s, y el sumidero o nodo t. Si existen múltiples fuentes y sumideros, el problema se puede simplificar añadiendo una fuente común y un sumidero común. Modelos de Optimización de Redes
55
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Este algoritmo depende de tres conceptos principales: Un camino de aumento, es una trayectoria desde el nodo fuente s al nodo sumidero t que puede conducir más flujo. La capacidad residual es la capacidad adicional de flujo que un arco puede llevar c f (u,v) = c(u,v) - f(u,v) Teorema de Ford-Fulkerson (1962): En cualquier red, el flujo máximo que fluye de la fuente al destino es igual a la capacidad del corte mínimo que separa a la fuente del destino. El algoritmo es iterativo, se comienza con f(u,v)=0 para cada par de nodos y en cada iteración se incrementa el valor del flujo buscando un camino de aumento. El proceso se repite hasta no encontrar un camino de aumento. El algoritmo lo podemos dividir claramente en tres partes: 1.- Iniciar con un flujo 0 2.- Examinar y etiquetar los nodos de la red, de acuerdo al teorema de Ford. Si se examinan todos los nodos entonces el algoritmo termina. En caso de que se etiquete al nodo de destino, ir directamente al tercer paso: 3.- Encontrar la trayectoria entre los nodos inicial y final de acuerdo a las etiquetas para revisar el flujo Problema desarrollado No 14: A continuación se aprecia una red. El valor de los arcos de la red o grafo simboliza capacidad, es decir, cantidad máxima de transporte. Mediante el algoritmo de Ford-Fulkerson, o método del flujo máximo, trataremos de optimizar la cantidad transportada, en función de la capacidad de Arcos. Figura No 55: Red desarrollado No 14
para
el
ejercicio
En la figura se N o 55 se plantea una red de canalizaciones (valga el símil hidráulico) entre el origen 0 y un final 6. Se trata de averiguar la cantidad máxima de agua que puede llegar a 6 en función de las capacidades máximas de las canalizaciones, cuyos valores están expresados sobre cada arco encerrados en un cuadrado. La situación puede plantearse también mediante la siguiente tabla de capacidades máximas:
0 1 2 3 4 5 6
TABLA DE CAPACIDADES MAXIMAS DE ARCOS 0 1 2 3 4 5 6 30 30 10 5 10 20 10 20 10 20 10 20
La casilla vacía indica ausencia de canalización
Vamos a describir a continuación las fases del método de flujo máximo: 1ra Fase: Elegir un flujo arbitrario Se trata de elegir una cantidad inicial arbitrariamente y distribuirla a lo largo de la red, respetando siempre estas dos condiciones: Que no se supere nunca la capacidad máxima de canalización. Conservación del flujo en cada vértice (todo lo que entre, debe salir).
Modelos de Optimización de Redes
56
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Las cantidades a elegir arbitrariamente dependen de la práctica. Puede probarse primero eligiendo las capacidades máximas de los canales (0,1) y (0,2), es decir, 30 unidades. Esto es como si abriéramos el grifo en 0 al máximo. Pero enseguida nos damos cuenta de que si obligamos a 1 a recibir 30 unidades, luego no pueden salir, ya que los canales (1, 3), (1, 4) y (1, 5) solo admiten en total (10 + 5 + 10) = 25 unidades. Vamos, pues, para poder desarrollar todas las fases del método, a elegir cantidades diferentes, por ejemplo 20 unidades por (0, 1) y 20 unidades por (0, 2). Si entran 20 unidades en 1, deben salir de él y pueden hacerlo de varias formas. Elegimos 10 unidades para (1,3), 5 unidades para (1, 4) y 5 unidades para (1,5). A 2 entran 20 unidades y deben salir por (2,3) y (2,5). Elegimos 10 unidades por (2,3) y otras 10 unidades por (2,5). Todos estos pasos se van escribiendo en la figura 56, inmediatamente al lado de las capacidades máximas. Hasta ahora, al nodo 3 le llegan 10 unidades por (1,3) y 10 unidades por (2,3) y deben salir por (3,6) y por (3,4), como elijamos. Elegimos 10 unidades para (3,6) y otras 10 unidades para (3,4).
Figura No 56: Red de el ejercicio desarrollado
En esta situación, a 4 entran 10 unidades por (3, 4) y 5 unidades por (1, 4), que pueden salir sólo por (4, 6), y a 5 entran 5 unidades por (1, 5) y 10 unidades por (2, 5), que pueden salir por (5, 6) hasta un total de 30 unidades, y por (5, 4) hasta un total de 10 unidades. Si quisiéramos pasar 10 unidades por (5, 4) podríamos hacerlo, ya que no superamos la capacidad de esta canalización, pero al llegar a 4 tendríamos un total de 15 unidades (de (1, 4) y (3, 4)), más 10 unidades de (5,4). Y estas 25 unidades no pueden salir por (4, 6). Así, pues, lo máximo que podemos hacer pasar por (5, 4) es 5 unidades, que sumadas a las 15 anteriores no superarían la capacidad de (4, 6). No obstante, y dado que ya habíamos fijado la cantidad de 15 unidades para (4, 6), elegiremos 0 unidades para (5, 4) y 15 unidades para (5, 6). Debemos comprobar siempre al terminar la distribución de flujos que en todo nodo se conserva la cantidad (figura 57)
Figura No 57: Red de el ejercicio desarrollado
También comprobamos que no hay perdidas en la red, ya que todo lo que sale de 0, que son 40 unidades, llega a 6 [(10) + 15 + 15].
Modelos de Optimización de Redes
57
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Las cantidades encerradas entre paréntesis sólo indican que el arco correspondiente esta <
>, es decir, que no puede pasar nada más. Una vez distribuido el flujo arbitrario debemos tratar de incrementarlo hasta llegar al máximo y, por supuesto, comprobar que lo es. Para esto desarrollaremos: 2da Fase: Obtener la red de flujo completo Se dice que una red es de <> cuando todo camino entre el origen y el final tiene <> un arco saturado. Primero vamos a buscar todos los caminos posibles entre 0 y 6. Estos son: Caminos Arcos Saturados 0 1 3 6 (1, 3), (3, 6) 0 1 3 4 6 (1, 3) 0 1 4 6 (1, 4) 0 1 5 6 Ninguno 0 1 5 4 6 Ninguno 0 2 3 6 (3, 6) 0 2 3 4 6 Ninguno 0 2 5 6 (2, 5) 0 2 5 4 6 (2, 5) La red no es flujo completo, ya que los caminos 0156, 01546 y 02346 no tienen al menos un arco saturado. Debemos conseguir que estos caminos tengan al menos un arco saturado incrementando unidades transportadas por ellos. Abriremos más el grifo en 0 y las unidades que aumentemos las haremos pasar por estos caminos. Fijémonos en que los caminos 0156 y 01546 tienen el arco (1, 5) en común. Si logramos saturar este arco, obtendremos a la vez dos caminos con flujo completo. Para ello subo el arco (0, 1) de 20 a 25 unidades. Estas 5 unidades incrementadas las hago pasar por (1, 5) saturándolo, con lo que a 5 entran ahora un total de 20 unidades que puedo hacer pasar por (5, 6). Por último, falta por saturar algún arco del camino 02346. El arco de este camino que menor incremento de unidades permite es el (4, 6) con 5 unidades. Luego abriré en 0, 5 unidades más que pasarán por todo el camino anterior. Saturando el arco (4, 6) solamente. De esta forma, logramos la red en flujo completo Las nuevas cantidades transportadas se señalan en la red al lado de las anteriores (figura 58) 3ra. Fase: Marcar los vértices de la red hasta los que se pueda hacer llegar una unidad de flujo suplementaria El mecanismo es el siguiente: a. La entrada 0, se marca con + siempre. b. Si un vértice ya ha sido marcado, a partir de éste podemos intentar marcar un vértice posterior y un vértice anterior a él. I. Se podrá marcar todo vértice posterior a uno ya marcado si, y sólo si, el arco que los une no está saturado (que es como decir que por este arco no saturado entre los dos vértices todavía se pueden pasar más unidades). ¿Cómo se marca? Por ser posterior, se marca con signo positivo seguido de la denominación del vértice anterior. II.
Se podrá marcar todo vértice anterior a uno ya marcado si, y sólo si, el arco que los une es de <> (o sea, pasan más de cero unidades). ¿Cómo se marca? Por ser anterior, se marca con signo negativo seguido de la denominación del vértice ya Marcado del que partimos. Si por este proceso llegamos a marcar la salida de la red, el flujo no es máximo. Podremos, entonces, buscar otra distribución de flujo de tal forma que se transporte más cantidad hasta la salida.
Modelos de Optimización de Redes
58
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Figura No 58: Red de el ejercicio desarrollado
La forma de cambiar la distribución de flujo la veremos más adelante. Ahora desarrollaremos la tercera fase de fa figura 58, donde se han apuntado los flujos finales obtenidos anteriormente. Marcamos 0 con + para empezar. Ahora sólo puedo marcar vértices posteriores, ya que no existen anteriores. Puedo marcar 1, ya que el arco (0, 1) no está saturado, y lo mismo para 2. Como voy hacia adelante (siguiendo el sentido de la flecha del arco), marco el 1 con +0, ya que llego a 1 desde 0. Pero fijémonos que desde 1 no puedo seguir marcando vértices, ya que a partir de él todos los arcos (1, 3), (1, 4) y (1, 5) están saturados. Vamos a marcar el 2 con +0 A partir de 2 sólo puedo avanzar por (2, 3), que no está saturado, para llegar a 3, marcándolo con +2, ya que recorro el arco en el sentido de la flecha desde 2. Desde 3 sólo puedo ir a 4 por (3, 4), que no está saturado, marcándolo con +3 Desde 4 no puedo ir a 6 por estar el arco (4, 6) saturado. Pero puedo tratar de ir a 5 por el arco (4, 5) recorriéndolo en sentido contrario a la flecha: Es decir, ahora trato de marcar un vértice anterior al ya marcado 4 y lo podría marcar si el arco fuera de <>. Recordar que el criterio para marcar vértices anteriores a los ya marcados es hacerlo a través de arcos no nulo. Pero como por dicho arco pasan cero unidades, flujo nulo, no puedo marcar el vértice 5. Luego a 6 no puedo llegar por ningún camino para marcarlo. En este caso, se tiene la seguridad de estar el flujo máximo, cuyo valor es 10 unidades por (3, 6), 20 unidades por (4, 6) y 20 unidades por (5, 6); en total, 50 unidades, con lo que el problema queda así resuelto con las tres fases vistas.
Otra red de flujo arbitrario
Figura No 59: Red de el ejercicio desarrollado
Modelos de Optimización de Redes
59
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Pero supongamos que la elección de flujo arbitrario es distinta (figura 59) y está dada en la tabla siguiente:
0 1 2 3 4 5 6
TABLA DE FLUJO INICIAL ARBITRARIO 0 1 2 3 4 5 15 20 0 (5) (10) 10 (10) 10 5
6
0 (20) 15
Una vez que se comprueba que no se superan las capacidades de arco y se cumple la conservación del flujo en cada vértice, vamos a obtener en red de flujo completo. Caminos Arcos Saturados 0 1 3 6 Ninguno 0 1 3 4 6 (4, 6) 0 1 4 6 (1, 4), (4, 6) 0 1 5 6 (1, 5) 0 1 5 4 6 (1, 5), (4, 6) 0 2 3 6 Ninguno 0 2 3 4 6 (4, 6) 0 2 5 6 (2, 5) 0 2 5 4 6 (2, 5), (4, 6)
Vamos a obtener al menos un arco saturado para el camino 0136 (podemos empezar por otro camino). Si aumento 10 unidades a lo largo de todo este camino, saturo (1, 3) y (3, 6). Y al saturar el (3, 6), el camino 0236 también pasa a tener flujo completo. Así, pues, con esta nueva distribución estoy en una red de flujo completo. Al ser una red de flujo completo, no podemos aumentar más unidades en la red aparentemente, ya que a partir de 1 todos los arcos están saturados, y a partir de 2, (2, 5) está saturado; y si tratáramos de aumentar por (0, 2) a (2, 3) y a (3, 4), no podríamos seguir por (4, 6), que también está saturado. Pero la red de flujo completo no garantiza flujo máximo. De hecho, con la elección del flujo inicial arbitrario anterior llegábamos a obtener 50 unidades en 6 en contra de las 45 de ahora [10 por (3, 6) 20 por (4, 6) y 15 por (5, 6)]. Lo único que garantiza flujo máximo en una red es el algoritmo de la tercera fase descrita. 3ª Fase para nuevo flujo arbitrario - Marcamos el 0 con + - Podría marcar 1 con +0 al no estar saturado (0, 1), pero luego no podría seguir, ya que están saturados (1, 3), (1, 4) y (1, 5). - Puedo marcar 2 con +0, ya que (0, 2) no está saturado. - Por los mismos razonamientos, puedo marcar 3 con +2. - Puedo marcar 4 con +3. - No puedo marcar partiendo de 4 el nodo 6, pero sí puedo marcar 5 con - 4, ya que voy en contra de la flecha hacia un nodo anterior por un arco de flujo no nulo. - Puedo marcar 6 con +5. Como he podido marcar la salida, la red no es de flujo máximo, y para determinarlo pasaré a otra dase distinta.
Modelos de Optimización de Redes
60
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
4ª Fase Una vez que se haya marcado la salida de la red, consideramos <> la cadena que desde el origen llevó a marcar la salida. A lo largo de esta cadena: o o
Aumentar las unidades posibles en los arcos orientados en el sentido de recorrido de la entrada a la salida, y simultáneamente, Disminuir el mismo número de unidades en los arcos orientados en sentido contrario.
o o
Saturar algún arco (al menos uno ) orientado en el sentido entrada-salida de la red, o Conseguir flujo nulo en al menos un arco orientado en sentido contrario.
Hasta
Después, comprobar si se puede volver a marcar la salida. Si se puede, repetir la fase 4ª.
Para localizar la cadena que desde la entrada nos llevó a marcar la salida no hay más que, desde un vértice, localizar el siguiente con la denominación o <> de aquél. Así, desde 0 vemos que 2 está marcado con +0; desde 2 vamos a 3, que está marcado con +2; desde 3 a 4, marcado con +3; desde 4 a 5, marcado - 4, y desde 5 a 6, marcado con +5. La cadena así obtenida es:
Los arcos (0, 2), (2, 3), (3, 4) y (5, 6) están orientados en el sentido del recorrido entrada-salida. El arco (4, 5) está orientado en sentido contrario. El número de unidades a modificar en la cadena puede obtenerse por el siguiente procedimiento. ARCO CAPACIDAD FLUJO CAPACIDAD-FLUJO ORIENTACION (0, 2) 30 20 10 E-S (2, 3) 20 10 10 E-S (3, 4) 20 10 10 E-S (4, 5) 10 5 5 S-E (5, 6) 30 15 15 E-S La columna (capacidad-flujo) expresa el número de unidades que puedo aumentar por un arco en sentido entradasalida hasta saturarlo, o el que puedo disminuir por uno en sentido contrario hasta hacerlo flujo nulo. Tomaré el menor número de unidades, es decir, 5 unidades. La cadena modificada queda como sigue:
Modelos de Optimización de Redes
61
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Ahora podemos ver el significado que tiene el aumentar unidades en los arcos de orientación E-S y disminuirlas a la vez en los orientados S-E. La explicación se basa en la conservación del flujo para los vértices. Si a 2 le añado 5 unidades, luego se las quito a la salida, y no ha variado nada. Pero si a 4 le añado 5 unidades desde 3 (por un arco ES), debo quitárselas por otro lado: por el arco (4, 5) orientado S-E. Como este arco (4, 5) también entra en 4, la única forma es restárselas. También vemos que a 5 siguen saliendo las 20 unidades totales antes de la modificación. Pues bien, estos números modificados los pasamos al grafo inicial completo y tratamos de marcar de nuevo para comprobar si estamos ya en flujo máximo o no (figura 59)
Figura No 59: Red del ejercicio desarrollado
Hemos llegado a la misma solución de la figura 37. No siempre la distribución debe ser la misma y puede ocurrir que las cadenas que llevan a marcar la salida sean varias. Bastará con elegir una y trabajar sobre ella. Ya hemos visto que el flujo máximo es: = 50 unidades Existiendo más cantidad disponible en el origen hasta 60 unidades; una solución para aprovechar esta oferta sería ampliar las canalizaciones en número en capacidad. Otra forma, más teórica, de ver el flujo máximo en la red es mediante lo que se denomina <>. Consiste en trazar una línea de puntos que separe los vértices marcados de los no marcados (figura 39). Esta línea cortara arcos (saturados o no) cuya suma de flujos nos dará el flujo total, teniendo en cuenta que los arcos a sumar deberán ir de vértices marcados a no marcados. En la figura 39 la línea de puntos corta los arcos (2, 5), (1, 5), (4, 5), (4, 6) y (3, 6), cuya suma de flujos es: (10) + (10) + 0 + (20) + (10) = 50 unidades. Solución con DS POM
Seleccione Maximal Flow
Modelos de Optimización de Redes
62
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
En la ventana anterior debe digitar el título y seleccione el número de arcos
En esta ventana debe digitar el inicio, final y la capacidad del arco, asimismo el inicio de la fuente (nodo 1), el nodo final o destino (nodo 7). A continuación clic el botón Solve.
Modelos de Optimización de Redes
63
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Matriz solución, acá se aprecia los nodos origen-destino y la capacidad que transportan los arcos y al final se aprecian el flujo máximo que llega al nodo destino o sumidero que es de 50 unidades Obsérvese que este modelo tiene aplicación en la planificación de transporte vehicular, transporte de líquidos mediante tuberías y otros problemas de similar estructura. Obsérvese que este modelo tiene aplicación en la planificación de transporte vehicular, transporte de líquidos mediante tuberías y otros problemas de similar estructura. Problema desarrollado No 15: Esta red ha sido desarrollada mediante una applet, que existe en internet, los enlaces se dan a continuación.
Problemas propuestos Problemas propuestos: Parea las redes de las figuras de las figuras 60 al 68 determine el flujo máximo de la fuente al sumidero, aplicando el algoritmo de Ford-Fulkerson.
Modelos de Optimización de Redes
64
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Figura No 60: Red del ejercicio propuesto
Figura No 61: Red del ejercicio propuesto
Figura No 62: Red del ejercicio propuesto
Figura No 63: Red del ejercicio propuesto
Figura No 64: Red del ejercicio propuesto
Modelos de Optimización de Redes
65
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Figura No 65: Red del ejercicio propuesto
Figura No 66: Red del ejercicio propuesto
Figura No 67: Red del ejercicio propuesto
Figura No 68: Red del ejercicio propuesto
Recursos de Internet Algoritmo de Dijkstra Video del algoritmo dijkstra: http://www.youtube.com/watch?v=6rl0ghgPfK0 http://www.youtube.com/watch?v=EMmSL2Jd_nc&NR=1 http://www.youtube.com/watch?v=FSoutikswxA&feature=related Java Applet Demo of Dijkstra's Algorithm http://www.unf.edu/~wkloster/foundations/DijkstraApplet/DijkstraApplet.htm Modelos de Optimización de Redes
66
Docente Ing. J. Paredes C.
UNIVERSIDAD SAN PEDRO Ingeniería Industrial Investigación Operativa II
Applet demo del algoritmo de Dijkstra http://www-b2.is.tokushima-u.ac.jp/~ikeda/suuri/maxflow/Maxflow.shtml Slide del algoritmo de Dijkstra http://www.slideshare.net/audevisp/pasos-algoritmo-dijkstra-presentation http://www.slideshare.net/joemmanuel/algoritmo-de-dijkstra Applet para desarrollar problemas del algoritmo de Dikstra http://www.dgp.toronto.edu/people/JamesStewart/270/9798s/Laffra/DijkstraApplet.html http://neo.lcc.uma.es/evirtual/cdd/applets/distancia%20corta/Example2.html http://lear.inforg.uniovi.es/ioperativa/TutorialGrafos/mascorto/dijkstra/appletDijkstra.htm Algoritmo de Floyd-Warshall Video de Floyd: http://www.tu.tv/videos/algoritmo-de-floyd Applet para desarrollar problemas de redes con el algoritmo de Floyd http://lear.inforg.uniovi.es/ioperativa/TutorialGrafos/mascorto/floyd/appletFloyd.htm Algoritmo de Prim Applet de simulación del algoritmo de prim http://lear.inforg.uniovi.es/ioperativa/TutorialGrafos/minimaexp/prim/appletPrim.htm Applet del algoritmo de de Prim http://www.dma.fi.upm.es/java/matematicadiscreta/Kruskal_prim/applet_grafos.htm Video del Algoritmo de Prim http://www.youtube.com/watch?v=IO6h5PoxJTQ http://www.youtube.com/watch?v=t5SKEINj9js&NR=1 http://www.youtube.com/watch?v=sl6W3_Q4HZo&NR=1 Applet demo del algoritmo de Prim http://www-b2.is.tokushima-u.ac.jp/~ikeda/suuri/maxflow/Maxflow.shtml Applet para desarrollar problemas de redes del algoritmo de Prim
http://lear.inforg.uniovi.es/ioperativa/TutorialGrafos/minimaexp/prim/appletPrim.htm Algoritmo de Bellman Ford En Java Para Ejecución http://neo.lcc.uma.es/evirtual/cdd/applets/BellmanFord/Example3.html Algoritmo de Kruskal Applet del algoritmo de Kruskal: http://www.dma.fi.upm.es/java/matematicadiscreta/Kruskal_prim/applet_grafos.htm Applet demo del algoritmo de Kruskal http://www-b2.is.tokushima-u.ac.jp/~ikeda/suuri/maxflow/Maxflow.shtml Video del algoritmo de Kruskal http://www.youtube.com/watch?v=NE21yMvgl5w&NR=1 Algoritmo de Ford-Fulkerson Applet para desarrollar problemas de redes con el algoritmo de Ford-Fulkerson http://lear.inforg.uniovi.es/ioperativa/TutorialGrafos/flujomax/ford/appletFord.htm Aplet demo del algoritmo de Ford-Ferkurson http://www-b2.is.tokushima-u.ac.jp/~ikeda/suuri/maxflow/Maxflow.shtml Algoritmo de Bellman Ford En Java Para Ejecución http://neo.lcc.uma.es/evirtual/cdd/applets/BellmanFord/Example3.html Enlaces diversos para los algoritmos de optimización de redes Animaciones de los diversos algoritmos http://www-b2.is.tokushima-u.ac.jp/~ikeda/suuri/maxflow/Maxflow.shtml.en Applets para Grafos http://www.ibiblio.org/links/applets/appindex/graphtheory.html Enlaces interesantes sobre grafos http://www.dma.fi.upm.es/gregorio/grafos/enlacesgrafos.html Varios ejercicios http://www.upiicsa.ipn.mx/polilibros/portal/Polilibros/P_terminados/Investigacion_de_Operaciones_Careaga/Comm on/IO-respexercise413.htm
Slide de grafos http://www.slideshare.net/audevisp/grafos-iii-presentation Modelos de Optimización de Redes
67
Docente Ing. J. Paredes C.