Está en la página 1de 14

Apuntes de Programación dinámica

Carlos Varga Trujillo

Programación dinámica en tiempo discreto


La programación dinámica es una técnica matemática ideada para dar solución a problemas
de optimización en los cuales se optimiza una función a lo largo de un horizonte temporal,
para este fin se toma una serie de decisiones (optimas) de forma secuencial a lo largo de
dicho horizonte temporal. Los instantes de decisión son los puntos en el tiempo en los cuales
se toman decisiones. Estos instantes de decisión forman un conjunto T que puede
clasificarse de dos formas: como un conjunto discreto o como uno continuo. En el caso de
un conjunto discreto el agente toma decisiones en cada uno de los instantes t  T En cambio,
cuando es un conjunto continuo, las decisiones se toman en puntos aleatorios del tiempo
cuando ocurren determinados eventos o en instantes temporales elegidos por el tomador de
decisiones (agente). En estas notas de clase estudiaremos el caso en el que T es un conjunto
discreto finito T = 0;1; ;T  o infinito T = N . En el caso discreto un instante de decisión
corresponde al inicio de una etapa y cada etapa viene definida por varios elementos (estado,
acción (o control), beneficio (o recompensa). A continuación, presentamos formalmente el
problema.

● Presentación del problema básico (Problema con horizonte finito)


El problema por considerar es:
T
maximizar
u0 ;u1 ; ;uT
 f (u ; x )
t =0
t t
(1)
sujeto a xt +1 = g (ut ; xt ), t=0;1 ;T, x0 dado

Los “ingredientes” de este problema son:

● La variable de estado xt cuyo valor se determina para cada instante t 0;1; ; T + 1 . Esta
variable generalmente representa stocks, y, por lo tanto, cuentan con una ley de
acumulación (también llamada ley de transición) que va actualizando sus valores.
Consideraremos que x t   R para t=0;1 ;T+1

● La variable de control (acción) ut en el periodo (instante) t , para t 0;1; ; T  y que son


los instrumentos con los que cuenta el tomador de decisiones para optimizar su función
objetivo. Consideraremos que ut  *  R para t=0;1 ;T

● Una función de pago o utilidad instantánea, f : *   → R, f (ut ; xt ) , que determina el


beneficio inmediato de tomar el control ut cuando el estado (en ese mismo instante) es xt

1
● Una función de transición, g : *   → R, g (ut ; xt ) que actualiza el valor de la variable
de estado en el siguiente periodo, t + 1, cuando el estado actual es xt y la acción (control)
tomada es ut

Por lo tanto, el problema (1) consiste en: determinar una secuencia de controles (acciones)
T
u0* ; u1* ; ; uT* que deben tomarse de modo que la utilidad acumulada  f (u ; x )
t =0
t t sea

máxima
La secuencia de controles u0* ; u1* ; ; uT* que resuelve el problema (1) se llama control óptimo
y la secuencia x0* ; x1* ; ; xT* +1 determinada por función de transición a partir de x0 se llama
trayectoria de estado optima

Expliquemos con mayor detalle la dinámica del sistema


a) El sistema parte del estado inicial (se supone dado) x0 , que marca el inicio de la etapa 1, se
elige un control u0   y en dicha etapa se realiza un aporte a la función objetivo dado por
f ( u0 ; x0 ) y se inicia la etapa 2 (la cual, se inicia en t = 1 ) con el siguiente valor de la
variable de estado x1 = f ( u0 ; x0 )

b) En dicha etapa (la etapa 2) se debe elegir un control u1 , y se realiza un aporte a la
función objetivo dado por f ( u1; x1 ) y se inicia la etapa 3 (la cual inicia en t = 2 ) con el
siguiente valor de la variable de estado x2 = f ( u1; x1 )

c) Se sigue de esta manera hasta que llegamos a la etapa T + 1 (la cual inicia en t = T ) con
estado inicial xT y se elige un control uT , se realiza un aporte a la función objetivo
dado por f ( uT ; xT ) y el sistema alcanza un estado final dado por xT +1 = g (uT ; xT )

La siguiente figura ilustra este proceso

u0 uj uT
(se determina en la etapa 1) (se determina en la etapa j +1) (se determina en la etapa T + 1
)

