Tema: Programación Dinámica.

Documentos relacionados
Análisis de algoritmos

Programación Dinámica 1

Complejidad computacional (Análisis de Algoritmos)

GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos.

Tema: Autómata de Pila

Tema: Métodos de Ordenamiento. Parte 1.

ECUACIONES.

DEPARTAMENTO DE MATEMATICAS Y FISICA Matemáticas Discreta

Tema: Herramientas UML, Análisis y diseño UML

Tema: Herramientas UML, Análisis y diseño UML

UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA FACULTAD DE CIENCIAS PROGRAMA DE MATEMÁTICAS PLAN DE ESTUDIOS

Estrategias de Diseño de Algoritmos

I. Complejidad de Problemas

Para las ecuaciones diferenciales ordinarias no lineales no existen métodos generales.

Algoritmos y solución de problemas. Fundamentos de Programación Otoño 2008 Mtro. Luis Eduardo Pérez Bernal

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Algebra lineal y conjuntos convexos

EVALUACIÓN SUMATIVA. 2.2 Resuelve problemas, utilizando el principio de la multiplicación con seguridad.

Tema: Repaso sobre el uso del IDE de Microsoft Visual C#.

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE ESTUDIOS SUPERIORES ACATLÁN LICENCIATURA EN MATEMÁTICAS APLICADAS Y COMPUTACIÓN

Formato para prácticas de laboratorio

Una ecuación puede tener ninguna, una o varias soluciones. Por ejemplo: 5x 9 = 1 es una ecuación con una incógnita con una solución, x = 2

Complejidad de los Algoritmos

Ecuaciones de 1er Grado 2. Incógnitas. Ing. Gerardo Sarmiento Díaz de León

Universidad de Managua

Materia: Matemática de Octavo Tema: Raíces de un polinomio. Marco teórico

Ecuaciones, inecuaciones y sistemas

Comprende el concepto de función y reconoce sus principales características. Grafica adecuadamente una función.

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Semana de las Matemáticas e Ingeniería. Desarrollo de algoritmos recursivos empleando la aplicación PseInt

DIPLOMADO. Evaluación de la Calidad de la práctica docente para la implementación del Nuevo Modelo Educativo en Escuelas de Ingeniería del I.P.N.

UNIDAD 7: MATRICES Y DETERMINANTES

Ecuaciones de primer grado o lineales

Esquema conceptual: Unidad IV

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

Procesos de Fabricación I. Guía 1 1 ESTUDIO DEL TRABAJO INDUSTRIAL

7.1 Consideraciones. Considere la búsqueda de un libro en una biblioteca. Considere la búsqueda de un nombre en el directorio telefónico.

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

2007/ PROGRAMACIÓN. Tipo: TRO Curso: 1 Semestre: AB CREDITOS Totales TA TS AT AP PA OBJETIVOS. 1.-Introducción.

4 E.M. Curso: Unidad: Estadísticas Inferencial. Colegio SSCC Concepción. Depto. de Matemáticas. Nombre: CURSO: Unidad de Aprendizaje: FUNCIONES

Breve introducción a la Investigación de Operaciones

Algoritmos glotones. mat-151

PRÁCTICA No. 2 FORMA POLAR DE UN NUMERO COMPLEJO. Otra forma de expresar un número complejo es la forma polar o forma módulo-argumento,

Electrónica II. Guía 4

PROBLEMA DE PROGRAMACIÓN LINEAL RESUELTO POR MÉTODO SIMPLEX

Sistemas de ecuaciones lineales

Procesos de Fabricación I. Guía 1 1 SISTEMAS DE CONTROL HIDRÁULICO Y NEUMÁTICO

Tema: Fuente de Alimentación de Rayos X

La segunda observación permite reformular el problema de una manera más simple:

Procesos de Fabricación I. Guía 1 1 SISTEMAS HIDRÁULICOS Y NEUMÁTICOS.

ECUACIONES POLINÓMICAS CON UNA INCÓGNITA

Ejemplo: El problema de la mochila. Algoritmos golosos. Algoritmos y Estructuras de Datos III. Segundo cuatrimestre 2013

Departamento de Matemáticas. ÁLGEBRA: Ecuaciones

Tema: Excel Formulas, Funciones y Macros

MODELOS DE INVESTIGACION DE OPERACIONES

3.º ESO. Matemáticas orientadas a las enseñanzas aplicadas

4.1 CONGRUENCIA ENTRE LOS OBJETIVOS DEL PLAN DE ESTUDIOS Y EL PERFIL DE EGRESO CON LAS LGAC:

LA ECUACIÓN CUADRÁTICA

TEMA 4: ECUACIONES Y SISTEMAS DE ECUACIONES

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

Tema 2 Introducción a la Programación en C.

