Introducci´ on a la programaci´ on din´ amica estoc´ astica
Hans Alayo 21 de diciembre de 2016
1. Introducci´ on
La programaci´on din´amica brinda la teor´ıa matem´atica necesaria para la toma secuencial de decisiones bajo incertidumbre. El matem´atico Richard Bellman invent´o la programaci´on din´amica en 1953 y desde all´ı ha sido utilizada con ´exito en campos como la f´ısica, biolog´ıa, computaci´on, eco- nom´ıa, administraci´on y cualquier clase de problema estoc´astico factible de ser discretizado y secuencializado, en donde la informaci´on acerca de los par´ametros con incertidumbre se vuelven disponibles en etapas.
La soluci´on del algoritmo de programaci´on din´amica brinda pol´ıticas ´opti- mas, es decir una regla de decisi´on que nos dice c´omo actuar en cada estado a medida que ocurren realizaciones de las incertidumbres en cada etapa. A este tipo de soluciones se le conoce tambi´en como soluci´on en lazo cerrado, lo que contrasta con las soluciones en lazo abierto que solamente nos dicen como actuar en cada etapa sin tomar en cuenta la nueva informaci´on. Para el caso determin´ıstico la soluci´on en lazo abierto y lazo cerrado son igual de buenas, es para el caso estoc´astico en donde el algoritmo de programaci´on din´amica muestra toda su versatilidad.
El presente tutorial presenta el tema de forma practica con un ejemplo sen- cillo1 desarrollado a mano en donde se tiene que optimizar el manejo de un embalse de agua. Se presentan los casos determin´ıstico y estoc´astico del problema. Finalmente, se presenta la soluci´on de ambos problemas imple- mentados en el sofware Scilab.
1Este tutorial se motiv´o en gran parte en las presentaciones del profesor Michel De Lara (http://cermics.enpc.fr/ delara/), profesor de la ´Ecole des Ponts ParisTech que en varias
2. Programaci´ on din´ amica determin´ıstica
Los problemas estudiados por la programaci´on din´amica tienen la siguiente estructura:
Un sistema din´amico en tiempo discreto:
xt+1= ft(xt, ut) t = 0, 1, . . . , T − 1 (1) Donde:
• t es el tiempo discreto.
• xt es el estado del sistema en el periodo t, puede existir restric- ciones xt∈ Ω(t).
• utes el vector de controles del sistema, es decir las decisiones que se toman en cada etapa y que pertenecen a un conjunto ut∈ Γ(t).
• T es el horizonte de tiempo.
Una funci´on de costo aditiva/acumulativa sobre el tiempo.
T −1
X
t=0
gt(xt, ut) + gT(xT) (2)
En resumen, el problema queda expresado de la siguiente forma:
min ´o max
T −1
X
t=0
gt(xt, ut, wt) + gT(xT) s.t.
xt+1= ft(xt, ut) t = 0, . . . , T − 1
xt∈ Ω(t) t = 0, . . . , T
ut∈ Γ(t) t = 0, . . . , T − 1
(3)
Luego el problema se reduce a determinar una pol´ıtica ´optima π = {u0, u1, . . . uT −1}.
El principio de optimalidad de Bellman dice que dada una secuencia ´opti- ma de decisiones, toda subsecuencia de ella es, a su vez, ´optima.Luego, si definimos una funci´on valor como la siguiente expresi´on :
Vt0(xt0) = sup ´o inf{
T −1
Xgt(xt, u, t) + gt(xT)} (4)
Aplicando el principio de optimalidad se obtiene la ecuaci´on de Belman para el caso determin´ıstico:
Vt(xt) = sup ´o inf{gt(xt, ut) + Vt+1(xt+1)} (5)
En donde VT(xT) = gT(xT) hacia atr´as podemos obtener la trayectoria
´ optima.
3. Optimizaci´ on del uso de un embalse - caso de- termin´ıstico
Como ejemplo ilustrativo, se tiene el problema de optimizar el uso de un embalse de agua. El embalse tiene un stock de agua almacenado st en cada etapa. con un volumen m´ınimo de 0 unidades y un volumen m´aximo de 3 unidades. En cada etapa el volumen descargado puede ser turbinado por un generador hidr´aulico y se obtiene un pago pt por cada unidad descargada.
Asimismo, en cada etapa se tiene un afluente de volumen de agua at. Luego, se debe determinar la cantidad de volumen a descargar qt en cada etapa de modo de maximizar el beneficio total. Se utiliz´o un horizonte T = 4. Los datos del problema se resumen en la Tabla 11:
Tabla 1: Datos del ejemplo Par´ametro Valor
smin 0
smax 3
pt {1, 2, 4, 1}
at {1, 2, 0, 1}
st entero
qt entero
Luego, la din´amica del embalse est´a dada por la siguiente ecuaci´on:
st+1= st+ at− qt (6)
Las restricciones del problema son las siguientes:
smin ≤ st≤ smax (7)
qt≤ st (8)
Entonces, el problema queda expresado por la siguiente expresi´on:
max
3
X
t=0
ptqt+ V4(s4) s.t.
st+1= st+ at− qt t = 0, . . . , 3 qt≤ st t = 0, . . . , 3 smin≤ st≤ smax t = 0, . . . , 4
(9)
A partir de aqu´ı empieza el algoritmo de programaci´on din´amica (recursi´on hacia atr´as), usando V4(s4) = 0.
V3(s3) = max{p3q3+ V4(s4)} (10) Luego tabulamos para cada estado los valores de p3q3+V4(s4) con los posibles controles e identificamos el m´aximo de modo que hallamos V3 y se cumpla que q3 ≤ s3 y p3 = 1:
Tabla 2: Valores de p3q3+ V4(s4) s3 /q3 0 1 2 3
0 0 - - -
1 0 1 - -
2 0 1 2 -
3 0 1 2 3
Luego para cada estado s3 identificamos el control que maximiza V3, en la Tabla se ha encerrado en un c´ırculo los m´aximos V3 para cada estado, y para los controles fuera de las restricciones se coloc´o un guion. Entonces, se guard´o la siguiente informaci´on: para cada estado cu´anto vale la funci´on V3(s3) y cu´al es el control ´optimo q3∗.
Tabla 3: Valores de V3
s3 V3(s3) q∗3
0 0 0
1 1 1
2 2 2
3 3 3
Luego realizamos el mismo calculo para la etapa anterior, considerando que s3 = s2+ a2− q2:
V2(s2) = max{p2q2+ V3(s2+ a2− q2)} (11) Tabulamos para cada estado los valores de p2q2+ V3(s2 + 0 − q2) con los posibles controles e identificamos el m´aximo V3de modo que q3 ≤ s3, p2= 4 y a2 = 0; para clarificar el ejemplo realizaremos algunos c´alculos con detalle.
Para s2 = 3 y q2 = 1 se tiene lo siguiente:
p2q2+ V3(s2+ a2− q2) = 4q2+ V3(s2+ 0 − q2)
= 4 · 1 + V3(3 + 0 − 1)
= 4 + V3(2)
= 4 + 2 = 6
(12)
En el penultimo paso se recurri´o al valor de V3(2) guardado en la Tabla 3.
Entonces se tabula los valores de p2q2+ V3(s2+ a2− q2):
Tabla 4: Valores de p2q2+ V3(s2+ a2− q2) s2 /q2 0 1 2 3
0 0 - - -
1 1 4 - -
2 2 5 8 -
3 3 6 9 12
Luego identificamos los m´aximos valores de las tabulaciones:
Tabla 5: Valores de V2
s2 V2(s2) q∗2
0 0 0
1 4 1
2 8 2
3 12 3
Luego realizamos el mismo c´alculo para la etapa anterior, considerando que s2 = s1+ a1− q1:
V1(s1) = max{p1q1+ V2(s1+ a1− q1)} (13)
Tabla 6: Valores de p1q1+ V2(s1+ a1− q1) s1 /q1 0 1 2 3
0 8 - - -
1 12 10 - -
2 - 14 12 -
3 - - 16 14
Luego identificamos los m´aximos valores de las tabulaciones:
Tabla 7: Valores de V1
s1 V1(s1) q∗1
0 8 0
1 12 0
2 14 1
3 16 2
Por ´ultimo, se tabulan los valores de V0 para la etapa inicial:
V0(s0) = max{p0q0+ V1(s0+ a0− q0)} (14)
Tabla 8: Valores de p0q0+ V1(s0+ a0− q0) s0 /q0 0 1 2 3
0 12 - - -
1 14 13 - -
2 16 15 14 - 3 - 17 16 15
Luego identificamos los m´aximos valores de las tabulaciones:
Tabla 9: Valores de V0
s0 V0(s0) q∗0
0 12 0
1 14 0
2 16 0
3 17 1
Luego si se sabe que el estado inicial s0 = 2 el valor ´optimo es de V0(2) = 16 y el control ´optimo inicial es q0(2) = 0. Iterando sobre la din´amica se obtiene la trayectoria ´optima de st. Resumiendo las tablas anteriores se tiene la siguiente tabla de pol´ıticas:
Tabla 10: Valores de qt(st) s / q t = 0 t = 1 t = 2 t = 3
0 0 0 0 0
1 0 0 1 1
2 0 1 2 2
3 1 2 3 3
Con s0 = 2 la pol´ıtica ´optima es π∗= {0, 2, 3, 0}
4. Programaci´ on din´ amica estoc´ astica
El caso estoc´astico es un caso m´as interesante porque la soluci´on del algorit- mo permite tener soluciones en lazo cerrado. Los problemas de programaci´on din´amica para el caso estoc´astico tienen la siguiente estructura:
Un sistema din´amico en tiempo discreto:
xt+1 = ft(xt, ut, wt) t = 0, 1, . . . , T − 1 (15) Donde:
• t es el tiempo discreto.
• xt es el estado del sistema en el periodo t, puede existir restric- ciones xt∈ Ω(t).
• utes el vector de controles del sistema, es decir las decisiones que se toman en cada etapa y que pertenecen a un conjunto ut∈ Γ(t).
• wt es el par´ametro aleatorio con cierta distribuci´on de probabili- dad.
• T es el horizonte de tiempo.
Una funci´on de costo aditiva/acumulativa sobre el tiempo, paa el caso estoc´astico se usa el valor esperado.
E{
T −1
X
t=0
gt(xt, ut, wt) + gT(xT)} (16)
En resumen, el problema queda expresado de la siguiente forma:
min ´o max E{
T −1
X
t=0
gt(xt, ut) + gT(xT)}
s.t.
xt+1= ft(xt, ut, wt) t = 0, . . . , T − 1
xt∈ Ω(t) t = 0, . . . , T
ut∈ Γ(t) t = 0, . . . , T − 1
(17)
Para el caso estoc´astico se define la siguiente funci´on valor:
Vt0(xt0) = sup ´o inf E{
T −1
X
t=t0
gt(xt, u, t, wt) + gt(xT)} (18) Aplicando el principio de optimalidad se obtiene la ecuaci´on de Belman para el caso estoc´astico:
Vt(xt) = sup ´o inf E{gt(xt, ut, wt) + Vt+1(xt+1)} (19)
En donde VT(xT) = gT(xT).
5. Optimizaci´ on del uso de un embalse - caso es- toc´ astico
Para el caso estoc´astico tenemos los mismos datos que el caso determin´ıstico con la diferencia que los afluentes ahora pueden tomar dos valores (dos escenarios k = 1, 2) en cada etapa:
Tabla 11: Datos del ejemplo Par´ametro Valor
smin 0
smax 3
pt {1, 2, 4, 1}
ak,t
1, 2, 0, 1 0, 1, 2, 0
Probabilidades prob(k = 1) = 0, 4 prob(k = 2) = 0, 6
st entero
qt entero
Entonces, el problema queda expresado por la siguiente expresi´on:
max E{
3
X
t=0
ptqt+ V4(s4)}
s.t.
st+1= st+ at− qt t = 0, . . . , 3 qt≤ st t = 0, . . . , 3 smin≤ st≤ smax t = 0, . . . , 4
(20)
A partir de aqu´ı empieza el algoritmo de programaci´on din´amica (recursi´on hacia atr´as), usando V4(s4) = 0, p3 = 1.
V3(s3) = max E{p3q3+ V4(s4)} = max {0,4p3q3+ 0,6p3q3} = max{p3q3} (21) Luego tabulamos para cada estado los valores de p3q3 con los posibles con- troles e identificamos el m´aximo de mode que hallamos V3 y se cumpla que q3 ≤ s3 y p3 = 1:
Tabla 12: Valores de p3q3
s3 /q3 0 1 2 3
0 0 - - -
1 0 1 - -
2 0 1 2 -
3 0 1 2 3
Luego para cada estado s3 identificamos el control que maximiza V3, en la Tabla se ha encerrado en un c´ırculo los m´aximos V3 para cada estado, y para los controles fuera de las restricciones se coloc´o un guion. Entonces, se guard´o la siguiente informaci´on: para cada estado cu´anto vale la funci´on V3(s3) y cu´al es el control ´optimo q3∗.
Tabla 13: Valores de V3
s3 V3(s3) q∗3
0 0 0
1 1 1
2 2 2
3 3 3
Luego realizamos el mismo c´alculo para la etapa anterior, considerando que s3 = s2+ a2,k− q2:
V2(s2) = max{0, 4[p2q2+ V3(s2+ a2,1− q2)] + 0, 6[p2q2+ V3(s2+ a2,2− q2)]}
(22) Tabulamos para cada estado los valores de la expresi´on a maximizar con los posibles controles e identificamos el m´aximo V3 de modo que q3 ≤ s3, p2 = 4, a2,1 = 0 y a2,2 = 2; para clarificar el ejemplo realizaremos algunos c´alculos con detalle. Para s2= 2 y q2 = 1 se tiene lo siguiente:
0, 4[p2q2+ V3(s2+ a2,1− q2)]
+0, 6[p2q2+ V3(s2+ a2,2− q2)] = p2q2+ 0,4V3(s2+ 0 − q2) +0, 6V3(s2+ 2 − q2)]
= 4 · 1 + 0, 4V3(2 + 0 − 1) +0, 6V3(2 + 2 − 1)
= 4 + 0, 4V3(1) + 0, 6V3(3)
= 4 + 0, 4 + 0, 6 · 3 = 6, 2
(23)
En el pen´ultimo paso se recurri´o a los valores de V3 guardados en la Tabla 13. Entonces se tabula el resto de los valores:
Tabla 14: Valores de funci´on a optimizar
s2 /q2 0 1 2 3
0 1,2 - - -
1 2,2 5,2 - -
2 - 6,2 9,2 -
3 - - 10,2 13,2
Luego identificamos los m´aximos valores de las tabulaciones:
Tabla 15: Valores de V2
s2 V2(s2) q∗2
0 1,2 0
1 5,2 1
2 9,2 2
3 13,2 3
Siguiendo el mismo procedimiento se tiene la siguiente tabla de pol´ıtica
´
optimas:
Tabla 16: Valores de qt(st) s / q t = 0 t = 1 t = 2 t = 3
0 0 0 0 0
1 0 0 1 1
2 0 1 2 2
3 1 2 3 3
6. Implementaci´ on computacional
Ambos casos presentados anteriormente fueron implementados en el software Scilab, se incluy´o una etapa en la programaci´on en donde se verifica que los controles y estados se encuentran dentro de las restricciones. Los c´odigos se presentan a continuaci´on:
//Dynamic Programming example //Data
a= [1 2 0 1];
price=[1 2 4 1];
Smin=0;
Smax=3;
Horizon=3;
//Backward recursion
V= zeros(4,Horizon+2); //Define value function u= zeros(4,Horizon+1); //Define optimal controls for t=Horizon:-1:0
for s=0:Smax for q=0:Smax
if (q>s) | (s+a(t+1)-q >Smax) | (s+a(t+1)-q <Smin) then f(q+1)=-1/%eps;
else
f(q+1)=price(t+1)*q + V(s+a(t+1)-q +1,t+2);
end end
[V(s+1,t+1),index ]=max(f,’r’);
u(s+1,t+1)=index-1;
end end
//Trace back x=zeros(Horizon);
x(0+1)=2;
for t=1:Horizon+1 pi(t)=u(x(t)+1,t);
x(t+1)=x(t)+a(t)-pi(t);
end
//Stochastic Dynamic Programming example //Data
Scenarios=2;
a= [1 2 0 1;
0 1 2 0];
p=[0.4 0.6];
price=[1 2 4 1];
Smin=0;
Smax=3;
Horizon=3;
//Backward recursion
V= zeros(4,Horizon+2); //Define value function u= zeros(4,Horizon+1); //Define optimal controls for t=Horizon:-1:0
for s=0:Smax for q=0:Smax
suma=0;
for j=1:Scenarios
if (q>s) | (s+a(j,t+1)-q >Smax) | (s+a(j,t+1)-q <Smin) then suma=-1/%eps;
break else
suma=p(j)*(price(t+1)*q + V(s+a(j,t+1)-q +1,t+2))+suma;
end end f(q+1)=suma;
end
[V(s+1,t+1),index ]=max(f,’r’);
u(s+1,t+1)=index-1;
end end
Referencias
[1] Richard Bellman. Dynamic Programming. Princeton, University Press, 1957.
[2] Dimitri P. Bertsekas. Dynamic Programming and Stochastic Control.
Academic Press, New York. 1976
[3] Michel De Lara and Luc Doyen. Sustainable Management of Natural Resources. Mathematical Models and Methods. Springer-Verlag, Berlin.
2008