14
La Ruta más Corta (Algoritmo Acicliclo) Descripción de la Ruta más Corta usando el algoritmo aciclico Un algoritmo clásico de Investigación de Operaciones es el de La Ruta más Corta , usado por ejemplo para encontrar en una serie de ciudades conectadas por carreteras, la ruta para llegar de una ciudad a otra, siguiendo una trayectoria mínima. Existen dos tipos principales de algoritmos: Cíclicos y Acíclicos . 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.

La Ruta más Corta

Embed Size (px)

Citation preview

Page 1: La Ruta más Corta

La Ruta más Corta (Algoritmo Acicliclo)

Descripción de la Ruta más Corta usando el algoritmo aciclico

 

 Un algoritmo clásico de Investigación de Operaciones es el de La Ruta más Corta,

usado por ejemplo para encontrar en una serie de ciudades conectadas por carreteras, la ruta para llegar de una ciudad a otra, siguiendo una trayectoria mínima. Existen dos

tipos principales de algoritmos: Cíclicos y Acíclicos. 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.  

Consideremos la siguiente red:  

Page 2: La Ruta más Corta

 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".  

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"]  

Page 3: La Ruta más Corta

  

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

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"]. 

Page 4: La Ruta más Corta

   

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

 

  

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 más Corta

  

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   

Page 6: La Ruta más Corta

La Ruta más Corta (Algoritmo Cicliclo)

Descripción de la Ruta Más Corta usando el algoritmo ciclico

 La diferencia principal del algoritmo acíclico y el cíclico  es que el cíclico permite

trabajar con lazos mientras el algoritmo cíclico no lo permite. Por lo tanto el algoritmo cíclico es mucho más general.

 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 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

Page 7: La Ruta más Corta

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.  do you got it?

  

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 permitida de una ciudad a otra. Las distancias (o costo de transporte) entre ciudades

esta 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.

 

 Paréntesis: Este método como muchos de Investigación de Operaciones, es práctico cuando el número de combinaciones es muy grande como para que una enumeración

exhaustiva sea mejor. Por ejemplo, en la red anterior se puede fácilmente de una manera visual, evaluar cuál es la ruta más corta, sin tener que apelar a algoritmos de etiquetado, ni Disktra, ni nada de eso... bueno y entonces como para que o que, nos

desgastamos, yo escribiendo esto, y usted leyéndolo?  Pues por que una cosa son míseros 7 nodos, y otra cosa muy diferente serían 100... así que sigamos adelante!

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 8: La Ruta más Corta

 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

Page 9: La Ruta más Corta

cambiarla por esta última. Como se dice por acá: "nos resbala", así que dejemos la que tiene actualmente.

 

 

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

Page 10: La Ruta más Corta

[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"]  

 

 

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"].  

Page 11: La Ruta más Corta

 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.  

Ya podemos leer la trayectoria que da una mínima distancia: G-E-C-A, con una distancia mínima de 16.

Page 12: La Ruta más Corta