x0 x1 x2 xj x j +1 xT xT +1

Etapa 1 Etapa 2 Etapa j + 1 Etapa T + 1

2
El problema de optimización dinámica secuencial (1) satisface la siguiente propiedad
Principio de causalidad
Dados dos estados cualquiera del sistema, uno anterior y otro posterior, el valor que toma el
estado posterior depende únicamente del valor del estado anterior y de los valores de los
controles intermedios entre ambos estados
Con mayor formalidad

Dados j.r 0;1;...; T − 1, con j  r, se verifica que xr depende únicamente de x j y de los
controles intermedios u j ; u j +1; ; ur −1
Es decir, dado el estado x j en el que se encuentra el sistema al comienzo de la etapa j + 1 ,
para cualquier etapa posterior r se verifica que el estado que se alcanza al finalizar dicha
etapa, xr , depende exclusivamente del estado x j y de los controles que se apliquen entre las
etapas j + 1 y r

uj u j +1 ur −1

xj x j +1 x j +2 xr −1 xr

Etapa j + 1 Etapa j + 2 Etapa r


t= j t = j +1 t = r −1

Método de programación dinámica


El principio básico del método de la programación dinámica se basa en el llamado principio
de optimalidad, el cual en palabras de su creador Richard Bellman es explicado de la
siguiente manera:

Imagine que se tiene un problema complejo que requiere tomar muchas decisiones a lo largo
del tiempo, y cada decisión afecta las decisiones futuras y el resultado final. El principio de
optimalidad de Bellman dice que, si se tiene una solución óptima para todo el problema,
entonces cada parte más pequeña del problema también debe tener una solución óptima

En otras palabras, si se tiene una estrategia óptima para resolver el problema completo,
entonces también se tiene una estrategia óptima para resolver cada parte del problema por
separado. Esto permite descomponer un problema grande y complicado en partes más
pequeñas y manejables, lo que facilita encontrar una solución óptima global

3
Teorema (Principio de optimalidad de Bellman)
La secuencia de variables de control u0* ; ; uT* es óptima para el problema de optimización dinámica
secuencial (1) si y solo si ut* ; ut*+1; ; uT* es óptimo del siguiente problema para todo t = 0; ;T
 T

 maximizar  f (ut ; xt )
( Pt )  ut
j =t
sujeto a x = g (u ; x ), para j = t; ; T con x dado
 t +1 t t 0

La esencia del principio de optimalidad, dado em este teorema, puede resumirse en el


siguiente esquema
u0* ; u1* ; u2* ; ut* ; ut*+1; ; uT*
S

“La secuencia de variables de control u ; *


0 ; uT* es óptima para el problema de optimización
dinámica secuencial (1) si y solo si cualquier subconjunto de variables de control (desde cualquier
t hasta T ) tal como S es también óptima”.

Bellman, prueba que el problema ( Pt ) puede plantearse en términos de una relación


recursiva

 Vt ( xt ) = maximizar  f (ut ; xt ) + Vt +1 ( xt +1 )
( Pt )  ut

sujeto a xt +1 = g (ut ; xt ), para j = t; ; T con x0 dado

La relación recursiva Vt ( xt ) = maximizar  f (ut ; xt ) + Vt +1 ( xt +1 ) es llamada ecuación


ut

recursiva de Bellman, Vt ( xt ) es llamada función valor (en el instante t ). La ecuación de


Bellman establece que la función valor óptimo para el estado t es la superposición (suma)
del aporte (optimo) a la función objetivo en dicho instante, dado por f ( ut ; xt ) , y la función
valor óptimo para el siguiente estado esperado
El método de la programación dinámica se basa en la idea de avanzar de atrás hacia adelante,
partiendo desde el final del horizonte temporal dado hasta llegar al inicio

4
Procedimiento para aplicar el Principio de optimalidad de Bellman
Para poder separar al problema de optimización en múltiples problemas de dimensión más
pequeña (de un periodo y una variable) y recursivos, empezamos resolviendo para el periodo
T (el cual es el inicio de la última etapa del problema)
Paso 1
Resolvemos

VT ( xT ) = maximizar f ( uT ; xT )
uT

sujeto a xT +1 = g (uT ; xT )

