PROGRAMACIÓN DINAMICA
DETERMINÍSTICA
Ing. Manuel Sánchez Terán
INVESTIGACION DE
OPERACIONES II
PROGRAMACION DINAMICA DETERMINISTICA
INTRODUCCION A LA PROGRAMACION DINAMICA
Una forma razonable y comúnmente empleada de resolver un problema es
definir o caracterizar su solución en términos de las soluciones de
subproblemas del mismo. Esta idea proporciona métodos eficientes de
solución para problemas en los que los subproblemas son versiones más
pequeñas del problema original. La programación dinámica es útil para
resolver un problema donde se deben tomar una serie de decisiones
interrelacionadas.
La programación dinámica encuentra la solución óptima de un problema con n
variables, descomponiéndolo en n etapas, siendo cada etapa un subproblema
de una sola variable. Conviene resaltar que a diferencia de la programación
lineal, el modelado de problemas de programación dinámica no sigue una
forma estándar. Así, para cada problema será necesario especificar cada uno
de los componentes que caracterizan un problema de programación dinámica.
La solución de problemas mediante esta técnica se basa en el llamado
principio de optimalidad que establece la idea de que: Dado el estado actual,
la decisión óptima para cada una de las etapas restantes no tiene que
depender de los estados ya alcanzados o de las decisiones tomadas
previamente.
Esta técnica llega a una solución trabajando, por lo general, hacia atrás;
partiendo del final del problema hacia el principio, por lo que un problema
enorme e inmanejable se convierte en una serie de problemas más pequeños y
manejables.
La programación dinámica se utiliza tanto en problemas
lineales como no lineales.
NATURALEZA RECURSIVA DE LA PROGRAMACION DINAMICA
Los cálculos de programación dinámica se hacen en forma recursiva, ya
que la solución óptima de un subproblema se usa como dato para el siguiente
subproblema. Para cuando se resuelve el último subproblema se obtiene la
solución óptima de todo el problema. La forma en la que se hacen los
cálculos recursivos depende de cómo se descomponga el problema original.
En particular, los subproblemas se vinculan normalmente mediante
restricciones comunes. Al pasar de un subproblema al siguiente se debe
mantener la factibilidad de esas restricciones comunes.
RECURSION EN AVANCE Y EN REVERSA
Se usa la recursión en avance, cuando los cálculos se hacen de la primera
etapa a la última etapa; y se usa la recursión en reversa, cuando los cálculos se
hacen de la última etapa a la primera etapa.
Con las recursiones en avance y en reversa se obtiene la misma solución.
Aunque el procedimiento en avance parece más lógico, en las publicaciones
sobre programación dinámica se usa la recursión en reversa. La razón de
esta preferencia es que, en general, la recursión en reversa es más eficiente
desde el punto de vista computacional.
Ing. Manuel 1
Sánchez Terán
INVESTIGACION DE
OPERACIONES II
PROGRAMACION DINAMICA DETERMINISTICA
En este tipo de programación dinámica, el estado de la siguiente etapa está
determinado por completo por el estado y la política de decisión de la etapa
actual. El caso probabilístico es en el cual existe una distribución de
probabilidad del valor posible del siguiente estado. Se analizará
posteriormente.
Ing. Manuel
2 Sánchez Terán
ELEMENTOS DE UN PROBLEMA DE PROGRAMACION
DINAMICA
ETAPA (n) Es el período de tiempo, lugar, fase o situación en donde se
produce un cambio debido a una decisión (xn).
ESTADO (sn) Muestra la situación actual del sistema cuando nos
encontramos en la etapa n. En la
terminología de la programación dinámica, a sn se le llama estado del
sistema en la etapa n. De hecho, se considera que el estado del sistema en
la etapa n es la información que enlaza las etapas, de tal modo que se
puedan tomar las decisiones para las etapas restantes sin volver a
examinar cómo se llegó a las decisiones de las etapas anteriores. También
se puede decir que por estado se quiere dar a entender la información que
se necesita en cualquier etapa para tomar una decisión óptima.
VARIABLES DE DECISION (xn) Hacen referencia a toma de decisiones (o
política de decisión) que se producen en una etapa y que produce un
cambio en el estado actual del sistema.
FUNCION RECURRENTE (fn) Refleja el comportamiento del sistema en
función de los estados y de las variables de decisión: fn(sn, xn). La
recursión relaciona el costo o la contribución ganada durante alguna
etapa con el costo o la contribución ganada en la etapa posterior de forma
acumulativa.
La programación dinámica se puede describir en un diagrama como el siguiente:
n=1 n=2 n=3 n=4
s1 x1 x2 x3 s4 x4
s2
s3
f4(s4 , x4)
f3(s3 ,
f2(s2 , x3 )
f1(s1 , x1) x2 )
Evolución del sistema
N = número de etapas
n = etiqueta de la etapa actual (n = 1, 2, … N)
sn = estado actual de la etapa n
xn = variable de decisión de
la etapa n xn* = valor
óptimo de xn (dado sn)
En la etapa n, el proceso se encuentra en algún estado sn. Al tomar la decisión
xn se mueve a algún estado sn+1 en la etapa n+1, etapa en la que se habría
contribuido (bajo la perspectiva de la recursión en reversa) con fn*+1(sn+1), que
incluye las contribuciones acumuladas de las etapas siguientes; al considerar
esta cantidad con la contribución actual (llamémosle csn,xn) a la función
objetivo se tiene a fn(sn , xn) como la contribución de la etapa n en adelante.
Dados n y sn para un problema de minimización, y sea xn* el mejor valor
entre todos nlos valores que pueda
n n n adoptar
n x al calcular su propia f (s , x ), y
n
sea f *(s ) el valor mínimo correspondiente a todos los fn(sn, xn). Entonces:
fn*(sn) = min fn(sn , xn) =
n
fn(sn , x *) donde:
*
fn(sn , xn) = costo mínimo inmediato (etapa n) + costo mínimo futuro (etapas n+1 en
adelante) = csn,xn + fn +1(sn+1)
Los valores de csn,xn son los incurridos al establecer sn como el estado
actual y xn como el destino inmediato. Seleccionando el valor óptimo a la
variable xn* y determinando la contribución total a la función objetivo fn*(sn),
el procedimiento de solución se mueve a la siguiente etapa.
CARACTERISTICAS DE UN PROBLEMA DE PROGRAMACION DINAMICA
Para que un problema pueda ser resuelto con la técnica de programación
dinámica, debe cumplir con ciertas características:
o El problema puede ser dividido en etapas, cada una de las cuales
requiere de una política de decisión.
o Cada etapa se relaciona con una cierta cantidad de etapas.
o Cada etapa tiene cierto número de estados asociados con su inicio.
o La decisión óptima de cada etapa depende solo del estado actual y no de
las decisiones anteriores.
o La decisión o política de decisión tomada en una etapa determina el
modo en que el estado de la
etapa actual se transforma en el estado de la etapa siguiente.
EJEMPLO PROTOTIPO DE PROGRAMACION DINAMICA
El siguiente problema se elaboró especialmente para ilustrar las
características de la programación dinámica e introducir la terminología
empleada en ésta. (Pudiera relacionárselo con el modelo de red de la ruta
más corta, pero en realidad es este modelo el que utiliza la filosofía de la
programación dinámica)
7
B E
Tomando en cuenta el siguiente 4 1
6 4
sistema de caminos, si se 2
H
encuentra inicialmente en el 3
6
3
nodo A, encontrar la trayectoria A
4
C
2
F J
más económica para llegar al 4 3
4
nodo J considerando que los 3 I
valores que se encuentran en 4 3
1 3
las ramas representan los D 5
G
costos de trasladarse de un
nodo a otro.
Solución:
Si se tomara la decisión de ir por la ruta más barata en cada etapa, ésta
sería: A – B – F – I – J con un costo total asociado de 13. Pero note que si
desde el nodo A llegamos al nodo F mediante D, en lugar de ir por B el
costo sería menor.
El evaluar todas las posibles rutas y sus costos asociados sería una
tarea tediosa. Mediante la programación dinámica se puede hallar la
solución con mucho menor esfuerzo.
Variables de decisión: xn : destino siguiente de la etapa n, donde: (n = 1,
2, 3, 4)
Estado: sn : lugar donde se encuentra en la etapa n
Ruta a seleccionar: A – x1 – x2 – x3 – x4, donde x4 = J
El destino final es J y se alcanza al terminar la etapa 4.
El objetivo es encontrar
1 f *(A) y la ruta correspondiente. La programación
dinámica la encuentra al* * * *
determinar en forma sucesiva f4 (s4), f3 (s3), f2 (s2) y f1 (s1)
Función recursiva: fn(sn , xn)=* cs x + fn+1 (xn)
n n
Etapa 4:
Cuando se está en la última etapa, el destino final es x4 = J y su estado
actual s4 puede ser H o I, de manera que su último
4 4 tramo
4 4 es desde s4 hacia
4J
J. Por lo tanto, f *(s ) = f(s , J) = cs
f4(s4 ,x4)= cs4x4 Solución óptima
s4 x4 = J f4*(s4) x4 *
H J 3 J
I J 4 J
Etapa 3:
f3(s3 ,x3)= cs3x3 + f4*(x3) Solución óptima
s3 x3 = H x3 = I f3*(s3) x3 *
E 1+3=4 4+4=8 4 H
F 6+3=9 3+4=7 7 I
G 3+3=6 3+4=7 6 H
Etapa 2:
f2(s2 ,x2)= cs2x2 + f3*(x2) Solución óptima
s2 x2 =E x2 =F x2 =G f2*(s2) x2 *
B 7+4=11 4+7=11 6+6=12 11 EoF
C 3+4=7 2+7=9 4+6=10 7 E
D 4+4=8 1+7=8 5+6=11 8 EoF
Etapa 1:
f1(s1 ,x1)= cs1x1 + f2*(x1) Solución óptima
s1 x1 =B x1 =C x1 =D f1*(s1) x1 *
A 2+11=13 4+7=11 3+8=11 11 CoD
Interpretación:
Costo total =11 Ruta1: A-C-E-H-J, Ruta2: A-D-E-H-J, Ruta3: A-D-
F-I-J