la ruta mas corta

15
1 INVESTIGACIÓN DE OPERACIONES II LA RUTA MÁS CORTA LIC RAFAEL GONZÁLEZ FREITES PEPELO 2.4 Problema de la ruta más corta El problema de la ruta más corta tiene que ver con la determinación de las ramas conectadas en una red de transporte que constituyen, en conjunto la distancia más corta entre una fuente y un destino. Existen dos algoritmos para encontrar la ruta más corta en redes acíclicas y cíclicas. Se dice que una red es acíclica si no contiene lazos; de otra manera, es cíclica. Los algoritmos Acíclicos son usados en redes que no tienen ciclos, es decir que no tienen rutas que partiendo de un nodo lo lleven a él mismo de nuevo. Los ciclos son también llamados "lazos". Los algoritmos cíclicos son para las redes que tienen ciclos o lazos... o en español vueltas en redondo. Un ejemplo de un lazo: Si del nodo "A" puedo ir al nodo "B", y del nodo "B" puedo ir al "C" y del "C" al "D" y del "D" puedo retornar al "A" de nuevo, ahí hay un lazo o un ciclo. Las flechas indican en que sentido esta permitido el movimiento. Algoritmo Acíclico: Si la red no tiene ciclos, apliquemos el siguiente algoritmo: Etiquetar cada nodo con el siguiente formato [distancia desde el nodo inicial, Nombre del Nodo Precedente]. Para el nodo inicial por definición la distancia es cero (la distancia a sí mismo), y el nodo precedente es vacío (ninguno): [0 , ] . Después para cada nodo, se analiza los nodos que lo preceden por las flechas, se escoge aquel cuya distancia al nodo inicial más la distancia al nodo presente sea mínima. Se etiqueta con la suma, y el nombre del nodo escogido... bueno, esto en carreta es muy enredador... mejor con un ejemplo, paso a paso.

Upload: rafael-gonzalez

Post on 13-Apr-2017

431 views

Category:

Engineering


4 download

TRANSCRIPT

Page 1: La ruta mas corta

1

INVESTIGACIÓN DE OPERACIONES IILA RUTA MÁS CORTA

LIC RAFAEL GONZÁLEZ FREITES PEPELO

2.4 Problema de la ruta más corta

El problema de la ruta más corta tiene que ver con la determinación de las ramas conectadas en una red de transporte que constituyen, en conjunto la distancia más corta entre una fuente y un destino.

Existen dos algoritmos para encontrar la ruta más corta en redes acíclicas y cíclicas. Se dice que una red es acíclica si no contiene lazos; de otra manera, es cíclica.

Los algoritmos Acíclicos son usados en redes que no tienen ciclos, es decir que no tienen rutas que partiendo de un nodo lo lleven a él mismo de nuevo. Los ciclos son también llamados "lazos".

Los algoritmos cíclicos son para las redes que tienen ciclos o lazos... o en español vueltas en redondo. Un ejemplo de un lazo: Si del nodo "A" puedo ir al nodo "B", y del nodo "B" puedo ir al "C" y del "C" al "D" y del "D" puedo retornar al "A" de nuevo, ahí hay un lazo o un ciclo. Las flechas indican en que sentido esta permitido el movimiento.

Algoritmo Acíclico:

Si la red no tiene ciclos, apliquemos el siguiente algoritmo:

Etiquetar cada nodo con el siguiente formato [distancia desde el nodo inicial, Nombre del Nodo Precedente]. Para el nodo inicial por definición la distancia es cero (la distancia a sí mismo), y el nodo precedente es vacío (ninguno): [0 , ] . Después para cada nodo, se analiza los nodos que lo preceden por las flechas, se escoge aquel cuya distancia al nodo inicial más la distancia al nodo presente sea mínima. Se etiqueta con la suma, y el nombre del nodo escogido... bueno, esto en carreta es muy enredador... mejor con un ejemplo, paso a paso.

Los nodos pueden representan sitios (p.e ciudades, facilidades, etc) las flechas (también llamadas Arcos) indican las trayectorias permitidas y sobre ellas están las distancias (pero también puede representar el costo de desplazamiento, o el nivel de riesgo, o un producto de ambos).

Encontremos la distancia más corta entre el nodo "A" y el nodo "G".

Page 2: La ruta mas corta

2

1. Rotular el Nodo Inicial: Recordemos el formato del rótulo es : [distancia al primer nodo, nodo precedente]. La distancia al primer nodo, es la distancia a sí mismo en éste caso, por lo tanto es cero. El nodo precedente: como no viene de ningún nodo, lo rotulamos vacio: [ 0, ] :

2. Rotular todos los nodos que dependan unicamente del nodo inicial:

A el Nodo B se puede llegar desde el Nodo A, con la ruta A-C-B o con la ruta A-D-C-B. Asi que depende de otros nodos a parte del Nodo inicial. Lo mismo podemos decir del Nodo C. Pero...

