Programación DinámicaProblema de la mochila 0/1 Definición de la ecuación recurrente: • Sea...
Transcript of Programación DinámicaProblema de la mochila 0/1 Definición de la ecuación recurrente: • Sea...
Introducción a la PD El matemático Richard que se utiliza para optimizar problemas
complejos que pueden ser discretizados y secuencializados.Bellman
inventó la PD en 1953
Es una técnica que permite determinar de manera eficiente las
decisiones que optimizan el comportamiento de un sistema que
evoluciona a lo largo de una serie de etapas.
Trata de encontrar la secuencia de decisiones que optimiza el
comportamiento de un proceso múltiples etapas.
Determina la solución óptima de un problema de n variables
descomponiéndola en n etapas, con cada etapa incluyendo un
subproblema de una sola variable.
La ventaja en el aspecto de los cálculos es que optimizar una sola
variable, en vez de subproblemas de n variables.
Principio de optimalidad de Bellman La principal contribución de la PD es el principio de
optimalidad, un marco de referencia para
descomponer el problema en etapas.
Dada una secuencia óptima de decisiones, toda
subsecuencia de ella es, a su vez, óptima».
Los cálculos en la PD se hacen recursivamente, en el
sentido de la solución óptima de un subproblema se
utiliza como una entrada para el siguiente subproblema.
Para el momento en que se resuelve el último
subproblema, se tiene la solución óptima para todo el
problema
Características de los problemas de PD
El problema se puede dividir en etapas; cada etapa requiere una
decisión.
Cada etapa tiene un numero de estados asociados con ella.
La decisión tomada en cualquier etapa indica como se transforma
en la siguiente etapa.
Dado el estado actual, la decisión optima para cada una de las
etapas restantes no debe depender de estados previamente
alcanzados o de decisiones previamente tomadas.
Si los estados del problema se han clasificado en uno de T etapas,
debe haber una formula recursiva que relacione el costo o
recompensa durante las etapas t, t+1,…, T con el costo o
recompensa de las etapas t +1, t +2,…, T
Relación recursiva: función que relaciona las etapas Hacia atrás: define la política óptima de n conociendo n-1
Hacia adelante: define la política óptima de n+1 conociendo n
Sean
Sn : el estado del sistema en la etapa n
Xn : la variable de decisión en la etapa n
fn = (Sn, Xn ) una función de recursividad que define una
política óptima en la etapa n
Ejemplo 1: La diligencia (stagecoach)
Es un ejemplo para ilustrar la PD, ya que hay métodos más
eficientes para hacerlo.
Un viajero quiere ir de un punto A, a un punto J a un menor
costo, siendo los costos como se describen en las tablas:
De \ A B C D
A 2 4 3
De\ A E F G
B 7 4 6
C 3 2 4
D 4 1 5
De\ A H I
E 1 4
F 6 3
G 3 3
De\ A J
H 3
I 4
Formulación del problema Sean xn (n = 1, 2, 3…p) las variables de decisión que representan el
destino inmediato de la etapa n, tal que la ruta seleccionada sea A x1
x2 … xp, donde xp será el destino J.
Sea n(s, xn) el costo total de la mejor política global para las etapas
restantes, dado que el viajero se encuentra en el estado s listo para iniciar
la etapa n y elige xn como destino inmediato.
Dados s y n, sea xn* (no necesariamente único) que minimiza n(s, xn) y
sea n* el valor mínimo de n(s, xn), entonces:
n* = min n*(s, xn) = n(s, xn*), xn
Donde n(s, xn) = costo inmediato(etapa n) + mínimo costo futuro (etapas n
+ 1 en adelante), tal que
n(s, xn) = cs, xn + n+1(s, xn*)
+
Solución El objetivo es encontrar 1*(A) y la ruta correspondiente. A través de la
PD, se encuentra sucesivamente 4*(s), 3*(s), 2*(s) y finalmente
1*(s). Esto se conoce como recursividad hacia atrás.
Cuando el viajero sólo tiene una etapa por recorrer (n = 4), su ruta de
ahí en adelante está determinada por su estado actual (H o I) y su
destino final x4 = J, de manera que para esta última jornada el viaje es
s J,
Cómo 4*(s) = 4(s, J) = cs,J + 5(s, x5*)
Donde 5(s, x5*) = 0 (el viaje termina en J)
n = 4
n = 3
s 4*(s) x4
H 3 J
I 4 J
s \ x3 3(s, x3) = cs,x + 4(s, x4*)
3*(s) x3* H I
E 1 + 3 4 + 4 4 H
F 6 + 3 3 + 4 7 I
G 3 + 3 3 + 4 6 H
n = 2
n = 1
s \ x2 (s, x2) = cs,x + 3(s, x3*)
2*(s) x2* E F G
B 7 + 4 4 + 7 6 + 6 11 E o F
C 3 + 4 2 + 7 4 + 6 7 E
D 4 + 4 1 + 7 5 + 6 8 E o F
s \ x1 (s, x1) = cs,x + 2(s, x2*)
1*(s) x1* B C D
A 2 + 11 4 + 7 3 + 8 11 C o D
Ruta óptima:
A C E H I = 11
A D E H J = 11
A D F I J = 11
Ejemplo: asignación de brigadas médicas El WORLD HEALTH COUNCIL, se dedica a mejorar la atención
médica en los países subdesarrollados del mundo. Dispone de 5
brigadas médicas para asignarlas a tres de estos países.
El consejo necesita determinar cuántas brigadas debe asignar a cada
país (si lo hace) para maximizar la medida de la eficiencia de las
brigadas, la cual será el incremento en el promedio de vida esperado
en añose , multiplicado por la población de cada país.
Formulación
Etapas: Países a los cuales se les debe asignar las
brigadas. ( n=1- País1 ); ( n=2 –País 2 ); ( n=3 -País 3).
Variable de decisión: Xn : Número de brigadas
asignadas al país n.
Estado: ¿ Qué es lo que cambia de una etapa a otra?
Sn : Número de brigadas médicas disponibles para
asignarse a los países restantes
S1 = 5, X1: 0,.., 5
S2 = S1 - X1: 0,…, 5, dependiendo de X1
S3 = S2 - X2: 0,…, 5 dependiendo de X2
Función recursiva:
Sea Pi (Xi) la medida del desempeño por
asignar Xi brigadas médicas al país i,
entonces
Max Z = i=1,3 Pi (Xi )
s.a i=1,3 Xi = 5
0 ≤ Xi ≤ 5 para Xi enteros
De manera general
fn(Sn, Xn) = cs,x xn + fn+1* (Xn)
Para el ejemplo
fn(Sn, Xn) = Pn (Xn) + fn+1* (Sn - Xn)
Donde la etapa n corresponde al país n
En el caso de que se asignen todas las
brigadas, el estado final (cero brigadas
para asignar) se alcanza al terminar la
etapa 3,entonces f4* = 0
Problema de la mochila 0/1
• Problema: Se tienen n objetos, cada uno con un peso (wi) y un
beneficio (vi), y una mochila en la que se pueden meter objetos,
con una capacidad de peso máximo M. El objetivo es maximizar
el beneficio de los objetos transportados, donde cada objeto se
puede coger entero (xi=1) o nada (xi=0).
• Es un problema NP-Completo
• Sujeto a:
Problema de la mochila 0/1
Definición de la ecuación recurrente: • Sea Mochila (i, m) el problema de la mochila, considerando sólo los i
primeros objetos (de los n originales) con una capacidad de peso m.
Se puede suponer que la siguiente expresión devuelve el valor de
beneficio total: xa·va, para a = 1, j
• Se puede definir el problema de forma recurrente, en función de que se
use o no el objeto i.
• Si no se usa el objeto i: Mochila (i, m) = Mochila (i - 1, m)
• Si se usa: Mochila (i, m) = vi + Mochila (i - 1, m - wi)
• Valor óptimo:
Mochila (i, m) = max (Mochila (i-1, m), vi + Mochila (i-1, m - wi))
Problema de la mochila 0/1
Casos base:
• Si (i<0) o (m<0) entonces no hay solución: Mochila (i, m) =
-
• En otro caso, si (i=0) ó (m=0) la solución es no incluir
ningún objeto: Mochila (i, m) = 0
Definición de las tablas:
• La solución del problema original será Mochila (n, M).
• Por lo tanto necesitamos una tabla: V: array [0..n, 0..M] de
enteros
• V[i, j] = Beneficio máximo usando los i primeros objetos y
peso j.
Problema de la mochila 0/1
Se puede tener una tabla auxiliar de 0/1 para almacenar las decisiones parciales y recomponer la solución, o
A partir de la tabla V obtener la solución (x1, x2, ..., xn): partir de la posición V[n, M] y analizar las decisiones que se tomaron para cada objeto i.
Si (V[i, j] = V[i-1, j]) entonces la solución no usa el objeto i, xi= 0.
Si (V[i, j] = V[i-1, j-wi] + vi) entonces sí se usa el objeto i, xi= 1.
Si (V[i, j] = V[i-1, j-wi] + vi) y (V[i, j] = V[i-1, j]) entonces se puede usar el objeto i o no (existe más de una solución óptima).
Acabar cuando se llegue a un i=0 ó j=0.
Problema de la mochila 0/1
Forma de rellenar las tablas:
• Inicializar los casos base.
• Para todo i, desde 1 hasta n, y j desde 1 hasta M, aplicar la
ecuación de recurrencia:
V[i, j] = max (V[i - 1, j] , V[i - 1, j - wi] + vi)
• Si j es negativo, entonces V[i, j] = -, y el máximo será el
otro término.
• Ejemplo. n= 3, M= 6, w= (2, 3, 4), v= (1, 2, 5), hay uno de cada uno de los elementos
Solución
w, v
i \ j 0 1 2 3 4 5 6
0 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0
1 0, 0 0, 0 2, 1 2, 1 2, 1 2, 1 2, 1
2 0, 0 0, 0 2, 1 3, 2 3, 2 5, 3 5, 3
3 0. 0 0. 0 2, 1 3, 2 4, 5 4, 5 6, 6
i w j
0 0 0
1 2 1
2 3 2
3 4 5
i n w v
1 1 2 1
2 0 2 1
3 1 6 6