Está en la página 1de 4

PROGRAMACIÓN DINÁMICA

Existe una serie de problemas cuyas soluciones pueden ser expresadas recursivamente
en términos matemáticos, y posiblemente la manera más natural de resolverlos es
mediante un algoritmo recursivo. la Programación Dinámica nos puede ofrecer una
solución aceptable. La eficiencia de esta técnica consiste en resolver los sub-problemas
una sola vez, guardando sus soluciones en una tabla para su futura utilización. La
Programación Dinámica no sólo tiene sentido aplicarla por razones de eficiencia, sino
porque además presenta un método capaz de resolver de manera eficiente problemas
cuya solución ha sido abordada por otras técnicas y ha fracasado. Donde tiene mayor
aplicación la Programación Dinámica es en la resolución de problemas de optimización.
En este tipo de problemas se pueden presentar distintas soluciones, cada una con un
valor, y lo que se desea es encontrar la solución de valor óptimo (máximo o mínimo). La
solución de problemas mediante esta técnica se basa en el llamado principio de óptimo
enunciado por Bellman en 1957 y que dice: “En una secuencia de decisiones óptima
toda subsecuencia ha de ser también óptima”. Hemos de observar que aunque este
principio parece evidente no siempre es aplicable y por tanto es necesario verificar que
se cumple para el problema en cuestión. Un ejemplo claro para el que no se verifica este
principio aparece al tratar de encontrar el camino de coste máximo entre dos vértices de
un grafo ponderado.

Para que un problema pueda ser abordado por esta técnica ha de cumplir dos
condiciones:
• La solución al problema ha de ser alcanzada a través de una secuencia de decisiones,
una en cada etapa.
• Dicha secuencia de decisiones ha de cumplir el principio de óptimo.
En grandes líneas, el diseño de un algoritmo de Programación Dinámica consta de los
siguientes pasos:
1. Planteamiento de la solución como una sucesión de decisiones y verificación de que
ésta cumple el principio de óptimo.
2. Definición recursiva de la solución.
3. Cálculo del valor de la solución óptima mediante una tabla en donde se almacenan
soluciones a problemas parciales para reutilizar los cálculos.
4. Construcción de la solución óptima haciendo uso de la información contenida en la
tabla anterior.

EL ALGORITMO DE DIJKSTRA
Sea ui la distancia más corta del nodo origen 1 al nodo i, y defina dij(≥0) como la longitud
del arco (i,j). El algoritmo define la etiqueta para un nodo j que sigue inmediatamente
como
[uj,i]=[uj+dij,i], dij≥0
La etiqueta para el nodo de inicio es [0,-], que indica que el nodo no tiene predecesor.
Las etiquetas de nodo en el algoritmo de Dijkstra son de dos tipos: temporales y
permanentes. Una etiqueta temporal en un nodo se modifica si puede hallarse una ruta
más corta al nodo. De lo contrario, el estado temporal cambia a permanente.
Paso 0. Etiquete el nodo de origen (nodo 1) con la etiqueta permanente [0,-]. Establezca
i=1
Paso general i:
(a) Calcule las etiquetas temporales [ui+dij,i] para cada nodo j con dij>0, siempre que j
no esté etiquetado permanentemente. Si el nodo j ya tiene una etiqueta
temporal existente [uj,k] hasta otro nodo k y si uj+dij<uj, reemplace [uj,k]con
[uj+dij,i]
(b) Si todos los nodos tienen etiquetas permanentes deténgase. De lo contrario,
seleccione la etiqueta [ur,s] que tenga la distancia más corta (=ur)entre todas las
etiquetas temporales (rompa los empates arbitrariamente). Establezca i=r y
repita el paso I

Ejemplo:
En la siguiente red orientada de 7 nodos, determinar las rutas mínimas desde el origen 1 hacia el
nodo 7, utilizando
a) El algoritmo de Dijkstra.
b) Programación Lineal

2
6
8 2 5
18
8
1 3 4 7
14
2 6 12
8 4
8
4

Algoritmo de Dijkstra:
Iteración 0. Asigne una etiqueta permanente [0,-] al nodo 1
Iteración 1. Se puede llegar a los nodos 2, 3 y 4 desde el nodo 1 (el último etiquetado
permanente). Así, la lista de nodos etiquetados (temporales y permanentes) es