asumiendo que todos los periodos previos ya fueron optimizados. Asumiendo que 𝑥𝑇+1 es
dato del problema y además 𝑥𝑇 viene dado del periodo previo (es perfectamente conocido al
inicio de 𝑇), entonces la restricción termina siendo una ecuación para una variable. Es así
como podemos encontrar directamente, a partir de la ley de acumulación, el valor de 𝑢𝑇 el
cual saldrá en función solo de 𝑥𝑇
𝑥𝑇+1 = 𝑔(𝑢𝑇 ; 𝑥𝑇 ) → 𝑢𝑇 = ℎ𝑇 (𝑥𝑇 )
A 𝑢𝑇 = ℎ𝑇 (𝑥𝑇 ) se le llama función de política, una vez que ya conocemos 𝑢𝑇 = ℎ𝑇 (𝑥𝑇 ),
reemplazamos en la función objetivo del periodo, de forma que obtenemos 𝑉𝑇 (𝑥𝑇 )
Paso 2
Ahora retrocedemos y optimizamos la función correspondiente a 𝑇 − 1:

VT −1 ( xT −1 ) = maximizar  f ( uT −1; xT −1 ) + VT ( xT )
uT −1

sujeto a xT = g (uT −1; xT −1 )

Lo que haremos en este caso será sustituir la expresión de 𝑥𝑇 dentro de la función objetivo, y
proceder mediante una optimización sin restricciones:


VT −1 ( xT −1 ) = maximizar f ( uT −1; xT −1 ) + VT ( g ( uT −1 ; xT −1 ) )
uT −1

Ahora procedemos con la condición de primer orden (recordemos que debemos tomar a 𝑥𝑇−1
como dado, ya que dicho valor ya es conocido al inicio del periodo 𝑇 − 1):

𝜕𝑓(𝑢𝑇−1 ; 𝑥𝑇−1 ) 𝜕𝑉𝑇 𝜕𝑔


+ =0 → 𝑢𝑇−1 = ℎ𝑇−1 (𝑥𝑇−1 )
𝜕𝑢𝑇−1 𝜕𝑔 𝜕𝑢𝑇−1

𝑉𝑇′

Una vez que encontramos esta función de política, debemos encontrar la función valor

(
VT −1 ( xT −1 ) = f ( hT −1 ( xT −1 ) ; xT −1 ) + VT g ( hT −1 ( xT −1 ) ; xT −1 ) )

5
Paso 3
Ahora resolvemos el problema para 𝑇 − 2, asumiendo que todos los periodos previos ya
fueron optimizados:

VT −2 ( xT −2 ) = maximizar  f ( uT −2 ; xT −2 ) + VT −1 ( xT −1 )
uT − 2

sujeto a xT −1 = g (uT −2 ; xT −2 )

Ahora, reemplacemos la función de valor que ya obtuvimos del paso previo (correspondiente
a 𝑇 − 1):

VT −2 ( xT −2 ) = maximizar  f ( uT −2 ; xT −2 ) + VT −1 ( xT −1 )
uT − 2

sujeto a xT −1 = g (uT −2 ; xT −2 )

Ahora, reemplazamos la restricción dentro de la función objetivo, y procedemos con la


condición de primer orden (mantenemos 𝑥𝑇−2 constante, ya que su valor ya es conocido al
inicio del periodo 𝑇 − 2)

VT −2 ( xT −2 ) = maximizar  f ( uT −2 ; xT −2 ) + VT −1 ( g (uT −2 ; xT −2 ) )
uT − 2

𝜕𝑓(𝑢𝑇−2 ; 𝑥𝑇−2 ) 𝜕𝑉𝑇−1 𝜕𝑔


+ =0 → 𝑢𝑇−2 = ℎ𝑇−2 (𝑥𝑇−2 )
𝜕𝑢𝑇−2 ⏟𝜕𝑔 𝜕𝑢𝑇−2

𝑉𝑇−1

Ahora reemplazamos esta función de política dentro de la función objetivo, de forma que
obtenemos 𝑉𝑇−2 (𝑥𝑇−2 ) función valor que será útil para la optimización del periodo previo
T −3

Paso 4
Este proceso se repite iterativamente hasta llegar a 𝑡 = 0 donde resolvemos

