Programación Dinámica  La programación dinámica se suele utilizar en problemas de optimización, donde una solución está formada por una serie de decisiones.

Slides:



Advertisements
Presentaciones similares
Diseño y análisis de algoritmos
Advertisements

ALUMNO: LEONODAS TEJADA BALDARRAGO GRADO: TERCERO
FACTORIZACIÓN LU Bachilleres:
Valores y Vectores Propios
Investigación de Operaciones
MATRIZ DE CHEQUEO DE PARIDAD
MÉTODOS NUMÉRICOS. Explicación del método de L U. Realizado por:
1.- Definiciones. 2.- Fórmulas. 3.- Esquema. 4.- Ejercicios.
Unidad académica: Ingenierías
KRIGING.
MATRICES.
DETERMINANTES DE UNA MATRIZ
MATRICES Y DETERMINANTES
MATRICES Concepto Se llama matriz de orden m x n a todo conjunto de elementos aij dispuestos en m líneas horizontales (filas) y n verticales (columnas)
TRANSFORMACIONES LINEALES PARA REDES NEURALES ARTIFICIALES
Informática empresarial
FUNCIONES, MATRICES Y DETERMINANTES
Programación en Matlab
Resolución de Problemas Método Simplex
Universidad de los Andes-CODENSA
Programación Lineal Unidad 1 Parte 3.
DIVISIÓN DE POLINOMIOS 1
ANALISIS MATEMÁTICO PARA ECONOMISTAS IV
Programación dinámica: Introducción
Material de apoyo Unidad 4 Estructura de datos
Divide y vencerás 1. Método general.
Propiedades de los determinantes.
Algebra Lineal.
M A T R I C E S MATRICES matrices.
Matrices Conceptos generales
Matrices – Determinantes Sistemas de Ecuaciones lineales
Parte I. Estructuras de Datos.
Análisis y Diseño de Algoritmos
Matrices – Determinantes Sistemas de Ecuaciones lineales
Matrices y Determinantes
Tema 11: Programación dinámica
Parte I. Estructuras de Datos.
Diseño y análisis de algoritmos
TEMA 5: El problema del flujo con costo mínimo
Tema: Propiedades de los determinantes
II Unidad: Lenguaje Algebraico
MATRICES.
Matriz inversa Método Gauss Jordan.
III UNIDAD MATRICES.
MATRICES Y DETERMINANTES
MATRIZ INVERSA.
MENORES Y COFACTORES.
Objetivos del tema. Hemos visto lo que es la estructura de un programa, los datos, que esos datos en realidad se convierten en variables de distinto.
Matrices Pág. 1. Matrices Pág. 2 Se llama matriz traspuesta de A, y se representa por A t a la matriz que resulta de intercambiar las filas y las columnas.
MATRICES.
Unidad 2 Matrices.
6. Sistemas de ecuaciones diferenciales lineales
Unidad IV. Métodos de optimización con restricciones
TEMA 2 : ALGEBRA DE MATRICES.
Hernández Camacho Víctor Jesus Islas Sánchez Karla Vanessa
NUMEROS ALEATORIOS. La idea es hallar un generador que sea fácil de implementar en la computadora, que sea rápido y que no ocupe mucho espacio memoria,
1 Índice del libro Conjuntos numéricos 1.Números naturalesNúmeros naturales 2.Números enterosNúmeros enteros 3.Números racionalesNúmeros.
 El máximo común divisor de dos o más números, es el mayor número que divide a todos exactamente.
Inecuaciones lineales o inecuaciones de primer grado
Clase II Estructuras dinámicas (TAD) Listas Enlazadas. ¿A que llamamos estructuras dinámicas? ¿Por qué son necesarias? Ventajas y Desventajas que tendremos.
Programación SISTEMAS NUMERICOS PROGRAMACION I INFO 012.
Definición de matriz Se llama matriz de orden m×n a todo conjunto rectangular de elementos a ij dispuestos en m líneas horizontales (filas) y n verticales.
Matemáticas I Trigonometría (1ª Parte) Resolución de triángulos Pedro Castro Ortega lasmatematicas.eu.
MATRICES Y DETERMINANTES Una matriz cuadrada que posee inversa se dice que es inversible o regular; en caso contrario recibe el nombre de singular. Matrices.
Operaciones algebraicas. Suma  La adición es una operación básica de la aritmética de los números naturales, enteros, racionales, reales y complejos;
Tema 3. Secuencias y transformada z
 IMPARTIDA POR:  ING. NOE IBARRA ARREDONDO  21/NOV/2015 RIOVERDE, S.L.P. ALGEBRA LINEAL Orden de una Matriz Operaciones con Matrices Transformaciones.
