You are on page 1of 3

ALGORITMO DE DIJKSTRA

200
2
5
300
300
300
100
200 6
1
3

300
200 200
100

4 7
300

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

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.

[300,1]1 [500,2]3
200 [700,2]5
2 5

300
300 [700,3]43
300
100
[600,3]43
1 200 6
[400,2]3 3
[500,4]2 [400,4]2

300
200 200
[300,1]1 1000

4 7
[600,6]5
300
[600,4]2

You might also like