V0 ( x0 ) = maximizar  f ( u0 ; x0 ) + V1 ( x1 )
u0

sujeto a x1 = g (u0 ; x0 )
Equivalentemente

V0 ( x0 ) = maximizar  f ( u0 ; x0 ) + V1 ( g (u0 ; x0 ) )
u0

Al derivar respecto a u0 e igualar a cero se obtiene u0 = h ( x0 ) Una vez logrado, habremos


obtenido una función de política para cada periodo, y la solucion al problema de
optimización

6
Ejemplo: Resuelva problema usando la ecuacion recursiva de Bellman

 3

 maximizar
c 
 c
  =1

sujeto a s +1 = c + s
 s1 = 0

 s4 = 3

En esta etapa 3 debemos resolver el problema

maximizar c3
sujeto a s4 = c3 + s3

Para luego hallar V3 ( s3 )


V3 ( s3 ) = maximizar c3
sujeto a s4 = c3 + s3
Como s4 = 3, entonces c3 = 3 − s3 .
Luego,
V3 ( s3 ) = 3 − s3

En la etapa 2: Debemos resolver el problema

maximizar  f 2 ( c2 , s2 ) + V3 ( s3 ) =
c2
 c2 + 3 − s3 
sujeto a s3 = c2 + s2 ,

para luego hallar V2 ( s2 ) , ya que

V2 ( s2 ) = maximizar  f 2 ( c2 , s2 ) + V3 ( s3 ) =
c2
 c2 + 3 − s3 
sujeto a s3 = c2 + s2 ,

Reemplazando s3 = c2 + s2 en la función objetivo se llega al problema sin restricciones

maximizar  f 2 ( c2 , s2 ) + V3 ( s3 ) =
c2
c+2 3 − ( c2 + s2 ) 
La aplicación de CNO1 da

7
1 1
− =0
2 c2 2 3 − c2 − s2
y desde aquí
3 − s2
c2 =
2
y
V2 ( s2 ) = 2 ( 3 − s2 )

Es oportuno verificar que valor hallado de c2 es en efecto la solución. De hecho, la segunda


derivada de función objetivo es
 
1 1 1 0
− +
4  c23 3 
( 3 − c2 − s2 ) 

cualquiera sea c2  0,3 .

Finalmente, en la etapa 1 debemos resolver el problema

maximizar  f1 ( c1 , s1 ) + V2 ( s2 ) = maximizar
c1 c1
c+
1 2 ( 3 − s2 ) 
sujeto a s2 = c1 + s1 sujeto a s2 = c1 + s1 ,

para hallar V1 ( s1 ) , ya que

V1 ( s1 ) = maximizar
c1
c+ 1 2 ( 3 − s2 ) 
sujeto a s2 = c1 + s1

El problema de optimización con restricciones


maximizar
c1
 c1 + 2 ( 3 − s2 ) 
sujeto a s2 = c1 + s1

Equivale al problema sin restricciones

maximizar
c1
c+ 1 2 ( 3 − c1 − s1 ) 
Aplicación de CNO1 da

1 2
− =0
2 c1 2 2 ( 3 − c1 − s1 )

8
y desde aquí

3 − s1 3 − 0
c1 = = =1
3 3

Luego s2 = 1, c2 = 1, s3 = 2, c3 = 1, lo que completa la resolución del ejercicio

Ejemplo
Resuelva problema usando la ecuacion recursiva de Bellman

maximizar  (1 + xt − ut2 )
3

u0 ; ;u3
t =0

sujeto a xt +1 = xt + ut t = 0;1;2;3 x0 = 0

Solucion
Empezamos resolviendo para el periodo t = 3
V3 ( x3 ) = maximizar f ( u3 ; x3 ) = 1 + x3 − u32
u3

Derivando e igualando a cero y verificando que corresponde a un máximo obtenemos se


obtiene
u3* = 0  V3 ( x3 ) = 1 + x3
Ahora determinamos la eleccion optima de u 2 en el periodo t = 2 teniendo en cuenta
que en el periodo t = 3 el valor maximo es V3 ( x3 ) = 1 + x3

Luego, el problema con restricciones

V2 ( x2 ) = maximizar 1 + x2 − u22 + V3 ( x3 ) 


u2

sujeto a x3 = x2 + u2