Nod Etiqueta Estado


o
1 [0,-) Permanent
e
2 [0+8,1]=[8,1] Temporal
3 [0+14,1]=[14,1 Temporal
]
4 [0+8,1]=[8,1] Temporal

Para las tres etiquetas temporales [8,1], [14,1] y [8,1], el nodo 2 y 4 dan la distancia
mínima y como hay un empate lo rompo con el nodo 4 (u4=8). De este modo, el estado
del nodo 4 pasa a permanente.
Iteración 2. Se puede llegar al nodo 6 desde el nodo 4, y la lista de los nodos etiquetados
es
Nod Etiqueta Estado
o
1 [0,-) Permanent
e
2 [8,1] Temporal
3 [14,1] Temporal
4 [8,1] Permanent
e
6 [8+8,4]=[16,4 Temporal
]

Para las tres etiquetas temporales, el nodo 2 da la distancia mínima (u2=8). De este modo,
el estado del nodo 2 cambia a permanente.
Iteración 3. Desde el nodo 2 se puede llegar a los nodos 3 y 5 Así, la lista de los nodos
etiquetados se actualiza como
Nod Etiqueta Estado
o
1 [0,-) Permanent
e
2 [8,1] Permanent
e
3 [8+2,2]=[10,2 Temporal
]
4 [8,1] Permanent
e
6 [16,4] Temporal
5 [8+6,2]=[14,2 Temporal
]

Para las tres etiquetas temporales, el nodo 3 da la distancia mínima (u3=10). De este
modo, el estado del nodo 3 cambia a permanente.
Iteración 4. Desde el nodo 3 se puede llegar a los nodos 5 y 6 Así, la lista de los nodos
etiquetados se actualiza como
Nod Etiqueta Estado
o
1 [0,-) Permanent
e
2 [8,1] Permanent
e
3 [10,2] Permanent
e
4 [8,1] Permanent
e
6 [10+2,3]=[12,3 Temporal
]
5 [14,2] Temporal

Para las dos etiquetas temporales, el nodo 6 da la distancia mínima (u6=12). De este
modo, el estado del nodo 6 cambia a permanente.
Iteración 5. Desde el nodo 6 se puede llegar a los nodos 5 y 7 Así, la lista de los nodos
etiquetados se actualiza como
Nod Etiqueta Estado
o
1 [0,-) Permanent
e
2 [8,1] Permanent
e
3 [10,2] Permanent
e
4 [8,1] Permanent
e
6 [12,3] Permanent
e
5 [14,2] Temporal
7 [12+12,6]=[24,6 Temporal
]

Para las dos etiquetas temporales, el nodo 5 da la distancia mínima (u5=14). De este
modo, el estado del nodo 5 cambia a permanente.
Iteración 6. Desde el nodo 5 se puede llegar a nodo 7 Así, la lista de los nodos
etiquetados se actualiza como
Nod Etiquet Estado
o a
1 [0,-) Permanent
e
2 [8,1] Permanent
e
3 [10,2] Permanent
e
4 [8,1] Permanent
e
6 [12,3] Permanent
e
5 [14,2] Permanent
e
7 [24,6] Temporal

Como pasar del nodo 5 al nodo 7 la etiqueta sería [14+18,5]=[32;5] que es una etiqueta
mayor a la etiqueta que tiene el nodo 7 que es [24,6] , se queda con la etiqueta [24,6] y se
vuelve permanente y finaliza.
La solución óptima es: 7 viene de 6, 6 viene de 3, 3 viene de 2 y 2 viene de 1
(12367) con un recorrido mínimo de 24

Programación Lineal
Si definimos las variables de decisión:

x ij= {1 si se mueve del nodo i al nodo j


0 si no se mueve del nodo i al nodo j

Min Z=8X12+14X13+8X14+6X25+2X23+8X35+2X36+4X34+8X46+18X57+4X65+12X67
s.a.
X12+X13+X14=1
X12=X23+X25
X13+X23=X35+X36+X34
X14+X34=X46
X25+X35+X65=X57
X36+X46=X65+X67
X57+X67=1
Aplicando el método Simplex se llega a la solución:
X12=X23=X36=X67=1 los demás valores de Xij con valor cero y Z=24

También podría gustarte