Modelos de Redes: Problemas de la Ruta más corta M. En C. Eduardo Bustos Farías Problemas de la Ruta más corta 2 Problemas de la Ruta más corta Se trata de encontrar la ruta de menor distancia, o costo ,a entre el punto de partida o nodo inicial y el destino o nodo terminal. Definición del Problema - Se tienen n nodos, partiendo del nodo inicial 1 y terminando en el nodo final n. - Arcos bi-direccionales conectan los nodos i y j con distancias mayores que cero, dij - Se desea encontrar la ruta de mínima distancia que conecta el nodo 1 con el nodo n. EJEMPLO: Ruteo en Redes de Datos Una red de comunicaciones involucra un conjunto de computadoras (nodos) conectadas mediante enlaces de comunicacion (arcos), que transfiere paquetes (grupos de bits) desde determinados nodos origen a otros nodos destino. La forma más común para seleccionar la trayectoria (o ruta) de dichos paquetes, se basa en la formulación de la ruta más corta. En particular a cada enlace de comunicación se le asigna un escalar positivo el cual se puede ver como su longitud. 4 Un algoritmo de ruteo de trayectoria más corta, rutea cada paquete a lo largo de la trayectoria de longitud mínima (ruta más corta) entre los nodos origen y destino del paquete. Hay varias formas posibles de seleccionar la longitud de los enlaces. Aquí describimos solamente dos: La forma más simple es que cada enlace tenga una longitud unitaria, en cuyo caso, la trayectoria más corta es simplemente una trayectoria con el menor número de enlaces. 5 De una manera más general, la longitud de un enlace puede depender de su capacidad de transmisión y su carga de tráfico. La situación es encontrar la trayectoria más corta. Esperamos que dicha trayectoria contenga pocos enlaces no congestionados; de esta forma los enlaces menos congestionados son candidatos a pertenecer a la ruta. Hay algoritmos de ruteo especializados que también pueden permitir que la longitud de cada enlace cambie en el tiempo, dependiendo del nivel de tráfico de cada enlace. De esta forma un algoritmo de ruteo se debe adaptar a sobrecargas temporales y rutear paquetes alrededor de nodos congestionados. Dentro de este contexto, el algoritmo de ruta más corta para ruteo opera contínuamente, determinando la trayectoria más corta con longitudes que varían en el tiempo. 6 1. 2. Una característica peculiar de los algoritmos de ruteo de trayecoria más corta es que con frecuencia utilizan comunicación y computación asíncrona y distribuida. En particular, cada nodo de la red de comunicación: monitorea las condiciones de trafico de sus enlaces adyacentes, calcula estimados de sus distancias más cortas a varios destinos y pasa estos estimados a otros nodos, quienes ajustan sus propios estimados, y así sucesivamente. 7 Algoritmos de Dijkstra Para Ruta Más Corta Estos son algoritmos de etiquetado, los cuales, en términos generales, encuentran la ruta más corta entre dos nodos, incial a y final z, de la siguiente manera: Los nodos de la red son etiquetados con números. Al principio, todos tienen la etiqueta 00 excepto el nodo inicial a que tiene la etiqueta 0. Los arcos tienen un peso wij que representa la distancia del enclace (i, j). Los algoritmos de Dijkstra renumeran los nodos, de manera que cuando el nodo z tiene una etiqueta permanente, se ha obtenido la solución final. 8 Algoritmo de la ruta más corta 1. 2. 3. 4. Objetivos para n-ésima interacción: Encontrar el n-ésimo nodo más cercano al origen. (Este paso se repetirá para n = 1,2,…, hasta que el n-ésimo nodo más cercano sea el nodo destino). Datos para la n-ésima interacción: n-1 nodos más cercanos al origen (encontrados en las interacciones previas), incluyendo su ruta más corta y la distancia desde el origen. (Estos nodos y el origen se llamarán nodos resueltos; el resto son nodos no resueltos). Candidatos para el n-ésimo nodo más cercano: Cada nodo resuelto que ésta conectado directamente por una ligadura con uno o más nodos no resueltos proporcionan un candidato, y este es el nodo no resuelto que tiene la ligadura más corta. (Los empates proporcionan candidatos adicionales). Cálculo del n-ésimo nodo más cercano: Para cada nodo resuelto y sus candidatos, se suma la distancia entre ellos y la distancia de la ruta más corta desde el origen a este nodo resuelto. El candidato con la distancia total más pequeña es el n-ésimo nodo más cercano (los empates proporcionan 9 nodos resueltos adicionales y su ruta más corta es la que genera esa distancia). EJEMPLO 1 Ruta más corta 10 Lineas Fairway Van Determine la ruta mas corta entre Seattle y El Paso para la siguiente red de carreteras. Seattle 1 180 497 3 432 Portland 138 Reno 6 691 420 345 Bakersfield 114 13 Los Angeles 621 Denver 9 Las Vegas 11 108 155 Barstow 14 452 Kingman 469 15 207 Albuque. Phoenix 386 425 12 403 16 17 8 102 432 118 San Diego 440 7 526 280 Cheyenne Salt Lake City 291 10 Butte 2 Boise 4 602 5 Sac. 599 Tucson 18 314 19 El Paso Solución - Analogía de un problema de programación lineal - Variables de decisión Xij = 1 si un transporte debe viajar por la carretra que une la ciudad i con la ciudad j. 0 En cualquier otro caso Objetivo = Minimizar Σ dijXij Sujeto a las siguientes restricciones 1 180 Seattle 497 3 432 Portland Butte 599 2 Boise 4 345 Salt Lake City 7 [El numero de carreteras para salir de Seattle (Nodo de inicio)] = 1 X12 + X13 + X14 = 1 De una forma similar: [El número de carreteras para llegar a El Paso (Nodo final)] = 1 X12,19 + X16,19 + X18,19 = 1 Restricciones mayores que cero [El número de carreteras para entrar a la cuidad] = [El número de carreteras para salir de la ciudad]. Por ejemplo, en Boise (Ciudad 4): X14 + X34 +X74 = X41 + X43 + X47. Solución SoluciónOptima Optimapor porWINQSB WINQSB Solución-Analogía con un problema de redes El algoritmo de Dijkstra’s: -Encontrara la distancia mínima del nodo de partida a los otros nodos, en el orden que se encuentrana los nodos con respecto al nodo de inicio. - Este algoritmo encuentra la ruta más corta desde el nodo de inicio a todos los nodos de la red. Una representación del algoritmo de Dijkstra’s 1119 + 420 SLC.= SLC 599 599 BUT. BUT CHY. BOI BOI BOI. Seattle 1 497 SEA. 842 345 = + SLC SLC. SLC 497 497 180 138 Butte 691 Boise 4 345 Reno Cheyene Salt Lake City 440 7 526 8 6 102 432 621 291 10 Bakersfield 114 + 602 = SACSAC. 2 13 Los Angeles … Y de esta manera Kingman Barstow hasta cubrir 15toda la red..12 108 452 155 469 207 14 Albuque. Pheonix 386 403 16 118 San Diego Denver 9 Las Vegas 11 280 782 POR 612 POR. 180 180 5 Sac. 599 420 3 432 Portland + 432 = BOIBOI 1290 691 = + 17 425 Tucson 18 314 19 El Paso EJEMPLO 2 Ruta más corta 18 Una empresa distribuidora surte a 7 supermercados con distintas ubicaciones. Los administradores desean conocer la distancia más corta a cada uno de ellos, así como las distancias (Km) 19 SOLUCIÓN 20 Método tabular 21 22 23 EJEMPLO 3 RUTA MÁS CORTA 24 El costo de un automóvil cuesta 12,000 dólares, el costo de mantenimiento depende de la edad del auto al inicio del año (ver tabla). Con la finalidad de evitar el costo de mantenimiento alto, se da como cota inicial de un nuevo que es valorado de acuerdo a su edad (ver tabla). La preocupación es minimizar el costo neto incurrido en los próximos 5 años. 25 PRECIO DE MANTEN. ANUAL EDAD DEL AUTO 2000 4000 5000 9000 12000 0 1 2 3 4 PRECIO DEL AUTO POR COTA INICIAL 7000 6000 2000 1000 50 26 SOLUCIÓN 27 La red tendría {1,2,3,4,5,6} seis nodos el nodo i corresponde al inicio del año i; para i < j El arco (i, j) corresponde a la compra del auto nuevo al inicio del año i y conservarlo hasta el inicio del año j. La longitud del arco (i, j): llamado Ci, j es el costo neto total incurrido por ser el dueño y tener el auto desde el inicio del año i hasta el principio del año j, si se compra un auto nuevo al inicio del año i y se da como adelanto al inicio del año j 28 29 En miles de pesos: C12 = 2 C13 = 2 C14 = 2 12 – C15 =2 + 4 + 5 C16 =2+ 4 C23 = 2 C24 = 2 = 12 C25 =2+ 4+ C26 =2 + + + + 2 + +5 + + 12 4 4 = 21 9 +9 12 4 – + + 7 6 5 =7 = 12 + + + – + 12 12 7 12 – 1 = 31 + 12 = 44 = 7 – 6 5 4 + +5 12– +9 2 +12 = 21 – 1 = 31 30 31 Ejemplo 4 Ruta más corta 32 Una empresa de alquiler de carros desarrolla un plan de reemplazo para un horizonte de 5 años (2001 – 2005) se toma la decisión al principio de cada año si se mantiene el auto o lo reemplaza, el auto debe estar en servicio como mínimo un año, pero se debe remplazarlo después de 3 años. El cuadro siguiente represente el costo de reemplazo como función del año que se adquiere el auto y el número de años en operación. 33 AÑO EN EL QUE COSTO DE REEMPLAZO POR UNIDAD MONETARIO SE POR DETERMINADOS AÑOS DE OPERACIÓN ADQUIERE 20001 1 2 3 20002 4000 5400 9800 20003 4300 6200 8700 20004 4800 7100 ----- 20005 4900 ----- ----34 SOLUCIÓN 35 36 Algoritmo de Dijkstra con teoría de grafos ANEXO 37 Problemas de caminos mínimos. Definición: Dado un grafo ponderado G= (V, A) (dirigido o no) y un camino w1, w2, ..., wq en G, el costo del camino será la suma de los costos asociados a las aristas (w1, w2), ..., (wq-1, wq). Si el grafo es no ponderado, normalmente el costo se asocia con la longitud del camino. Problema de los caminos más cortos por un origen: Encontrar los caminos más cortos entre un nodo origen dado y todos los demás nodos. Algoritmo de Dijkstra Supongamos un grafo ponderado G (con pesos ≥ 0) y un nodo origen v. El algoritmo trabaja con dos conjuntos: – S: conjunto de nodos escogidos, para los cuales se conoce el camino de distancia mínima al origen. – C: conjunto de nodos candidatos, pendientes de calcular el camino mínimo. Conocemos los caminos mínimos al origen pasando por nodos de S. En cada paso coger del conjunto de candidatos el nodo con distancia mínima al origen. Recalcular los caminos de los demás candidatos pasando por el nodo cogido. 38 Problemas de caminos mínimos. Algoritmo de Dijkstra Un camino especial del origen a otro nodo cualquiera es un camino que sólo pasa por nodos ya escogidos. Supongamos que el nodo origen es el 1. En un array D[2, ..., N] se guarda la longitud del camino especial más corto a cada vértice. Cuando todos los nodos estén en S, todos los caminos son especiales y D contiene las distancias mínimas al origen. En otro array P[2, ..., N] se almacena el camino por el que pasa cada nodo v. El camino de 1 a v pasa por P[v]. Inicialmente D contendrá los caminos directos de 1 a los restantes nodos, es decir C[1, x]. Si no existe la arista (1, x) el costo será ∞. P contendrá el valor 1 (el camino es directo). S contendrá sólo el nodo 1. Buscar el nodo v de C=V-S con mínimo valor de D. Añadir v a S. Para el resto de nodos comprobar si el camino al origen es más corto pasando por el nodo v. if D[v]+C[v, w] < D[w] then begin D[w]:= D[v] + C[v, w]; P[w]:= v; 39 end; var Problemas de caminos mínimos. Algoritmo de Dijkstra procedure Dijkstra; S: array [2..N] of boolean; var i: integer; { Nodos conocidos } begin D: array [2..N] of integer; for i:= 2 to N do begin S[i]:= false; { Costos de los caminos } D[i]:= C[1, i]; P: array [2..N] of integer; P[i]:= 1; { Camino de 1 a v } end; C: array [1..N, 1..N] of integer; for i:= 1 to N-1 do begin { Matriz de costos de todas v:= vértice con D[v] mínimo y S[v]=false; las aristas } S[v]:= true; for cada nodo w adyacente a v do if S[w]=false then procedure ImprimeCamino (v: if D[v]+C[v, w]<D[w] then begin integer); D[w]:= D[v]+C[v, w]; begin P[w]:= v; if v<>1 then end; ImprimirCamino(P[v]); end; end; write(v); end; 40 Problemas de caminos mínimos. Algoritmo de Dijkstra Ejemplo: Mostrar la ejecución del algoritmo de Dijkstra sobre el siguiente grafo dirigido. 2 1 4 1 2 3 2 5 4 6 2 3 4 5 6 7 10 3 4 8 5 Nodo 2 6 7 1 S D P S D P S D P S D P S D P F F F F F F F F T F F F T F T F F F T T T F F F T T T T T T 2 ∞ 1 ∞ ∞ ∞ 1 1 1 1 1 1 Inicializ. 2 3 1 3 9 5 v=4 1 4 1 4 4 4 2 3 1 3 9 5 1 4 1 4 4 4 v=2 2 3 1 3 8 5 1 4 1 4 3 4 v=3 ..... 5, 7 2 3 1 3 6 5 1 4 1 4 7 4 v=6 41 Problemas de caminos mínimos. Algoritmo de Dijkstra Orden de complejidad del algoritmo, con matrices de adyacencia: – Inicialización: O(n). – Ejecutar n-1 veces: Buscar el elemento con D[v] mínimo y S[v] falso: O(n). Actualizar los valores de los nodos candidatos: O(n). – En total tenemos O(n2). Con listas de adyacencia: – – – – – – Inicialización: O(n). La actualización de los candidatos se limita a los nodos que son adyacentes a v. En total la actualización se hace O(a) veces. La búsqueda del elemento sigue requiriendo O(n) pasos, por lo que el orden total sería O(n2). Podemos usar una estructura ordenada para guardar los nodos candidatos (por ejemplo un árbol binario). La búsqueda requiere O(log n) en cada paso, en total O(n*log n). Además, en la actualización un nodo podría cambiar de posición en el árbol, luego requiere O(a*log n). En total, requiere O((a+n)*log n). Si el grafo es conexo: O(a*log n). Esta modificación será adecuada cuando a<<n2. 42 Problemas de caminos mínimos. Problema de los caminos más cortos entre cualquier par de nodos: Encontrar los caminos mínimos entre cualquier par de nodos. Posible solución: Aplicar el algoritmo de Dijkstra N veces. Podemos obtener la solución en O(n3) ó O((a+n)*n*log n). Algoritmo de Floyd Utiliza una matriz de adyacencia D[v, w], que será la matriz de costos. Inicialmente D[v, w] contendrá los costos de las aristas C[v, w]. En cada paso k, en la posición D[v, w] estará la longitud del camino óptimo que pasa (posiblemente) por los k primeros nodos. Al final del algoritmo, D almacenará los costos de los caminos mínimos. En el paso k, el nodo k actúa de pivote. Calcular, para cada camino de v a w, si es más corto pasando por k. – Dk[i, j]= min (Dk-1[i, j], Dk-1[i, k] + Dk-1[k, j]), para todo i≠j. – Dk[i, k]= min (Dk-1[i, k], Dk-1[i, k] + Dk-1[k, k]) ⇒ la fila y la columna k no varían en el paso k, luego sólo necesitamos una matriz D. 43