La programación dinámica es un método cuantitativo para la toma de decisiones que resuelve problemas de optimización dividiéndolos en subproblemas más pequeños. Se utiliza para problemas como la asignación de recursos limitados. Resuelve cada subproblema una sola vez almacenando los resultados y construyendo la solución óptima de forma incremental mediante el principio de optimalidad de Bellman.
3. INTRODUCCION
Es un método cuantitativo de toma de decisiones desarrollada por
Bellman y Dantzig en 1957
La programación dinámica (PD) 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 mayor
parte de las veces, la programación dinámica obtiene soluciones
con un avance en reversa, desde el final de un problema hacia el
principio con lo que un problema grande se convierte en una serie
de problemas más pequeños y más tratables. Así, la programación
dinámica se puede definir como una técnica matemática útil que
resuelve una serie de decisiones secuenciales, cada una de las
cuales afecta las decisiones futuras.
4. Ventajas
Eficaz para resolver problemas de gran complejidad al
dividirlo y secuenciarlo.
Resuelve cada sub problema una sola vez.
Los cálculos de cada etapa se organizan y se guardan de
manera eficiente, facilitando su consulta para posteriores
análisis.
5. Desventajas
No aplicable a todo tipo de problemas.
Si hay algún error en una tabla afecta a todo el problema.
6. Tenemos n objetos, cada uno con un peso (wi) y un beneficio
(vi), y una mochila en la que podemos 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).
Problema de la mochila 0/1
7. Programacion Dinamica. Problema de la mochila
Ganancias en capacidad…
Etapa Articulo
Peso
(Kg)
Benefici
o Bs 0 1 2 3 4 5 6 7 8
0 estado inicial 0 0 0 0 0 0 0 0 0
1 A 1 2 0
2 B 2 5 0
3 C 4 6 0
4 D 5 10 0
5 E 7 13 0
6 F 8 16 0
2 2 2 2 2 2 2 2
A A A A A A A A
2
A
5
B
7
A+B
7 7 7 7 7
A+B A+B A+B A+B A+B
2 5 7
A B A+B
7
A+B
8
A+C
11
B+C
13
A+B+C
13
A+B+C
2 5 7 7
A B A+B A+B
10
D
12
A+D
15
B+D
17
A+B+D
2 5 7 7 10 12
A B A+B A+B D A+D
15
B+D
17
A+B+D
2 5 7 7 10 12 15
A B A+B A+B D A+D B+D
17
A+B+D
8. 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.
Tiempo de ejecución: (n).
9. 1. En que problemas se utiliza la programación dinámica?
Resp.- La programación dinámica se suele utilizar en problemas de
optimización, donde una solución está formada por una serie de decisiones.
1. Comparando con la técnica de Divide y vencerás en que se parecen?
Resp.- Los dos resuelven el problema original combinando las soluciones para
subproblemas más pequeños.
1. Y en que se diferencian de la técnica de Divide y Vencerás?
Resp.-almacena los resultados de los subproblemas en una tabla, calculando
primero las soluciones para los problemas pequeños.
1. La programación Dinámica en que principio se basa?
Resp.- La programación dinámica se basa en el Principio de Optimalidad de
Bellman: cualquier subsecuencia de una secuencia óptima debe ser, a su vez,
una secuencia óptima.
1. Que aspecto importante tiene la programación Dinámica?
Resp.-los algoritmos de programación dinámica necesitan una tabla para
almacenar los resultados parciales, que puede ocupar mucha memoria.
PREGUNTAS
10. 1. Cual es la definición de top down?
Resp.- El problema se divide en sub problemas y estos se resuelven
recordándolos las soluciones de arriba hacia abajo
1. Cual es la definición de Bottom up?
Resp.- este enfoque es ligeramente es mejor en su consumo de espacio y
llamadas de funciones encontrando todos los sub problemas necesarios.
1. A que se refiere optimizar?
Resp.-a buscar alguna de las mejores soluciones de entre muchas
alternativas posibles
1. La programación dinámica es …?
Resp.- un método para reducir el tiempo de ejecución.
1. Quien invento la programación dinámica?
Resp.-Richard Bellman en 1953
PREGUNTAS