P. 1
Programación Dinámica Determinista

Programación Dinámica Determinista

|Views: 2.210|Likes:
Publicado porJean Paul Perea

More info:

Published by: Jean Paul Perea on Jun 22, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

08/16/2013

pdf

text

original

PROGRAMACIÓN DINÁMICA DETERMINÍSTICA

INTRODUCCIÓN A LA PROGRAMACIÓN DINÁMICA 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 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.

PROGRAMACIÓN DINÁMICA DETERMINÍSTICA 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.

NATURALEZA RECURSIVA DE LA PROGRAMACIÓN DINÁMICA 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.

RECURSIÓN 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.

ELEMENTOS DE UN PROBLEMA DE PROGRAMACIÓN DINÁMICA   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, conecta o vincula 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 DECISIÓN (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. FUNCIÓN 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

s2

x2

s3

x3

s4
f4(s4 , x4)

x4

f3(s3 , x3) f2(s2 , x2) f1(s1 , x1) Evolución del sistema

N n sn xn xn*

= número de etapas = etiqueta de la etapa actual (n = 1, 2, … N) = estado actual de la etapa n = variable de decisión de la etapa n = 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 con fn*+1(sn+1), que incluye las contribuciones de las etapas siguientes; al acumular esta cantidad con la contribución actual (por ejemplo la contribución inmediata csnxn) a la función objetivo se tiene a fn(sn , xn) como la contribución de la etapa n en adelante. Dados sn y n, sea xn* el mejor valor entre todos los valores que pueda adoptar xn al calcular su propio fn(sn , xn), y sea fn*(sn) el valor mínimo correspondiente a todos los fn(sn, xn). Entonces: fn*(sn) = min fn(sn , xn) = fn(sn , xn*) donde: fn(sn , xn) = costo mínimo inmediato (etapa n) + costo futuro mínimo (etapas n+1 en adelante) = csnxn + fn*+1(sn+1) Los valores de csnxn son los incurridos al establecer sn el estado actual y xn 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 atrás una etapa.

1

CARACTERÍSTICAS DE UN PROBLEMA DE PROGRAMACIÓN DINÁMICA Para que un problema pueda ser resuelto con la técnica de programación dinámica, debe cumplir con ciertas características: o o o o o El problema puede ser dividido en etapas, cada una de las cuales requiere de una política de decisión. Cada etapa se relaciona con una cierta cantidad de etapas. Cada etapa tiene cierto número de estados asociados con su inicio. La decisión óptima de cada etapa depende solo del estado actual y no de las decisiones anteriores. 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 PROGRAMACIÓN DINÁMICA 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 éste el que utiliza la filosofía de la programación dinámica)
B
7 4 6 2 3 6 2 4 3 4 1 3 3 5 4

E
1

Tomando en cuenta el siguiente sistema de caminos, si se encuentra inicialmente en el nodo A, encontrar la trayectoria más económica para llegar al nodo J considerando que los valores que se encuentran en las ramas representan los costos de trasladarse de un nodo a otro.

H
3

A

4

C

F
3 4

J I

D

G

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: Estado: Ruta a seleccionar: xn : destino inmediato de la etapa n, donde: (n = 1, 2, 3, 4) sn : lugar donde se encuentra en la etapa n A – x1 – x2 – x3 – x4, donde x4 = J

    

Como el destino final es J y se alcanza al terminar la etapa 4, entonces f5*(x4) = f5*(J) = 0 El objetivo es encontrar f1*(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: f4(s4 , x4)= cs x + f5*(x4)
4 4

2

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 tramo es desde s4 hacia J. Por lo tanto, f4*(s4) = f4(s4, J) = cs4J
s4 H I f4(s4 ,x4)= cs4x4 + f5*(x4) x4 = J J J Solución óptima f4*(s4) x4* 3 J 4 J

Etapa 3:
f3(s3 ,x3)= cs3x3 + f4*(x3) x3 = H x3 = I 1+3=4 4+4=8 6+3=9 3+4=7 3+3=6 3+4=7 Solución óptima f3*(s3) x3* 4 H 7 I 6 H

s3 E F G

Etapa 2:
f2(s2 ,x2)= cs2x2 + f3*(x2) x2 =E x2 =F x2 =G 7+4=11 4+7=11 6+6=12 3+4=7 2+7=9 4+6=10 4+4=8 1+7=8 5+6=11 Solución óptima f2*(s2) x2* 11 EoF 7 E 8 EoF

s2 B C D

Etapa 1:
f1(s1 ,x1)= cs1x1 + f2*(x1) x1 =B x1 =C x1 =D 2+11=13 4+7=11 3+8=11 Solución óptima f1*(s1) x1* 11 CoD

s1 A

Interpretación: Costo total =11 Ruta1: A-C-E-H-J, Ruta2: A-D-E-H-J, Ruta3: A-D-F-I-J

3

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->