Tema: Programación Dinámica.

Documentos relacionados
Análisis de algoritmos

Tema: Algoritmos para la ruta más corta en un Grafo.

Análisis de algoritmos. Recursividad

259. El número de combinaciones de m objetos entre un conjunto de n, denotado por n, para n 1 y 0 m n, se puede definir recursivamente por: m

CAPÍTULO 6 PROGRAMACIÓN DINÁMICA. Programación Dinámica

Programación Dinámica 1

Tema: Tipos Abstractos de Datos (TAD s) en C#.

Tema 9. Recursividad

Tema: Grafos en C#. Objetivos Específicos. Materiales y Equipo. Introducción Teórica. Programación IV. Guía 7

Complejidad computacional (Análisis de Algoritmos)

La recursividad forma parte del repertorio para resolver problemas en Computación y es de los métodos más poderosos y usados.

Programación Dinámica

Tema: Análisis Léxico

Tema: Métodos de Ordenamiento. Parte 1.

4.2. El número de combinaciones de m objetos entre un conjunto de n, denotado por n, para n 1 y 0 m n, se puede definir recursivamente por: m

Tema 5- Diseño Recursivo y. Objetivos Principales. Bibliografía Básica

Introducción. Algoritmos y Complejidad. Algoritmos y Algoritmia. Introducción. Problemas e instancias. Pablo R. Fillottrani

Tema: Plantillas en C++.

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

Programación I Recursividad.

Estrategias de Diseño de Algoritmos

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

Taller de Programación Dinámica. Definiciones. Caso base. Laboratorio de Algoritmos y Estructuras de Datos III. 10 de Septiembre de 2010

Tema: Funciones, Procedimientos y Recursividad en C#.

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

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

UNIVERSIDAD AUTÓNOMA DE CHIAPAS FACULTAD DE INGENIERÍA CAMPUS I PROGRAMACIÓN DE COMPUTADORAS

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero

2.1 METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS

Análisis de algoritmos

Tema: Autómata de Pila

Tema 7: Recursividad

Esquema de Dividir y Vencer

Práctica 1. Introducción a la optimización mediante herramienta MS Excel Solver (I)

I. Complejidad de Problemas

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

Programación Dinámica

Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2

Tema 2. Divide y vencerás.

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

Programación Dinámica

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

Técnicas de diseño de algoritmos Programación dinámica

Recursión. Capítulo 4

TEMA 1: Algoritmos y programas

Estructura de datos. Carrera: IFM Participantes. Representantes de la academia de sistemas y computación de los Institutos Tecnológicos.

Tema: Punteros a Objetos. Puntero this.

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

ORGANIZACIÓN DE COMPUTADORAS DRA. LETICIA FLORES PULIDO

Problemas computacionales, intratabilidad y problemas NP completos. Febrero Facultad de Ingeniería. Universidad del Valle

UAA Sistemas Electrónicos Estructura de Datos Muñoz / Serna

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

Tema: Sobrecarga. Objetivos. Materiales y Equipo. Introducción Teórica. Programación II. Guía No. 7

Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos

Análisis y Diseño de Algoritmos

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

ESTRATEGIAS PARA LA RESOLUCIÓN DE PROBLEMAS CON MATRICES N-DIMENSIONALES

ÍNDICE INTRODUCCIÓN...13

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

Tema: Autómatas de Estado Finitos

DEPARTAMENTO DE MATEMATICAS Y FISICA Matemáticas Discreta

C A P Í T U L O 3 CONTENIDOS QUE DEBEN ENSEÑARSE DE LOS SISTEMAS DE ECUACIONES LINEALES Y MÉTODOS DE SOLUCIÓN. Neevia docconverter 5.

PRÁCTICA FUNDAMENTOS DE ALGORITMOS I. Objetivos

Programación Estructurada

Configurar DHCP en los routers, para que permitan configuración de los hosts locales conectados en su Ethernet.

UNIVERSIDAD DEL VALLE DE MÉXICO PROGRAMA DE ESTUDIO DE LICENCIATURA PRAXIS MES XXI

Tema: Estructuras de Selección en C#.

Colección de Problemas II. mín Z = 8x 1 + 9x 2 + 7x 3 s. a: x 1 + x 2 + x x 1 + 3x 2 + x x 1 + x 2 x 3 30

LIBRO GUIA: INVESTIGACIÓN DE OPERACIONES Hamdy A. Taha. Editorial Pearson Prentice Hall, 2004

Estructuras de Datos y Algoritmos

Estructura de datos. Carrera: SCC Participantes

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.

Etapa 1: El Dialogo. Etapa 2: Las Especificaciones

PROGRAMACIÓN PLAN 2008

TEMA 4: ALGORITMOS Y PROGRAMAS

Modalidad virtual. Matemática

PRÁCTICA 5: Optimización de modelos lineales (continuos

FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA. Tema 4. Técnicas de Dispersión. Definición y Manejo.

Tema: Análisis Sintáctico

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

Tema: Arreglos de objetos en C#.

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

MATEMÁTICAS APLICADAS A LAS CCSS II (2º BACHILLERATO)

Tema 3. Análisis de costes

RECORDAR TIPOS DE DATOS

ESTIMACIÓN DE TIEMPO Y COSTO DE PRODUCTOS SOFTWARE

Introducción a la programación en C eme - Escuela Universitaria de Música

Universidad Autónoma del Estado de México Facultad de Medicina

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

Tema 01: Algoritmia y diagramas de flujo. Estructuras de datos (Prof. Edgardo A. Franco)

Diseño y simulación de un algoritmo basado en lógica difusa para el despacho de ascensores en un edificio

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

Tema: Estructuras de Repetición en C# [While y Dowhile].

Escuela de Ingeniería en Informática Empresarial SYLLABUS

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

INGENIERÍA EN DESARROLLO E INNOVACIÓN EMPRESARIAL

INSTITUTO POLITECNICO NACIONAL SECRETARIA ACADEMICA DIRECCION DE ESTUDIOS PROFESIONALES EN INGENIERIA Y CIENCIAS FISICO MATEMATICAS

Proyecto de Innovación y Mejora de la Calidad Docente. Convocatoria Nº de proyecto: 126

Una Introducción a la Programación Estructurada en C

MODELIZACION 01. Universidad Nacional de La Pampa Facultad de Ciencias Económicas y Jurídicas 18 - Métodos Cuantitativos para la Administración

Transcripción:

Programación IV. Guía 11 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 11. 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 11 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:

Programación IV. Guía 11 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 11 En esta, la sucesión se puede expresarse 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 11 5 Como puede verse: 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 dinamica, 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 11 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. 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 11 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), 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 11 Guía 11: Programación Dinámica Hoja de cotejo: 11 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%