Equivale al problema sin restricciones

V2 ( x2 ) = maximizar 1 + x2 − u22 + 1 + x2 + u2 


u2

Simplificando obtenemos

V2 ( x2 ) = maximizar  2 + 2 x2 − u22 + u2 
u2

Derivando respecto a u2 para hallar el optimo y verificando que corresponde a un máximo se


obtiene
1 1 1 9
−2u2 + 1 = 0  u2* =  V2 ( x2 ) = 2 + 2 x2 − +  V2 ( x2 ) = 2 x2 +
2 4 2 4

9
Ahora determinamos la eleccion optima de u1 en el periodo t=1 teniendo en cuenta que
9
en el periodo t=2 el valor maximo es V2 ( x2 ) = 2 x2 +
4

V1 ( x1 ) = maximizar 1 + x1 − u12 + V2 ( x2 )


u1

sujeto a x2 = x1 + u1

Que equivale al problema

 9
V1 ( x1 ) = maximizar 1 + x1 − u12 + 2 x1 + 2u1 + 
u1
 4

El cual al simplificar se obtiene

 13 
V1 ( x1 ) = maximizar 3x1 − u12 + 2u1 + 
u1
 4

Derivando con respecto a u1 y verificando que corresponde a un máximo se obtiene


17
−2u1 + 2 = 0  u1* = 1  V1 ( x1 ) = 3x1 +
4
Ahora determinamos la eleccion optima de u 0 en el periodo t=0 teniendo en cuenta que en el periodo t=1
17
el valor maximo es V1 ( x1 ) = 3 x1 +
4
Luego,

V0 ( x0 ) = maximizar 1 + x0 − u02 + V1 ( x1 )


u0

sujeto a x1 = x0 + u0

Este ultimo problema equivale a

 17   21 
V0 ( x0 ) == maximizar 1 + x0 − u02 + 3x0 + 3u0 +  = maximizar  4 x0 − u02 + 3u0 + 
u0
 4 u0  4

Aplicando la CNPO se obtiene


3
−2u0 + 3 = 0  u0* =
2
Luego,

10
x0 = 0
3 3
x1 = x0 + u0 = 0 + =
2 2
3 5
x2 = x1 + u1 = + 1 =
2 2
5 1
x3 = x2 + u2 = + = 3
2 2

Ejemplo
Una comunidad amazónica tiene como principal actividad económica la tala de árboles y
desea maximizar la suma de sus ganancias netas a lo largo de 𝑇 periodos. El precio p de la
madera lo fija el mercado. Asimismo, yt denota la extracción de madera (nivel de
producción) y xt las reservas restantes en el periodo 𝑡. El costo de extracción está dado por
2 yt2
ct = . Las reservas en el primer periodo están dadas por x1 = 800 millones de árboles y
xt
al final del horizonte temporal el stock (reservas) deben agotarse

a) Plantee el problema a maximizar


b) Resuélvalo utilizando el método recursivo. Considere 3 periodos en total.

Solucion
a) El problema es
T
 2 y2 
maximizar   pyt − t 
t =1  xt 
y1 ; ; yT

sujeto a xt +1 = xt − yt t = 1; ; T x1 = 800

b) Empezamos resolviendo para el instante t = 3


2 y2
V3 ( y3 ) = maximizar py3 − 3
u3 x3
sujeto a x4 = x3 − y3
Pero 0 = x3 − y3  x3 = y3 . Entonces, V3 ( y3 ) = ( p − 2) y3 que es lo mismo que
V3 ( x3 ) = ( p − 2) x3
Para el instante t = 2
 2 y2 
V2 ( y2 ) = maximizar  py2 − 2 + V3 ( y3 ) 
y2
 x2 
sujeto a x3 = x2 − y2

11
En V3 ( x3 ) = ( p − 2) x3 sustituimos x3 por x3 = x2 − y2 y obtenemos
 2 y2 
V2 ( y2 ) = maximizar  py2 − 2 + ( x2 − y2 )( p − 2 )
y2
 x2 
Derivando con respecto a y 2 y verificando que corresponde a un máximo se obtiene
4 y2
p− − p+2=0
x2
1
Entonces, y2 = x2  x2 = 2 y2 . Luego, V2 ( y2 ) = ( 2 p − 3) y2
2
Para el instante t = 1
 2 y2 