... Pero al Nodo D sólo se puede llegar directamente desde el Nodo A. Este es el nodo que vamos a rotular, y si hubieran más como él también los rotulariamos, pero en este ejemplo sólo tenemos el D.

El rótulo del Nodo D, es : [distancia mínima desde el Nodo Inicial, Nodo Precedente]. La distancia mínima desde el Nodo Inicial al Nodo D es 15: pos no hay otra alternativa, che! y el Nodo Precedente el "A". Rótulo: [15, "A"]

3. Rotular Todos los Nodos que tengan la información suficiente para rotularlos:

La información necesaria para rotular un Nodo con este algoritmo, es que todos los Nodos de los que dependa, deben estar ya rotulados. Por ejemplo el Nodo B: depende del A y del C. El Nodo A ya esta rotulado, pero el C aún no. Así que aún no se puede

Page 3: La ruta mas corta

3

rotular el Nodo B. El Nodo C depende del A y del D, y ambos estan rotulados, así que si podemos rotularlo. La distancia desde A es 8, y desde D es: la distancia que tiene en el rótulo (que es la distancia mínima desde él al Nodo inicial, o sea 15), MAS la distancia entre D y C = 15 +4 = 19: entre 8 y 19 es más pequeño 8. Así que escogemos el Nodo A como precedente: el rótulo es [ 8 , "A"]

4. Seguir rotulando todos los Nodos que tengan información suficiente hasta llegar al Nodo deseado:

G. Ahora ya hay información suficiente para rotular los Nodos B y F. Entonces rotulemos el Nodo B (no importa cuál se haga primero, igual hay que rotularlos todos). El rotulo para el Nodo B: La distancia desde A es 10, la distancia mínima al Nodo inicial desde C es: el la distancia del rótulo de C: 8 + la distancia de C a B : 3 => 8 + 3 = 11. El mínimo entre 10 y 11 es 10. Rótulo= [10, "A"].

Rótulo para el F: Desde C : 8 + 4 = 12 y desde D : 15 + 15 = 30. Entonces el Rótulo es [12, "C" ]

Page 4: La ruta mas corta

4

Rótulo para el Nodo E: Desde B : 10 + 20 = 30 y desde C: 8 + 15 = 23 Rótulo : [23,"C"]

Por último para el Nodo G: la distancia desde E es 23 + 5 = 28 y desde F es 12 + 3 = 15 Rótulo [15, F]

Page 5: La ruta mas corta

5

Ahora se puede leer la trayectoria mínima partiendo del rótulo del Nodo G, dicho rotulo nos dice que viene del F el de F dice que viene del C y el del C dice que viene del A. Solución: Distancia Mínima= 15 Ruta Más Corta = A-C-F-G

Algoritmo cíclico:

La diferencia principal del algoritmo acíclico y el cíclico es que el cíclico permite trabajar con lazos mientras el algoritmo acíclico no lo permite. Por lo tanto el algoritmo cíclico es mucho más general.

El algoritmo cíclico difiere del algoritmo acíclico en el sentido que permite tantas oportunidades como sean necesarias para reevaluar un nodo. Cuando resulta evidente que se ha alcanzado la distancia más corta a un nodo, éste se excluye de cualquier consideración posterior. El proceso termina cuando se ha evaluado el nodo destino

La idea principal del algoritmo cíclico es muy parecida al del acíclico; pero en este se trabaja con dos tipos de etiquetas: Etiquetas Temporales y Etiquetas Permanentes. El formato de la etiqueta es el mismo: [distancia mínima encontrada al nodo inicial, Nombre del Nodo Precedente]. El algoritmo cíclico es también conocido como algoritmo de Dijkstra.

El Algoritmo se describe así:

Rotular todos los nodos a los que se puede llegar desde el nodo inicial con etiquetas temporales, la etiqueta que se les pondrá será [distancia desde el nodo inicial, Nombre del Nodo Inicial]. Aquí no nos va a importar que estos nodos tengan caminos desde otros nodos diferentes al nodo inicial, a diferencia del algoritmo anterior. Sencillamente se rotulan como se describió.

Evaluar de todas los nodos con etiquetas temporales, cual posee la distancia más corta en la etiqueta. Marcarlo como Etiqueta Permanente (para esto puede usar un asterisco).

Etiquetar todos los nodos a los que se pueda llegar desde el último nodo con etiqueta permanente, si ya tienen una etiqueta temporal, esta se reevalúa con respecto a la distancia del nodo permanente con que se está trabajando. Si la distancia que da (o sea la distancia de la etiqueta permanente + la distancia al nodo evaluado ) es menor que la que tiene en la etiqueta ésta es cambiada por una nueva etiqueta con la distancia calculada a la de la etiqueta permanente.