IN Guía de Problemas Resueltos de Geometría de Programación Lineal v1.0

UNIDAD 6: SISTEMAS DE ECUACIONES

INGENIERÍA PROFESIONAL EN INOCUIDAD ALIMENTARIA EN COMPETENCIAS PROFESIONALES ASIGNATURA DE ROBÓTICA

Tema: Punteros a Objetos. Puntero this.

Tema: Clases y Objetos en C#. Parte II.

MAXIMOS Y MINIMOS RELATIVOS

Tema II: Metodología para la construcción de programas

INTERVALOS Y SEMIRRECTAS.

CONTENIDO 1 Diagrama de flujo 2 Pseudocodigo 3 Diagrama estructurado (nassi-schneiderman)

Universidad de Oriente Núcleo de Bolívar Unidad de cursos básicos Matemáticas IV. María Palma Roselvis Flores

Amplificador inversor y no inversor

Procesos de Fabricación I. Guía 1 SISTEMAS DE CONTROL HIDRÁULICO Y NEUMÁTICO

Estructura de datos. Carrera: SCC Participantes

Guía práctica de estudio 03: Algoritmos

ESCUELA DE INFORMÁTICA

Escuela de Ingeniería en Informática Empresarial SYLLABUS

CURSO CERO DE MATEMATICAS. Apuntes elaborados por Domingo Pestana Galván. y José Manuel Rodríguez García

Matemáticas UNIDAD 5 CONSIDERACIONES METODOLÓGICAS. Material de apoyo para el docente. Preparado por: Héctor Muñoz

ÍNDICE INTRODUCCIÓN...13

APRENDIZAJE DE LAS HERRAMIENTAS DE DESARROLLO DESARROLLO DE LA BASE DE DATOS DESARROLLO DEL INTERFAZ DE USUARIO Y DEL CÓDIGO VBA

Análisis de Algoritmos

Unidad 2: Ecuaciones, inecuaciones y sistemas.

TEMA 2: PROGRAMACIÓN LINEAL.

ALGORITMOS, ESTRUCTURAS Y PROGRAMACION

5.- Problemas de programación no lineal.

NOTACIÓN O GRANDE. El análisis de algoritmos estima el consumo de recursos de un algoritmo.

Pontificia Universidad Católica del Ecuador

Tema: Configuración de red AD-HOC

Función cuadrática. Ecuación de segundo grado completa

2. SEÑALES Y SISTEMAS DISCRETOS EN EL TIEMPO. Una señal puede ser definida como una portadora física de información. Por ejemplo,

Universidad Nacional Autónoma de Nicaragua UNAN-Managua. Curso de Investigación de Operaciones

Materia: Matemática de 5to Tema: Método de Cramer. Marco Teórico

Profesorado de Nivel Medio y Superior en Biología Matemática - 1º Cuatrimestre Año 2013 FUNCIÓN CUADRÁTICA

LA ECUACIÓN CUADRÁTICA

UNIDAD 2. Logaritmos DEFINICION DE LOGARITMO. Definiciones:

1: INTRODUCCIÓN AL USO DE LA HOJA DE CALCULO EXCEL COMO HERRAMIENTA PARA DESARROLLAR PROBLEMAS EN INGENIERÍA. SOLVER, REGRESION LINEAL MULTIPLE

SISTEMAS DE ECUACIONES LINEALES. Método de reducción o de Gauss. 1º DE BACHILLERATO DPTO DE MATEMÁTICAS COLEGIO MARAVILLAS AUTORA: Teresa González.

UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO

COLEGIO NACIONAL NICOLAS ESGUERRA EDIFICAMOS FUTURO TEMATICA DE TRABAJO GRADO: DECIMO ASIGNATURA: INFORMATICA PROFESOR: DANILO RODRIGUEZ ACERO

Transcripción:

Programación IV. Guía No. 12 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación IV Tema: Programación Dinámica. Objetivos Específicos Definir el concepto de programación dinámica. Interpretar un algoritmo y pasarlo a sintaxis de C#. Implementar soluciones a problemas utilizando programación dinámica. Materiales y Equipo Guía Número 12. Computadora con programa Microsoft Visual C#. Introducción Teórica Existe una serie de problemas cuyas soluciones pueden ser expresadas recursivamente en términos matemáticos, y posiblemente la manera más natural de resolverlos es mediante un algoritmo recursivo. Sin embargo, el tiempo de ejecución de la solución recursiva, normalmente de orden exponencial y por tanto impracticable, puede mejorarse substancialmente mediante la Programación Dinámica. Con el diseño divide y vencerás, para resolver un problema lo dividimos en subproblemas independientes, los cuales se resuelven de manera recursiva para combinar finalmente las soluciones y así resolver el problema original. El inconveniente se presenta cuando los subproblemas obtenidos no son independientes sino que existe solapamiento entre ellos; entonces es cuando una solución recursiva no resulta eficiente por la repetición de cálculos que conlleva. En estos casos es cuando la Programación Dinámica nos puede ofrecer una solución aceptable. La eficiencia de esta técnica consiste en resolver los subproblemas una sola vez, guardando sus soluciones en una tabla para su futura utilización.