SUMA Y RESTA DE MONOMIOS O Para poder sumar y restar monomios tienen que ser semejantes. O Si son semejantes, para sumarlos/restarlos basta con sumar/restar.
Profesora: Milagros Coraspe Realizado por: Almérida, Gissell C.I.: Valladares, Angélica C.I.: Universidad De Oriente Núcleo Monagas.
Presentado por: Yuli Domínguez. Portal Educativo El mentor de matemáticas Grupo Océano MÚLTIPLOS Y DIVISORES DE UN NÚMERO.
Transcripción de la presentación:

Programación Dinámica  La programación dinámica se suele utilizar en problemas de optimización, donde una solución está formada por una serie de decisiones.  Igual que la técnica divide y vencerás, resuelve el problema original combinando las soluciones para subproblemas más pequeños.  Sin embargo, la programación dinámica no utiliza recursividad, sino que almacena los resultados de los subproblemas en una tabla, calculando primero las soluciones para los problemas pequeños.  Con esto se pretende evitar la repetición de cálculos para problemas más pequeños.

  Está basada en el principio de optimalidad de Bellman: “Cualquier subsecuencia de decisiones de una secuencia óptima de decisiones que resuelve un problema también debe ser óptima respecto al subproblema que resuelve.”Óptima Óptima Óptima

  Al construir un algoritmo usando la estrategia de programación dinámica es necesario: 1. Caracterizar la estructura de una solución optima. 2. Definir recursivamente el valor de una solución óptima. 3. Computar el valor de una solución en forma bottom-up. 4. [Opcional] Construir una solución óptima a partir de la información computada.

DESCRIPCIÓN DEL PROBLEMA  Necesitamos calcular la matriz producto M de n matrices dadas M = M1M2...Mn minimizando el número total de multiplicaciones escalares a realizar. Nos centraremos en obtener el orden en que se deben multiplicar las matrices para que el número de multiplicaciones escalares sea el mínimo posible, obteniendo además este número. Por ser asociativa la multiplicación de matrices, existen muchas formas posibles de realizar esa operación, cada una con un coste asociado. Si cada Mi es de dimensión di–1xdi (1 ≤ i ≤ n), multiplicar Mi Mi+1 requiere di–1di di+1 operaciones.  El problema consiste en encontrar el mínimo número de operaciones necesario para calcular el producto M.

 Por ejemplo, para n = 4 y para las matrices M1, M2, M3 y M4 cuyos órdenes son: M1(30×1), M2(1×40), M3(40×10),M4(10×25) M1(30×1), M2(1×40), M3(40×10),M4(10×25) Hay cinco formas distintas de multiplicarlas, y sus costes asociados (en términos de las multiplicaciones escalares que necesitan) son: Hay cinco formas distintas de multiplicarlas, y sus costes asociados (en términos de las multiplicaciones escalares que necesitan) son: ((M1M2)M3)M4 = 30·1· ·40· ·10·25 = M1(M2(M3M4)) = 40·10·25 + 1·40· ·1·25 = M1(M2(M3M4)) = 40·10·25 + 1·40· ·1·25 = (M1M2)(M3M4) = 30·1· ·10· ·40·25 = (M1M2)(M3M4) = 30·1· ·10· ·40·25 = M1((M2M3)M4) = 1·40·10 + 1·10· ·1·25 = M1((M2M3)M4) = 1·40·10 + 1·10· ·1·25 = (M1(M2M3))M4 = 1·40· ·1· ·10·25 = (M1(M2M3))M4 = 1·40· ·1· ·10·25 = Como puede observarse, la mejor forma necesita casi treinta veces menos multiplicaciones que la peor, por lo cual es importante elegir una buena asociación.

