ALGORITMO DE DIJKSTRA

4

Click here to load reader

Transcript of ALGORITMO DE DIJKSTRA

Page 1: ALGORITMO DE DIJKSTRA

ALGORITMO DE DIJKSTRA

En el grafo de arriba, los nodos 1, 2, 3, 4, 5, 6 y 7 representan las opciones entre la cuales se eligen para la búsqueda del camino más corto.

Entonces en el ejercicio suponemos que un Fabricante “1” necesita alcanzar al cliente “6” a través de su cadena de distribución (los nodos) cuyos costes (incluyen margen de ganancia), son representadas por las líneas continuadas.

El grafico se ha ordenado de modo tal que representan las relaciones entre ellos, así el fabricante tiene dos distribuidores principales, que son los nodos “4” y “2”.

Los nodos “4” y “2”, alcanzan a sus subdistribuidores, los subnodos “3” , “5” y “7”, y finalmente estos últimos subdistribuidores son proveedores directos del cliente nodo “6”.

Pregunta:

¿Si el Nodo Cliente está dispuesto a pagar como máximo el precio de la competencia , esto es 400 unidades monetarias, cual es la ruta de costes más corta (económica) para que el Fabricante “1” pueda alcanzar al cliente y con cuales distribuidores debe trabajar?

Desarrollar esta pregunta, requiere de conocer el denominado Algoritmo de Hedsger Dijkstra (1959), que utiliza los grafos ponderados no dirigidos.

Sea G = (V,E) un grafo conexo ponderado. Sean a y z nodos de G. Queremos hallar la longitud del camino más corto entre a y z. El algoritmo realiza una serie de iteraciones. Se construye un conjunto de nodos distinguidos, S, añadiendo un nodo en cada iteración. Ver que en nuestro grafo a es el nodo 1 y z es el nodo 6.

1

2

3

4 7

5

6

300

300

200

200

200

300

200

300

100

300

100

Page 2: ALGORITMO DE DIJKSTRA

Se realiza un proceso de etiquetado (labeling) en cada iteración: un nodo V se etiqueta con la longitud del camino más corto desde a hasta v, que contenga sólo nodos del conjunto de nodos distinguidos. El nodo que se añade al conjunto de nodos distinguidos es el que tiene una etiqueta minimal entre aquellos que no están en el conjunto.

Denotaremos por Sk al conjunto de nodos distinguidos después de la iteración k del proceso de etiquetaje. Empezamos con S0 = Ø, para k ≥ 1, Sk = Sk−1 U{u}, donde u ɇ Sk−1 y la etiqueta L(u) es la menor. A continuación se actualizan todas las etiquetas de los nodos que no están en S k de forma que Lk(v) (etiqueta en v en la etapa k) sea la longitud del camino (que sólo contiene nodos de Sk) más corto desde a hasta v.

Ahora, el camino más corto desde a hasta v conteniendo solo nodos de Sk es, el camino más corto desde a hasta u en la etapa k − 1 añadiéndole la arista {u, v}, o bien el camino más corto desde a hasta v que contiene sólo elementos de Sk−1 (es decir u no está incluido)

Lk(v) = min{Lk−1(v), Lk−1(u) + w(u, v)}

Cuando z se añada al conjunto de nodos distinguidos, la etiqueta de z será la longitud del camino más corto buscado desde a hasta z. La etiqueta Lk, muestra el coste menor de nuestra elección, siguiendo el algoritmo de Dijkstra.

Vamos a la prática:

1ra. Iteración: Nodo distinguido es “1”.

Partimos del nodo “1”. Desde aquí , tenemos dos nodos distribuidores “2” y “4”, los cuales tienen costes adicionales de 300 unidades (ambos iguales) por ello para el fabricante “1” es indistinto distinguir o seleccionar a cualquiera de estos nodos distribuidores como primer nodo de iteración. Elegimos al nodo “4”, y construimos las etiquetas Lk: [300,1] donde 300 es el coste y “1” el nodo desde donde llega.Elegimos al nodo “2” y tenemos la etiqueta [300,1], similar al del nodo “4”.

2da. Iteración: Nodo distinguido es “4” (pudo haber sido “2” por tener el mismo minimal).

Desde el nodo “4” al nodo “3” tenemos {etiqueta nodo “4” + 200} = [300+200, 4] = [500,4]Desde el nodo “4” al nodo “7” tenemos [300+300,4] = [600, 4] , porque es la suma de la etiqueta en el nodo “4” mas el coste adicional hacia el nodo “7”.Desde el nodo “4” al nodo “6” el cliente, tenemos [300 + 100, 4] = [400,4]

3ra Iteración: Nodo distinguido es “2” porque la etiqueta mínima es [300,1], las demás etiquetas son de mayor valor (ver nodos “3”, “6”, “7”).

Desde el nodo “2” al nodo “5” [300+200,2] = [500,2]Desde el nodo “2” al nodo “3” [300+100,2] = [400,2]

Nótese que en el nodo “3” tenemos dos etiquetas y el minimal es [400,2] por lo que tachamos el valor de la etiqueta [500,4] debido a ser un valor mayor.

Page 3: ALGORITMO DE DIJKSTRA

4ta Iteración: Nodo distinguido es “3” (pudo haber sido “6” por tener el mismo coste, pero el nodo “6” es el objetivo).Desde el nodo “3” hasta el nodo “5” tenemos [400+300,3] = [700,3]Desde el nodo “3” hasta el nodo “6” tenemos [400+200,3] = [600,3]

5ta Iteración: Nodo distinguido es “6” (tiene la etiqueta minimal menor que los restantes nodos sin calcular)Desde el nodo “6” hasta el nodo “5” [400+300,6] = [700,6]

Desde el nodo “6” hasta el nodo “7” [400+200,6] = [600,6]

6ta Iteración: Nodo distinguido es “5” (tiene la etiqueta minimal menor que el nodo restante “7”)Dado que todos los nodos que se relacionan con el nodo distinguido “5”, no podemos calcular ninguna ruta minima y queda el ejercicio finalizado.

Luego el menor coste para alcanzar al cliente “6” desde el fabricante “1” a través de los distribuidores y subdistribuidores es: [400,4]2, esto es desde el distribuidor “4” alcanzamos con el costo mínimo de 400 unidades en un segundo nivel (iteración). Elegir cualquier otra opción resultará más costosa y por ende significaría perder el negocio.

1

2

3

4 7

5

6

300

300

200

200

200

300

200

300

100

300

[300,1]1

[300,1]1

[500,4]2

[600,4]2

[400,4]2

100

[500,2]3

[400,2]3

[700,3

[600,3

[700,2]5

[600,6]5