Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Cap5.Programación Dinamica
Cap5.Programación Dinamica
PROGRAMACIÓN DINAMICA
5ª CAPITULO.
Fuente:
Integer Programming.
Laurence A. Wolsey
Se preguntará usted ¿qué relación tiene la programación dinámica con la programación
entera?
Pues bien, en esta clase se darán algunos ejemplos de como ciertos problemas de
programación entera y combinatorios pueden ser resueltos a través de la programación
dinámica.
Es en general factible utilizarla para problemas combinatorios más que para los problemas
enteros.
Considere el problema de la ruta más corta. Dado un Grafo dirigido D=(V,A) con distancias de
los arcos no negativas para , y un nodo inicial , el problema es encontrar la ruta más corta
desde s a cualquier nodo
p t
s
p t
s
Observación 5.1: Si la ruta más corta de s a t pasa por el nodo p, entonces las rutas
(s,p) y (p,t) son las rutas más cortas de s a p y de p a t respectivamente.
(𝑣 )= 𝑚 𝑖𝑛
𝑑 { 𝑑 ( 𝑖 ) + 𝑐𝑖𝑣 } (5.1)
𝑖∈ 𝑉 − 𝑣
d(v) denota entonces que si encuentro la distancia más corta para ir de s a i (donde i
es un vecino predecesor de v), entonces puedo encontrar la ruta más corta de s a v.
Note que este es un dígrafo
acíclico ya que una vez se pase
por un nodo (cualquiera) no es
posible pasar de nuevo por él.
Esto para todos los nodos.
Observación 5.3: Dado un dígrafo acíclico, D=(V,A) con cardinalidad n = , , donde los
nodos están ordenados de forma que i<j, para todos los arcos (i,j) , entonces para el
problema de encontrar la ruta más corta del nodo 1 a todos los otros nodos, la
recurrencia (5.1) para v=2,…..,n lleva a un algoritmo de Orden (m): O(m).
El problema de la recurrencia (5.1) anterior es que sólo sirve para resolver dígrafos
acíclicos. Por lo que es bueno tener una recurrencia que proporcionara un algoritmo
más general
Para el caso en que se tenga un dígrafo arbitrario (ya sea ordenado, desordenado o
cíclico) con pesos no negativos , es necesario imponerles un orden de alguna manera.
Esto se puede hacer definiendo un algoritmo más general. Sea la función la longitud
del camino más corto de s a i que contiene máximo k arcos. Entonces la recurrencia es
como sigue:
Sean: la distancia a j en máximo k pasos y la distancia a j en k pasos exactos,
entonces = min(,…, , )
(5.3)
𝑚 𝑖𝑛
𝐷 ( 𝑗 ) =min 𝐷
𝑘 {𝑘 −1 ( 𝑗 ) ,
𝑖 ∈ 𝑣 −( 𝑗)
[ 𝐷𝑘 − 1 ( 𝑖 ) +𝑐 𝑖𝑗 ] }
Entonces incrementando k desde 1 hasta n-1, y calculando cada vez para todo j por la
recursión se obtiene un algoritmo de orden m*n O(mn) y .
Principios de la Programación Dinámica.
Un problema se debe poder partir en etapas (o pasos).
En cada etapa se realizan cálculos para ciertos elementos o nodos denominados estados.
Las etapas se pueden ordenar y se relacionan unas con otras por medio de una relación
de recursión (relación recursiva).
3 3
0
2 2
2
3 3
0
2 2
2
1. Para k=1 Vamos a variar empezando con j=1, =(0,3)
= min(∞,min(0+9, ∞+ 4) = 9
Formas de llegar al nodo 1 desde
=9 s=0 con máximo un Arco
NOTA: = es cero; es decir que la distancia del Esto es para aclarar que no se puede
nodo s=0 al nodo i=0 en cero pasos (arcos) es 0 variar la i arbitrariamente sino que en
. cero arcos sólo es posible llegar a algún
Note que = = 0 nodo i desde el mismo nodo i.
La única forma de llegar a i desde s en cero arcos es que s=i, lo que tiene un peso de
cero porque es el mismo nodo.
1
4
9
3 3
0
2 2
2
1. Para k=1 con j=2, =(0,1)
= min(∞,min(0+2, ∞+ 3) = 2
= min(∞,min(∞+4, ∞+ 2) = ∞
En resumen hasta ahora:
0
D0(1) = ∞
D0 (2) = ∞
D0 (3) = ∞
0
D1(1) = 9
D1 (2 ) = 2
D1 (3) = ∞
1
4
9
3 3
0
2 2
Con máximo dos arcos, 2
se puede ir desde s=0
2. Para k=2 hasta: 1, 2, 3
(9, min(0+9,∞+4) = 9
con j=2, =(0,1)
= min(2, min(D1(0)+c02, D1(1)+c12) )
(2, min(0+2,9+3) = 2
(∞, min(9+4,2+2) = 4
En resumen hasta ahora:
0
D0(1) = ∞
D0 (2) = ∞
D0 (3) = ∞
0
D1(1) = 9
D1 (2) = 2
D1 (3) = ∞
0
D2(1) = 9
D2 (2) = 2
D2 (3) = 4
1
4
9
3 3
0
2 2
3. Para k=3 2
(9, min(0+9,4+4) = 8
(2, min(0+2,9+3) = 2
(4, min(9+4,2+2) = 4
En resumen hasta ahora: resultado final
0
D0(1) = ∞
D0 (2) = ∞
D0 (3) = ∞
0
D1(1) = 9
D1 (2) = 2
D1 (3) = ∞
0
D2(1) = 9
D2 (2) = 2
D2 (3) = 4
0
D3(1) = 8
D3 (2) = 2
D3 (3) = 4
El Problema de Tamaño del Lote Económico con capacidades de producción y
de almacenamiento ilimitadas (Uncapacitated Lot Sizing)
𝑛 𝑛 𝑛
𝑚𝑖𝑛 ∑ 𝑝𝑡 𝑥 𝑡 + ∑ h𝑡 𝑠 𝑡 + ∑ 𝑓 𝑡 𝑦 𝑡
𝑡=1 𝑡 =1 𝑡 =1
para t=1,…,n.
para t=1,…,n.
, para t=1,…,n.
Este problema se puede representar como un problema de flujo en redes:
x1
x2 x3 x4 x5
1 2 3 4 5
S1 S2 S3 S4
d1 d2 d3 d4 d5
Se produce a través del arco (0,t) para alimentar el nodo t, de donde sale lo que se
demanda en el periodo t y queda un sobrante de lo que no se vendió, que va a venir a
ser el inventario para el siguiente periodo, es decir que va a alimentar el nodo
siguiente.
0
x1
x2 x3 x4 x5
1 2 3 4 5
S1 S2 S3 S4
d1 d2 d3 d4 d5
Proposición 5.1 Existe Una solución óptima con (solamente se produce cuando el
Inventario es cero).
Existe una solución óptima tal que si = para algún k0. (si se produce en t, la cantidad
producida satisface exactamente la demanda para los periodos t hasta t+k).
Denotemos la suma de las demandas para los periodos i hasta t,
Observación 5.4 Como entonces la variable de inventarios se puede eliminar de la FO
de la siguiente manera:
=(p1+h1+h2+h3+…+hn)x1+(p2+h2+h3+…+hn)x2+…+(p3+h3+…+hn)xn
Así la función de costos queda reducida y se puede expresar como sigue:
Z= +
H(k) el costo mínimo de una solución para los periodos 1,……,k. Si tk es el último
Sea
periodo en el que se produce (, entonces queremos saber que pasa en los periodos 1,
…..,t-1?. Note que la solución de mínimo costo H(k) debe ser óptima para los periodos 1,
…….,t-1, y por tanto tiene un costo de H(t-1).
Calculando H(k) para k=1,…….,n, se llega al valor óptimo H(n) para el problema ULS
(Uncapacitated Lot Sizing Problem). Al devolverse se puede encontrar la solución
óptima (el valor de las variables). Los cálculos para este problema son de O(
Ejemplo 5.1.
Considere Una Instancia de ULS con n=4, d=(2,4,5,1), p=(3,3,3,3), h=(1,2,1,1), y
f=(12,20,16,8).
K= 1 2 3 4
Cálculos iniciales: K 1 2 3 4 t= 1 2 6 11 12
f 12 20 16 8 dtk = 2 - 4 9 10
p 3 3 3 3 1≤t≤k 3 - - 5 6
h 1 2 1 1 4 - - - 1
c 8 7 5 4
= +++
= 1*2 + 2*6 + 1*11 + 1*12 = 37
}
H(1) = min (0+12+8*2) = 28
H(2) = min (0+12+8*6, 28+20+7*4 = min (60, 76) = 60
H(3) = min (0+12+8*11, 28+20+7*9, 60+16+5*5) = min (100, 111, 101) = 100
H(4)= min (0+12+8*12, 28+20+7*10, 60+16+5*6, 100+8+4*1) = min (108, 118, 106, 112) = 106
Solución hacia atrás: H(4)=106 f3=1, x3=6, y3=1
H(2)=60 f1=1, x1=6, y1=1
Otra forma de obtener el valor de la función objetivo con los datos iniciales:
= p1*x1+ p3*x3 + h1*s1 + h3*s3 + f1*y1+ f3*y3
= 3*6 + 3*6 + 1*4 + 1*1 + 12*1 +16* 1
= 18 + 18 + 4 + 1 + 12 + 16
= 69
ULS visto como un Problema de la Ruta Más Corta
Considere un grafo dirigido con nodos (0, 1, 2…, n) y arcos (i,j) para todo i<j.
El costo del arco (i, j): eij es el costo de producir desde el período i+1 hasta el j =
e01 = 12+3*2=18
e02 = 12+3*(2+4)+(1*4) = 34
e03 = 12+3*(2+4+5)+1*9+2*5 = 64
e04 = 12+3*(2+4+5+1)+1*10+2*6+1*1 = 71
e12 = 20+3*4 = 32
e13 = 20+3*(4+5)+2*5 = 57
e14 = 20+3*(4+5+1)+2*6+1*1 = 63
e23 = 16+3*5 = 31
e24 = 16+3*(5+1)+1*1 = 35
e34 = 8 +3*1 = 11
ULS visto como un Problema del Camino Más Corto
71
64
34 35
0 1 2 3 4
18 32 31 11
57
63
Observemos que H(k) es el costo de la ruta más corta de los nodos 0 a k, y como el grafo
dirigido es acíclico, se sabe de la observación 5.3. que el correspondiente algoritmo de la
ruta más corta es O(m).
UN SUB-ÁRBOL ÓPTIMO DE UN ÁRBOL
problema del sub-árbol óptimo de un árbol incluye un árbol con una raíz r y
El
pesos . El problema es escoger un sub-árbol de con raíz en r de máximo peso, o el
árbol vacío si no hay un sub-árbol con peso positivo que tenga raíz.
-Para cada árbol con raíz, cada nodo tiene un predecesor bien definido en el único
camino de la raíz a y para cada .
-Sea el sub-árbol de, con raíz en que contiene todos los nodos para los cuales el
camino de a contiene a
-Para cualquier nodo de sea el valor de la solución óptima del problema del sub-árbol
con raíz definido en el árbol con el nodo como raíz.
Si el sub-árbol óptimo es vacío, claramente . De otra manera el sub-árbol óptimo contiene
También puede contener los sub-árboles de con raíz en para .
Por el principio de optimalidad, estos sub-árboles deben ellos mismos ser
subárboles óptimos con raíz. Por tanto se obtiene la siguiente recursión:
𝐻
( 𝑣 )=𝑚𝑎𝑥 0,𝑐 𝑣 + ∑ 𝐻 (𝑤 )
{ 𝑤 ∈𝑠 (𝑣) }
Para inicializar la recursión, se debe empezar por las hojas (nodos que no tienen
sucesores)
Para cada hoja .
Los cálculos se llevan a cabo, trabajando desde las hojas hasta la raíz, hasta que el
optimo sea encontrado.
El Algoritmo es de orden n O(n), ya que los términos y ocurren sólo una vez durante
los cálculos de recursión.
Ejemplo 5.2 Sea la instancia del problema del subárbol óptimo de un árbol mostrado
en la siguiente figura. con raíz
2 -8
2 3
-1 -6 -1 -1 2
4 5 6 7 8
9 10 11 12 13
5 3 -2 3 3
-2
1
2 -8
2 3
-1 -6 -1 -1 2
4 5 6 7 8
9 10 11 12 13
5 3 -2 3 3
Empezando
con los nodos hoja,
Recuerde que
Trabajando Hacia adentro,
Y
Note que los valores de para todos los sucesores de los nodos 2 y 3 son conocidos y por
tanto .
Finalmente
Descartando los sub-árboles , y queda el sub-árbol óptimo con nodos
1,2,5,9,10 de valor
-2
1 Sub-árbol óptimo
2 -8
2 3
-1 -6 -1 -1 2
4 5 6 7 8
9 10 11 12 13
5 3 -2 3 3
5.4. Problema binario de la Mochila
Mientras problemas como el ULS (Uncapacitated lot sizing problem) y el problema del
subárbol óptimo tienen la propiedad de optimización eficiente, los problemas de la
mochila son en general más difíciles.
Esto equivale a tomar una parte de los
artículos y definir una capacidad para ellos.
𝑥 ∈ 𝐵 𝑟
Entonces da el valor óptimo del problema de la mochila. Por tanto es necesario definir
una recursión que permita calcular en términos de los valores de para y .
la solución óptima para el problema con valor se pueden decir dos cosas;
De
que ó
(ii) Si entonces
Entonces se llega a la recursión:
Ahora, al comenzar la recursión con para o alternativamente con para y para ,
entonces use la recursión para calcular sucesivamente
2 𝑥 1 +1 𝑥 2 +6 𝑥3 +5 𝑥 4 ≤7
𝑥 ∈ 𝐵 4
[2] Nadjib Brahimi , Stephane Dauzere-Peres, Najib M. Najid & Atle Nordli. Single Item
Lot Sizing Problems, European Journal of Operation Research, 168 (2006) 1-16