Demostración de optimalidad:  El principio de optimalidad de Bellman dice lo siguiente: “Cualquier subsecuencia de decisiones de una secuencia de decisiones óptima que resuelva un problema también debe ser óptima para el subproblema que resuelve”.Debemos demostrar si nuestro razonamiento cumple el principio de optimalidad de Bellman. Si la solución a nuestro problema es óptima, y elegimos que la última multiplicación que se realice sea (M1... Mk ) (Mk+1... Mn) entonces se realizarán d0 x dk x dn productos más los productos necesarios para realizar las multiplicaciones de las dos subsecuencias. Como nuestra solución es óptima también deben serlo las soluciones a las dos subsecuencias de matrices. Por tanto, se cumple el principio.

 EXPLICACIÓN En primer lugar, vamos a suponer que cada Mi es de dimensión di– 1xdi (1 ≤ i ≤ n), y por tanto realizar la multiplicación Mi Mi+1 va a requerir un total de di1didi+1 operaciones. Llamaremos M(i,j) al número mínimo de multiplicaciones escalares necesarias para el cómputo del producto de Mi Mi+1... Mj con 1 ≤ i ≤ j ≤ n. Por consiguiente, la solución al problema planteado coincidirá con M(1,n). En primer lugar, vamos a suponer que cada Mi es de dimensión di– 1xdi (1 ≤ i ≤ n), y por tanto realizar la multiplicación Mi Mi+1 va a requerir un total de di1didi+1 operaciones. Llamaremos M(i,j) al número mínimo de multiplicaciones escalares necesarias para el cómputo del producto de Mi Mi+1... Mj con 1 ≤ i ≤ j ≤ n. Por consiguiente, la solución al problema planteado coincidirá con M(1,n). Para plantear la ecuación en recurrencia que define la solución, supongamos que asociamos las matrices de la siguiente manera: Para plantear la ecuación en recurrencia que define la solución, supongamos que asociamos las matrices de la siguiente manera: (Mi Mi+1... Mk) (Mk+1 Mk+2... Mj). (Mi Mi+1... Mk) (Mk+1 Mk+2... Mj). Aplicando el principio de óptimo, el valor de M(i,j) será la suma del número de multiplicaciones escalares necesarias para calcular el producto de las matrices Mi Mi+1...Mk, que corresponde a M(i,k), más el número de multiplicaciones escalares para el producto de las matrices Mk+1Mk+2...Mj que es M(k+1,j), más el producto que corresponde a la última multiplicación entre las matrices de dimensiones (di–1 dk) y (dk dj) es decir, di–1dkdj. En consecuencia, el valor de M(i,j) para la asociación anteriormente expuesta viene dado por la expresión: Aplicando el principio de óptimo, el valor de M(i,j) será la suma del número de multiplicaciones escalares necesarias para calcular el producto de las matrices Mi Mi+1...Mk, que corresponde a M(i,k), más el número de multiplicaciones escalares para el producto de las matrices Mk+1Mk+2...Mj que es M(k+1,j), más el producto que corresponde a la última multiplicación entre las matrices de dimensiones (di–1 dk) y (dk dj) es decir, di–1dkdj. En consecuencia, el valor de M(i,j) para la asociación anteriormente expuesta viene dado por la expresión: M(i,j) = M(i,k) + M(k+1,j) + di–1dk dj M(i,j) = M(i,k) + M(k+1,j) + di–1dk dj

Pero k puede tomar cualquier valor entre i y j–1, y por tanto M(i,j) deberá escoger el más favorable de entre todos ellos, es decir: M(i, j) = Min {M(i,k ) + M(k +1, j) + di−1dkd j} (i≤k<j) lo que nos lleva a la siguiente relación en recurrencia:

 Para resolver tal ecuación en un tiempo de complejidad polinómico es necesario crear una tabla en la que se vayan almacenando los valores M(i,j) (1 ≤ i ≤ j ≤ n) y que permita a partir de las condiciones iniciales reutilizar los valores calculados en los pasos anteriores. Esta tabla se irá rellenando por diagonales sabiendo que los elementos de la diagonal principal son todos cero. Esta tabla se irá rellenando por diagonales sabiendo que los elementos de la diagonal principal son todos cero.  Cada elemento M[i,j] será el valor mínimo de entre todos los pares (M[i,k] + M[k+1,j]) más la aportación correspondiente a la última multiplicación (di–1dkdj).  Al ir rellenando la tabla por diagonales se asegura que esta información (M[i,k],M[k+1,j]) está disponible cuando se necesita, pues cada M[i,j] utiliza para su cálculo todos los elementos anteriores de su fila y todos los de su columna por debajo suya.