Se chequean todas las etiquetas temporales existentes, la que tenga la distancia más pequeña se marca como etiqueta permanente y se repite el paso anterior hasta que todas las etiquetas sean permanentes.

Ejemplo:

Supongamos que existen 7 ciudades interconectadas (o sitios cualquiera: barrios en una ciudad, departamentos en una fabrica, etc.), cada línea representa la trayectoria

Page 6: La ruta mas corta

6

permitida de una ciudad a otra. Las distancias (o costo de transporte) entre ciudades está representado por un valor sobre la línea. Se pregunta por la secuencia de ciudades que dan la distancia mínima entre la ciudad A y la ciudad G.

Etiquetar todos los nodos a donde pueda llegar desde el nodo inicial: Es decir los nodos B, C y D.

Etiqueta para el nodo B: Es distancia desde el nodo que viene = 4, nombre del nodo que viene = "A"

Etiqueta= [4,"A"] , de manera análoga para el nodo C = [5, "A"] y el nodo D = [3, "A"]

Page 7: La ruta mas corta

7

2. Evaluar cual de todas las etiquetas temporales, tiene la mínima distancia para que sea convertida en etiqueta permanente. Marquemos como etiqueta permanente, con un asterisco. En nuestro caso hay tres etiquetas temporales, [4,"A"], [5,"A"] y [3,"A"]. La que tiene la menor distancia es [3,"A"] en el nodo D. La convertimos en etiqueta permanente.

3. Ahora, con base en la ultima etiqueta permanente (la del nodo D por supuesto), se etiquetan todos los nodos a los que se pueda llegar desde el Nodo D (el de la última etiqueta permanente). En nuestro caso, son los Nodos C y F. La etiqueta para el Nodo F es [3+7=10, "D"], es decir [10, D], para el Nodo C, se puede colocar la etiqueta [3+2, "D"] = [ 5 ,"D"]. Da igual dejar la etiqueta actual, que tiene una distancia de 5, que cambiarla por esta última. Como se dice por acá: "nos resbala", así que dejemos la que tiene actualmente.

Page 8: La ruta mas corta

8

4. De nuevo se evalúa de todas las etiquetas temporales, cual es la que tiene la distancia más pequeña:[4,"A"], [5,"A"] y [10,"A"]. El nodo B que tiene la etiqueta temporal con la distancia más pequeña, se pasa a tener una etiqueta permanente.

5. Etiquetar todos los nodos a los que se puede llegar desde el nodo con la última etiqueta permanente, es decir el B. Estos nodos son el C y el E. La etiqueta probable para el nodo C sería [4+3, "B"]= [7,"B"], pero como ya tiene una etiqueta temporal de [5,"A"], que tiene una distancia menor, pues ni soñamos con cambiarla!!! Dejémosla quietecita y miremos el Nodo E. La etiqueta para el Nodo E es [4+6, "B"] = [10, "B"]

Page 9: La ruta mas corta

9

6. Evaluar de todas las etiquetas temporales, cual es la que tiene la distancia más corta: [10,"B"], [5,"A"] y [10,"D"]. La de menor distancia es la [5,"A"]. La marcamos como etiqueta permanente. Ahora etiquetar todos los nodos a los que se puede llegar desde el Nodo C y que no tengan ya, una etiqueta permanente. Estamos hablando del Nodo E, F y G. Para el Nodo E la etiqueta sería [5+4,"C"] =[9,"C"], que nos da una distancia menor que la que tiene ([10,"B"]). Por lo tanto la cambiamos. Para el Nodo F nos da [5+5,"C"]=[10,"C"], como ya tiene una etiqueta con 10, nos es indiferente y no la cambiamos. Para el Nodo G la etiqueta es [5+25, "C"]=[30,"C"].

7. Evaluar cual de las etiquetas temporales tiene la distancia más corta: [9,"C"], [10, "D"] y [30,"C"]. Gana el nodo E. Lo marcamos como etiqueta permanente y desde él evaluamos para rotular a todos los nodos a los que pueda llegar, con etiquetas temporales: F y G. Para el Nodo F, lo dejamos como esta por que la distancia nos da 9+6 = 15 que es mayor que el que tiene actualmente 10, pero para el Nodo G el rotulo es [9+7,"E"] = [16, "E"].

Quedan como rótulos temporales el del nodo F y G. El menor es el del Nodo F, se marca como permanente... no hay más rótulos temporales excepto el del Nodo G y el Nodo G quedaría como [10+8, "G"]=[18,"G"] que es mayor que el que ya tiene, así que mejor dejémoslo quietico y por último marquémoslo como etiqueta permanente.

Page 10: La ruta mas corta

10

Page 11: La ruta mas corta

11

Page 12: La ruta mas corta

12

Page 13: La ruta mas corta

13