2 Programación IV. Guía No. 12 La Programación Dinámica no sólo tiene sentido aplicarla por razones de eficiencia, sino porque además presenta un método capaz de resolver de manera eficiente problemas cuya solución ha sido abordada por otras técnicas y ha fracasado. Donde tiene mayor aplicación la Programación Dinámica es en la resolución de problemas de optimización. En este tipo de problemas se pueden presentar distintas soluciones, cada una con un valor, y lo que se desea es encontrar la solución de valor óptimo (máximo o mínimo). La solución de problemas mediante esta técnica se basa en el llamado principio de óptimo enunciado por Bellman en 1957 y que dice: En una secuencia de decisiones óptima toda subsecuencia ha de ser también óptima. Hemos de observar que aunque este principio parece evidente no siempre es aplicable y por tanto es necesario verificar que se cumple para el problema en cuestión. Un ejemplo claro para el que no se verifica este principio aparece al tratar de encontrar el camino de coste máximo entre dos vértices de un grafo ponderado. Para que un problema pueda ser abordado por esta técnica ha de cumplir dos condiciones: 1. La solución al problema ha de ser alcanzada a través de una secuencia de decisiones, una en cada etapa. 2. Dicha secuencia de decisiones ha de cumplir el principio de óptimo. Para que un problema pueda ser resuelto con la técnica de programación dinámica, debe cumplir con ciertas características: Naturaleza secuencial de las decisiones: el problema puede ser dividido en etapas. Cada etapa tiene un número de estados asociados a ella. La decisión óptima de cada etapa depende solo del estado actual y no de las decisiones anteriores. La decisión tomada en una etapa determina cuál será el estado de la etapa siguiente. En síntesis, la política óptima desde un estado s de la etapa k a la etapa final está constituida por una decisión que transforma s en un estado s' de la etapa k+1 y por la política óptima desde el estado s' hasta la etapa final. Para resolver un problema de programación dinámica debemos al menos poder realizar:

Programación IV. Guía No. 12 3 Identificación de etapas, estados y variable de decisión: Cada etapa debe tener asociado una o más decisiones (problema de optimización), cuya dependencia de las decisiones anteriores está dada exclusivamente por las variables de estado. Cada estado debe contener toda la información relevante para la toma de decisión asociada al período. Las variables de decisión son aquellas sobre las cuales debemos definir su valor y modificar el estado de la próxima etapa. Descripción de ecuaciones: Nos deben indicar como se acumula la función (función objetivo) y como varían las funciones de estado de una etapa a otra. Resolución: Debemos optimizar cada subproblema por etapas en función de los resultados de la resolución del subproblema siguiente. Para el caso del diseño de un algoritmo de Programación Dinámica debemos seguir los siguientes pasos: 1. Planteamiento de la solución como una sucesión de decisiones y verificación de que ésta cumple el principio de óptimo. 2. Definición sucesiva de la solución (función objetivo). 3. Cálculo del valor de la solución óptima mediante una tabla en donde se almacenan soluciones a problemas parciales para reutilizar los cálculos (evitar funciones recursivas). 4. Construcción de la solución óptima haciendo uso de la información contenida en la tabla anterior. Como ejemplo, veamos una solución en programación dinámica para la secuencia Fibonacci. Cálculo de la sucesión de Fibonacci. Antes de abordar problemas más complejos veamos un primer ejemplo en el cual va a quedar reflejada toda esta problemática. Se trata del cálculo de los términos de la sucesión de números de Fibonacci.

4 Programación IV. Guía No. 12 En esta, la sucesión se puede expresar de manera recursiva. Pero con esto perdería mucho potencial dado que la forma recursiva repite cálculos innecesariamente, la estructura matemática es la siguiente: En esta se tienen tres estados posibles: El primero es cuando n = 0, se toma la decisión que se guardará 1 en la secuencia. En el segundo, cuando n = 1, se decide guardar 1 en la secuencia. En el tercero, cuando n > 1, se decide guardar la suma de los dos últimos valores de la secuencia. Para este problema es posible diseñar un algoritmo que en tiempo lineal lo resuelva mediante la construcción de una tabla que permita ir almacenando los cálculos realizados hasta el momento para poder reutilizarlos: Fib(0) Fib(1) Fib(2) Fib(N) Con esta descripción se tiene el siguiente algoritmo de programación dinámica: FUNCION Fibonacci (N: ENTERO): ARREGLO [N] DE ENTEROS VARIABLES secuencia: ARREGLO [N] DE ENTEROS i: ENTERO INICIO PARA i = 0 HASTA n HACER SI i <= 1 ENTONCES secuencia [i] = 1 SINO secuencia [i] = secuencia [i-1] + secuencia [i-2] FINSI FINPARA retornar secuencia [n] FIN

