Programación DinámicaProblema de la mochila 0/1 Definición de la ecuación recurrente: • Sea...

40
Programación Dinámica

Transcript of Programación DinámicaProblema de la mochila 0/1 Definición de la ecuación recurrente: • Sea...

Programación Dinámica

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

Elementos de un problema de PD

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

Sistema de caminos y costos

x1 x3 x4 x2 A

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

s 4*(s) x4

n = 3

s \ x3 3(s, x3) = cs,x + 4(s, x4*)

3*(s) x3*

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 =

n =

s \ x2 (s, x2) = cs,x + 3(s, x3*)

2*(s) x2*

s \ x1 (s, x1) = cs,x + 2(s, x2*)

1*(s) x1*

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

Solución con WinQSB

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

Utilizando una relación recursiva hacia atrás

N = 3

S3 3(S3, X3) = P3(X3) + 4* 3(S3, X3) X3

N = 2

X2

S2

2(S2, X2) = P2 (X2) + 3*(S2 -X2)

f(S2) X2 0 1 2 3 4 5

N = 1

X2

S2

2(S1, X1) = P1 (X1) + 2*(S1 –X1)

S2 X2 0 1 2 3 4 5

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

1

2

3

i w j

0 0 0

1 2 1

2 3 2

3 4 5

i n w v

1

2

3

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

WinQSB