Modelos y Herramientas de Decisión. Programación Dinámica I: U P C - B T
Modelos y Herramientas de Decisión. Programación Dinámica I: U P C - B T
Joaquín Bautista-Valhondo
OPE-PROTHIUS – OPE-MSc.2016/22 240EO023 (20160408) - http://futur.upc.edu/OPE - www.prothius.com -
Departamento de Organización de Empresas – ETSEIB · UPC
Una etapa: x
n = etapa (n = 1, 2,.., N )
xn = variable de decisión en la etapa n
s! s!
Sistema sn = estado al inicio de la etapa n
sn+1 = estado al final de la etapa n
r rn ( sn , sn+1, xn ) = rendimiento en la etapa n
N etapas:
x1 xn xN
1 n N
s1 s2 sn sn+1 sN sN +1
r1 rn rN
B E
H
A: D'Qar
A C F J J: Ahch-to
D G
Figura 1: Esquema polietápico del viaje del Halcón Milenario desde D’Qar hasta Ahch-To.
E F G
B 70 40 60 J A–B–F–I–J
C 30 20 40 H 30 A–D–F–I–J
…
D 40 10 50 I 40
Variables de decisión: Destino inmediato de la etapa n : n-ésimo viaje del Halcón Milenario.
xn (n = 1, 2, 3, 4) Ruta : A ! x1 ! x2 ! x3 ! x4 , donde x4 = J
Coste de la mejor política (s,xn) : Coste (riesgo) al inicio de la etapa n (n-ésimo viaje), en
función del estado de partida y de la decisión a tomar, para afrontar las etapas restantes.
Coste mínimo estado-etapa : Coste mínimo (riesgo) al inicio de la etapa n (n-ésimo viaje),
en función del estado de partida, tomando la mejor decisión para afrontar las etapas
restantes.
fn* (s) = min fn (s, xn ) = fn (s, xn* ) (n = 1, 2, 3, 4, 5)
xn
*
fn (s, xn ) = cs,xn + fn+1 (xn ) (n = 1, 2, 3, 4)
n = 4 : s4 ! {H, I }, x4 ! { J } J
f4 (s4 , x4 ) = cs,x4 + f5* (x4 ) H 30
x4* = J, f5* (J ) = 0
H f4 (s, x4 )
* s4 / x 4 J f4* (s) x4*
J f (J ) = 0
5
H 30 30 J
I I 40 40 J
H f4* (x3 ) = 30
f3 (s3, x3 )
F
s3 / x3 H I f3* (s) x3*
I f4* (x3 ) = 40 E 40 80 40 H
F 90 70 70 I
G
G 60 70 60 H
f3* (s3 ) = min f3 (s3, x3 ) = f3 (s3, x3* )
x3
E F G
n = 2 :!s2 ! {B, C, D},!! x2 ! {E, F, G}
B 70 40 60
f2 (s2 , x2 ) = cs2 ,x2 + f3* (x2 )
C 30 20 40
D 40 10 50
B E f3* (x2 ) = 40
f2 (s2 , x2 )
C F f3* (x2 ) = 70
s2 / x2 E F G f2* (s) x2*
B 110 110 120 110 E,F
*
C 70 90 100 70 E
D G f (x2 ) = 60
3
D 80 80 110 80 E,F
f2* (s2 ) = min f2 (s2 , x2 ) = f2 (s2 , x2* )
x2
f3* (E) = 40
B E
30 f4* (H ) = 30
10
*
H 30
f (A) = 110
1 40
40
A C F J
f2* (C) = 70 f3* (F) = 70 f5* (J ) = 0
30 I 40
30 10
f4* (I ) = 40
D G
f2* (D) = 80
Técnicas:
- Iteración en el espacio de los estados.
- Iteración en el espacio de las políticas.
Etapa n Etapa n +1
xn
Estado sn sn+1 ( *
fn (sn , xn ) = f C(sn , xn ), fn+1 )
(sn+1 )
Contribución de xn
*
Valor fn (sn , xn ) C(sn , xn ) fn+1 (sn+1 )
Formulación:
N = número de Actividades.
n = etiqueta de la Actividad (n = 1, 2,..., N ). Orden arbitrario.
sn = (estado) Cantidad de recursos disponibles para asignarse a las Actividades n, n +1,..., N.
xn = cantidad de recursos asignados a la Actividad n.
xn* = valor óptimo de xn (dado sn )
Etapa n Etapa n +1
xn sn+1 = sn ! xn
Estado sn sn+1
Contribución de xn
*
(
fn (sn , xn ) = f C(sn , xn ), fn+1
*
(sn ! xn ) )
Valor fn (sn , xn ) C(sn , xn ) f (sn+1 )
n+1
s.a. :
4
"x i =2
i=1
xi # {0,1, 2} $i = 1,., 4
4 4
fn (sn , xn ) = pn (xn )% min ! pi (xi ) ; "x i = sn ; fn* (sn )= min fn (sn , xn )
0&xn &sn
i=n+1 i=n
Etapa n Etapa n +1
xn
Estado sn sn ! xn
Contribución de xn fn (sn , xn ) = pn (xn )! fn+1
*
(sn " xn )
Valor fn (sn , xn ) pn (xn ) *
fn+1 (sn ! xn )
f4 (s4 , x4 )
n = 4 :!s4 ! {0,1, 2},!! x4 ! {0,1, 2} s4 / x 4 0 1 2 f4* (s4 ) x4*
f4 (s4 , x4 ) = p4 (x4 )" f5 (0) 0 0.80 0.80 0
f5 (0) = 1 1 0.60 0.60 1
f4* (s4 ) = f4 (s4 , x4 ) = p4 (x4 ) 2 0.40 0.40 2
f3 (s3, x3 )
n = 3 :!s3 ! {0,1, 2},!! x3 ! {0,1, 2} s3 / x3 0 1 2 f3* (s3 ) x3*
f3 (s3, x3 ) = p3 (x3 )" f4* (s3 # x3 ) 0 0.560 0.560 0
f3* (s3 )= min f3 (s3, x3 ) 1 0.420 0.400 0.400 1
0$x3 $s3
2 0.280 0.300 0.280 0.280 0,2
f2 (s2 , x2 )
n = 2 :!s2 ! {0,1, 2},!! x2 ! {0,1, 2} s2 / x2 0 1 2 f2* (s2 ) x2*
f2 (s2 , x2 ) = p2 (x2 )" f3* (s2 # x2 ) 0 0.336 0.336 0
x4* = 0
0 0 0 0
2 2 2 2
Enfoques:
• Programación dinámica
• Programación lineal entera mixta.
• Algoritmo de Wagner-Whitin.
• Camino extremo en grafo polietápico.
Periodo n 1 2 3 4 5 6 7 8 9 10
dn 5 6 9 7 3 10 6 4 8 2
Tabla 2. Plan de demanda (no homogénea) de un artículo l. Horizonte 10 periodos.
um um
cA = 30 ; ch = 1
orden up ! ut
!Qn = dn (n = 1,.., N ) $
1. Lot for Lot - Just in Time: " % ' FN = cA N = 30 (10 = 300 um
I
# n = 0 (n = 1,.., N ) &
Periodo n 1 2 3 4 5 6 7 8 9 10
dn 5 6 9 7 3 10 6 4 8 2
Qn 20 20 20
In 15 9 0 13 10 0 14 10 2 0
f!
n 45 9 0 43 10 0 44 10 2 0
FN = 163 um
N N
Min F = # cA xn + # ch I n
n=1 n=1
s.a. :
n n
I n = # Qt $ # dt n = 1,.., N
t=1 t=1
Qn % D & xn n = 1,.., N
Qn , I n ' 0 n = 1,.., N
xn ( {0,1} n = 1,.., N
IN = 0
%' fn+1
*
(t) + (n # t)$ ch $ dn ( xn = 0 ) )'
(1) fn (t, xn ) = & * *
(' fn+1 (n) + cA ( xn = 1) +'
(2)
xn !{0,1}
{
fn* (t) = fn (t, xn* ) = min { fn (t, xn )} " fn* (t) = min ,- fn+1
*
(t) + (n # t)$ ch $ dn ./ , ,- fn+1
*
}
(n) + cA ./
(n ! 3)ch dn *
fn (3, xn ) (n, 3) (n +1, 3) fn+1 (3)
! xn = 0 !
*
fn (t, xn ) (n, t) (n +1, t) fn+1 (t)
cA
! xn = 1 !
cA *
fn ( n, xn ) (n, n) (n +1, n) fn+1 (n)
#% fn+1
*
(t) + (n ! t)" ch " dn ( xn = 0)'% f11* (1) = f11* (2) = … = f11* (9) = 0
fn (t, xn ) = $ * (
&% fn+1 (n) + cA ( n ) )%
x = 1 f11* (10) = 30
{
fn* (t) = min #$ fn+1
*
(t) + (n ! t)" ch " dn %& , #$ fn+1
*
(n) + cA %& }
MHD 16 – Pro-Din (I): 25
J. Bautista
Ejemplo 3. Resolución programación dinámica (3)
Ejemplo 3 · El problema del lote dinámico · Programación dinámica · Cálculos 1:
n 10 9 8 7 6 5 4 3 2 1
t \ dn 2 8 4 6 10 3 7 9 6 5
1 18 32 42 56 76 88 109 119 125 155
2 16 32 42 56 76 85 99 108 138
3 14 32 42 56 76 82 89 119
4 12 32 42 56 76 79 109
5 10 32 42 54 64 94
6 8 32 40 46 76
7 6 22 26 56
8 4 12 42
f11* (1) = f11* (2) = … = f11* (9) = 0
9 2 32
f11* (10) = 30
10 30
xn 1 1 1 1
Periodo n 1 2 3 4 5 6 7 8 9 10
dn 5 6 9 7 3 10 6 4 8 2
xn 1 1 1 1
Qn 11 19 20 10
In 6 0 10 3 0 10 4 0 2 0
f!
n 36 0 40 3 0 40 4 0 32 0
FN = 36 + 40 + 3 + 40 + 4 + 32 = 155 um
Periodo n 1 2 3 4 5 6 7 8 9 10
dn 5 6 9 7 3 10 6 4 8 2
xn 1 1 1
Qn 11 19 30
In 6 0 10 3 0 20 14 10 2 0
f!
n 36 0 40 3 0 50 14 10 2 0
FN = 36 + 40 + 3 + 50 +14 +10 + 2 = 155 um
f0 = 0
f1 = f1,1 = cA
f2 = min { f2,1, f2,2 } = min {[ f0 + cA + ch d2 )], [ f1 + cA ]}
f3 = min { f3,1, f3,2 , f3,3 } = min {[ f0 + cA + ch d2 + 2ch d3 ], [ f1 + cA + ch d3 ], [ f2 + cA ]}
...
+-% n (% n ( /-
fn = min { fn,1, fn,2 , fn,3,.., fn,n } = min ,' f0 + cA + ch $ (k "1)# dk *, ' f1 + cA + ch $ (k " 2)# dk *,.., [ fn"1 + cA ]0
-.& k=2 )& k=3 ) -1
Periodo n 1 2 3 4 5 6 7 8 9 10 um um
cA = 30 ; ch = 1
lanzamiento up ! ut
dn 5 6 9 7 3 10 6 4 8 2
n"t
fn = min { fn,t } , fn,t = ft"1 + cA + ch (dt+1 + 2 # dt+2 +... + (n " t)# dn ) = ft"1 + cA + ch # $! # dt+!
1!t!n
! =1
f0 = 0
f1 = f1,1 = 30 ! t * = 1
f2 = min {(30 + 6), (30 + 30)} = min {36, 60} = 36 ! t * = 1
f3 = min {(36 +18), (60 + 9), (36 + 30)} = min {54, 69, 66} = 54 ! t * = 1
f4 = min {(54 + 21), (69 +14), (66 + 7), (54 + 30)} = min {75,83, 73,84} = 73 ! t * = 3
f5 = min {(75 +12), (83+ 9), (73+ 6), (84 + 3), (73+ 30)} = min {87, 92, 79,87,103} = 79 ! t * = 3
...
fn = min { fn,1, fn,2 , fn,3,.., fn,n } = min { fn,t }
1"t"n
Periodo t 1 2 3 4 5 6 7 8 9 10
dt 5 6 9 7 3 10 6 4 8 2
n=t 30 60 66 84 103 109 137 145 153 177
n=t+1 36 69 73 87 113 115 141 153 155*
n=t+2 54 83 79 107 125 123 157 157
n=t+3 75 92 109 125 137 147 163
n=t+4 87 133 141 155*
n=t+5 153
Periodo n 1 2 3 4 5 6 7 8 9 10
Qn 11 - 19 - - 20 - - 10 - f10 = 155
Qn 11 - 19 - - 30 - - - - f10 = 155
Etapa n !1 Etapa n
(n !1)ch dn
fn!1,1 (n !1,1) (n,1) fn,1
(n ! 2)ch dn
fn!1,2 (n !1, 2) (n, 2) fn,2
(n ! 3)ch dn
fn!1,3 (n !1, 3) (n, 3) fn,3
! !
fn!1,t (n !1, t) (n, t) fn,t
! !
fn!1,n!1 (n !1, n !1) (n, n !1) fn,n!1
cA
(n, n) fn,n
n 1 2 3 4 5 6 7 8 9 10
t \ dn 5 6 9 7 3 10 6 4 8 2
1 30 36 54 75 87 137 173 201 265 283
2 60 69 83 92 132 162 186 242 258
3 66 73 79 109 133 153 201 215
4 84 87 107 125 141 181 193
5 103 113 125 137 169 179
6 109 115 123 147 155
7 137 141 157 163
8 145 153 157
9 153 155
10 177
fn 30 36 54 73 79 107 115 123 147 155