Programación IV. Guía No. 12 5 Como puede observarse: Se basa en una tabla de resultados. Se tiene una sucesión de etapas. Cada etapa tiene un estado asociado. A partir de ese estado se toma una decisión la cual afectará o no al siguiente estado. Se evita hacer cálculos innecesarios (recursividad). En general, los algoritmos obtenidos mediante la aplicación de esta técnica consiguen tener complejidades (espacio y tiempo) bastante razonables, pero debemos evitar que el tratar de obtener una complejidad temporal de orden polinómico conduzca a una complejidad espacial demasiado elevada. Procedimiento Ejemplo 1. Adaptando a C# el algoritmo de la secuencia fibonacci con programación dinámica, quedaria como sigue: public static int [ ] Fibonacci (int n) { int [ ] secuencia = new int [n]; } For (int i = 0; i < n; i++) { if (i <= 1) { secuencia [ i ] = 1; //se engloban dos estados } else { secuencia [ i ] = secuencia [i-1] + secuencia [i-2]; //tercer estado } } return secuencia; Análisis de resultados Ejercicio 1. A. Realice un programa en C# para implementar la función de la secuencia Fibonacci en una interfaz gráfica de formulario (Windows Forms).

6 Programación IV. Guía No. 12 La aplicación debe tener un menú que permita seleccionar la solución: Con programación dinámica. Con función recursiva. B. Deduzca por qué su implementación con arreglos tiene un mejor desempeño que la forma recursiva. Explique, argumente. Ejercicio 2. Implementar la solución en una interfaz gráfica de formulario (Windows Forms) para el problema de El viaje más barato por río haciendo uso de programación dinámica. El problema es el siguiente: Sobre el río Lempa hay n embarcaderos. En cada uno de ellos se puede alquilar un bote que permite ir a cualquier otro embarcadero río abajo (es imposible ir río arriba). Existe una tabla de tarifas que indica el coste del viaje del embarcadero i al j para cualquier embarcadero de partida i y cualquier embarcadero de llegada j más abajo en el río (i < j). Puede suceder que un viaje de i a j sea más caro que una sucesión de viajes más cortos, en cuyo caso se tomaría un primer bote hasta un embarcadero k y un segundo bote para continuar a partir de k. No hay coste adicional por cambiar de bote. Llamaremos T [i, j] a la tarifa para ir del embarcadero i al j (directo). Estos valores se almacenarán en una matriz triangular superior de orden n, siendo n el número de embarcaderos. El problema puede resolverse mediante Programación Dinámica ya que para calcular el coste óptimo para ir del embarcadero i al j podemos hacerlo de forma recurrente, suponiendo que la primera parada la realizamos en un embarcadero intermedio k (i < k j): C (i, j) = T (i, k) + C (k, j). En esta ecuación se contempla el viaje directo, que corresponde al caso en el que k coincide con j. Esta ecuación verifica también que la solución buscada C (i, j) satisface el principio del óptimo, pues el coste C (k, j), que forma parte de la solución, ha de ser, a su vez, óptimo. Podemos plantear entonces la siguiente expresión de la solución:

Programación IV. Guía No. 12 7 Con estos datos, se pide implementar la solución utilizando programación dinámica. Investigación Complementaria Para la siguiente semana: Investigue el problema del cambio de moneda (este es implementado en cajeros automáticos), debe simularse la forma en que trabaja un ATM, cajero automático), y realice su solución con Programación Dinámica implementado con Visual C# en una interfaz gráfica de formulario (Windows Forms).

8 Programación IV. Guía No. 12 Guía 12: Programación Dinámica. Hoja de cotejo: 12 Alumno: Máquina No: Docente: GL: Fecha: EVALUACIÓN % 1-4 5-7 8-10 Nota CONOCIMIENTO Del 20 al 30% Conocimiento deficiente de los fundamentos teóricos Conocimiento y explicación incompleta de los fundamentos teóricos Conocimiento completo y explicación clara de los fundamentos teóricos APLICACIÓN DEL CONOCIMIENTO Del 40% al 60% ACTITUD Del 15% al 30% No tiene actitud proactiva. Actitud propositiva y con propuestas no aplicables al contenido de la guía. Tiene actitud proactiva y sus propuestas son concretas. TOTAL 100%