Razonamiento  Como estructura de datos utilizaremos una tabla matrices [1..n,1..n]. Siguiendo la recurrencia podemos deducir que para calcular el valor de una casilla (i, j) necesitamos los resultados de la tabla de la misma fila, y las columnas anteriores (para la primera llamada recursiva), y de la misma columna, y las filas posteriores (para la segunda llamada recursiva). Por eso, iremos haciendo el recorrido por diagonales, y sólo necesitaremos la parte de la tabla que queda por encima de la diagonal principal.

 Como la i y la j cumplen que 1 <= i <= j <= n solo vamos a utilizar la mitad superior derecha de la tabla en donde se cumple la restricción. En las Mij donde la i=j, se cumple que Mij=0. Tal y como hemos definido Mij es el número de multiplicaciones escalares necesarias para obtener el resultado de multiplicar desde la matriz i hasta la j, si i y j son iguales significa que no se realiza ninguna operación porque solo tenemos una matriz. La tabla empleada para realizar los cálculos tendría la forma que muestra la imagen M 12 M 13 M 14 20M 23 M 24 30M 34 40

Ejemplo A(13  5), B(5  89), C(89  3) y D(3  34) A(13  5), B(5  89), C(89  3) y D(3  34) Se tiene d=(13,5,89,3,34). Se tiene d=(13,5,89,3,34). Para s=1: m 12 =5785, m 23 =1335, m 34 =9078. Para s=1: m 12 =5785, m 23 =1335, m 34 =9078. Para s=2: Para s=2: Para s=3:

La matriz es: La matriz es:

ALGORITMO fun Mult_Mat_PD(dimMatriz[0..n]: ent) dev sol:ent // n dimensión de la matriz var //solución es decir número de matrices a solucionar var //solución es decir número de matrices a solucionar matrizSol[1..n,1..n]: ent; // Matriz solución matrizSol[1..n,1..n]: ent; // Matriz solución fvar fvar para i=1 hasta n hacer para i=1 hasta n hacer matrizSol[i][i]=0; // Inicializa la diagonal principal em cero matrizSol[i][i]=0; // Inicializa la diagonal principal em cero fpara fpara para diagonal=1 hasta n-1 hacer para diagonal=1 hasta n-1 hacer para i=0 hasta n-diagonal hacer para i=0 hasta n-diagonal hacer matrizSol[i,i+diagonal]=minProd(dimMatriz,matrizSol,i,i+diagonal); matrizSol[i,i+diagonal]=minProd(dimMatriz,matrizSol,i,i+diagonal); fpara // en cada casilla de cada diagonal escribe su correspondiente fpara // en cada casilla de cada diagonal escribe su correspondiente fpara // mínimo de multiplicaciones necesarias fpara // mínimo de multiplicaciones necesarias dev matrizSol[0,n]); dev matrizSol[0,n]);ffun

fun minProd(dimMatriz[1..n]: ent,matrizSol[1..n,1..n]: ent,i,j: ent) dev minP:ent var var aux: ent; aux: ent; fvar fvar minP=+infinito; minP=+infinito; para k=i hasta j-1 hacer para k=i hasta j-1 hacer aux=matrizSol[i,k]+matrizSol[k+1,j]+(dimMatriz[i1]*dimMatriz[k]*dim Matriz[j]; aux=matrizSol[i,k]+matrizSol[k+1,j]+(dimMatriz[i1]*dimMatriz[k]*dim Matriz[j]; si (aux<minP) entonces si (aux<minP) entonces minP=aux; // actualiza si el número de multiplicacione es menor minP=aux; // actualiza si el número de multiplicacione es menor fsi fsi fpara fpara dev minP; dev minP;ffun

PLANTEAMIENTO DE LA COMPLEJIDAD TEMPORAL DE LA SOLUCIÓN  Observando el método matriz vemos que existe un bucle externo que se repite desde diagonal = 1 hasta n – 1, y en su interior un bucle dependiente de la iteración estudiada y del valor de diagonal, y que se ejecuta desde 1 hasta n – diagonal. En el interior de este bucle hay una llamada al método mínimo que tiene una complejidad del orden del valor de la diagonal, y por tanto el tiempo de ejecución del algoritmo es: por lo que concluimos que su complejidad temporal es de orden O(n3).