V1 ( y1 ) = maximizar  py1 − 1 + V2 ( y2 ) 
y1
 x1 
sujeto a x2 = x1 − y1
Pero x1 = 800 . Entonces el problema anterior queda como
 2 y2 
V1 ( y1 ) = maximizar  py1 − 1 + V2 ( y2 ) 
y1
 800 
sujeto a x2 = 800 − y1
1
Ahora bien, V2 ( y2 ) = ( 2 p − 3) y2 pero de lo anterior y2 = x2 . Entonces,
2
1
V2 ( y2 ) = ( 2 p − 3) y2 = ( 2 p − 3) x2
2
Luego,
 2 y12 1 
V1 ( y1 ) = maximizar  py1 − + ( 2 p − 3) x2 
y1
 800 2 
sujeto a x2 = 800 − y1

Este equivale al problema de optimización

 2 y2 1 
V1 ( y1 ) = maximizar  py1 − 1 + ( 2 p − 3)(800 − y1 ) 
y1
 800 2 
Derivando con respecto a y1 y verificando que corresponde a un máximo se obtiene
y1 1
p− − ( 2 p − 3) = 0  y1* = 300
200 2
1
Ahora partir de x2 = 800 − y1 se obtiene que x2* = 500 y de y2 = x2 se obtiene que
2
y2* = 250 . Además, de x3 = x2 − y2 se obtiene x3* = 250 .
Finalmente, siendo x3 = y3 se obtiene y3* = 250

12
Ejercicio
Consideremos un modelo de consumo inter temporal de dos periodos (t = 0; 1)

maximizar U ( c0 ; c1 ) = ln ( c0 ) +  ln ( c1 )
sujeto a st +1 = yt − ct + (1 + r ) st , s0 = 0, t = 0; 1

Solucion
En este caso, haremos la hipótesis de que 𝑠2 = 0 ya que no hay ningún incentivo para
guardar recursos para después de la vida. Procedamos según el método de programación
dinámica. Empecemos por 𝑡 = 𝑇 = 1:
V1 ( s1 ) = max  ln ( c1 )
c1

sujeto a s2 = y1 − c1 + (1 + r ) s1 = 0

Ahora solo tenemos que resolver la restricción para c1

c1 = y1 + (1 + r ) s1 1
¡Esta es la función de política! Ahora reemplazamos en la función objetivo:

V1 ( s1 ) =  ln ( c1 )  V1 ( s1 ) =  ln ( y1 + (1 + r ) s1 )

Ahora resolvamos el problema para el instante previo 𝑡 = 0 (reemplazando la función de


valor hallada previamente):

V0 ( s0 ) = maximizar ln ( c0 ) + V1 ( s1 )
c0
 
V0 ( s0 ) = maximizar ln ( c0 ) +  ln ( y1 + (1 + r ) s1 )
c0

sujeto a s1 = y0 − c0 , s0 = 0  sujeto a s1 = y0 − c0 , s0 = 0

Ahora reemplazamos la restricción dentro de la función objetivo se obtiene


V0 ( s0 ) = maximizar ln ( c0 ) +  ln ( y1 + (1 + r )( y0 − c0 ) )
c0

Ahora derivamos con respecto a la variable de control:
1 𝛽(1 + 𝑟)
− =0
𝑐0 𝑦1 + (1 + 𝑟)(𝑦0 − 𝑐0 )
Ahora despejamos:

13
 (1 + r ) c0 = y1 + (1 + r )( y0 − c0 )

(1 +  )(1 + r ) c0 = (1 + r ) y0 + y1

y0 y1
c0* = +  2
1 +  (1 + r )(1 +  )

De la ecuacion de evolución st +1 = yt − ct + (1 + r ) st , s0 = 0 evaluando en t = 0 se obtiene

s1 = y0 − c0

Y de 1 se obtiene c1* = y1 + (1 + r )( y0 − c0 ) y de  2 se concluye que

  y0 y1 
c1* = y1 + (1 + r )  + 
 1 +  (1 + r )(1 +  ) 

Pero nótese que el único control que opera durante el tiempo de vida del consumidor es en
realidad c0*

14

También podría gustarte