Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


PROGRA MACION DINAMICA, Monografías, Ensayos de Liderazgo y Gestión de Equipo

Una «subestructura óptima» significa que se pueden usar soluciones óptimas de subproblemas para encontrar la solución óptima del problema en su conjunto. Por ejemplo, el camino más corto entre dos vértices de un grafo se puede encontrar calculando primero el camino más corto al objetivo desde todos los vértices adyacentes al de partida, y después usando estas soluciones para elegir el mejor camino de todos ellos. En general, se pueden resolver problemas con subestructuras óptimas siguiendo estos

Tipo: Monografías, Ensayos

2022/2023

Subido el 08/01/2023

adripg123
adripg123 🇪🇨

5 documentos

1 / 45

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
LIBRERIA DE PROGRAMACION DINAMICA
Trabajo de Tesis
presentado al
Departamento de Ingenier´ıa Sistemas y Computaci´on
por
Juan Francisco Redondo Fajardo
Asesor: Rafael Garc´ıa
Para optar al t´ıtulo de
Ingeniero de Sistemas y Computaci´on
Ingenier´ıa de Sistemas y Computaci´on
Universidad de Los Andes
Agosto 2006
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d

Vista previa parcial del texto

¡Descarga PROGRA MACION DINAMICA y más Monografías, Ensayos en PDF de Liderazgo y Gestión de Equipo solo en Docsity!

LIBRERIA DE PROGRAMACION DINAMICA

Trabajo de Tesis presentado al Departamento de Ingenier´ıa Sistemas y Computaci´on

por

Juan Francisco Redondo Fajardo

Asesor: Rafael Garc´ıa

Para optar al t´ıtulo de Ingeniero de Sistemas y Computaci´on

Ingenier´ıa de Sistemas y Computaci´on Universidad de Los Andes Agosto 2006

LIBRERIA DE PROGRAMACION DINAMICA

Aprobado por:

Rafael Garc´ıa, Asesor

Fecha de Aprobaci´on

Prefacio

La programaci´on din´amica es una de las metodolog´ıas implementadas para solu- cionar una gran variedad de problemas. Esta t´ecnica, si se utiliza en su forma m´as pura, ofrece algoritmos de soluci´on que, dada su naturaleza recursiva, tiene comple- jidad temporal exponencial en la mayor´ıa de los casos. La metodolog´ıa para encontrar soluciones a este tipo de problemas, propues- ta por Boh´orquez[4], muestra que definiendo estructuras de datos adicionales que almacenen las soluciones, se evita volver a realizar c´aculos correspondientes a sub- problemas, ya que las soluciones pueden ser llevados acumulativamente; tambi´en se evita realizar c´alculos innecesarios, al tratar de calcular una soluci´on a un subproble- ma, ya antes solucionado, literalmente se cambia espacio por tiempo. Cabe nombrar que esta librer´ıa busca ser una herramienta que estandarice el proceso de modelaje de problemas de programaci´on din´amica, as´ı que ingresando datos del problema en las funciones de la librer´ıa, se podr´ıa encontrar una soluci´on en un tiempo polinomial. Por esto se ve la necesidad y la viabilidad de la implementaci´on de un API, que ubica al usuario en un mundo limitado a la inserci´on de datos que son requeridos y con estos se encontrar´ıa la soluci´on al problema de programaci´on din´amica, esto se hace instanciando a la clase DynamicSolver, para luego darle los datos correspondi- entes al problema, de esta forma, la soluci´on es alcanzada sin que el usuario sepa la implementaci´on de alto nivel que utiliza memorizaci´on y divisi´on en subproblemas. La librer´ıa exige datos basados en un problema bien modelado, para satisfacer todas las funciones del API, que logren una soluci´on ´optima, de no cumplirse se llegar´ıa a soluciones incorrectas o infactibilidades de realizaci´on.

iv

Este proyecto contribuye con un proceso de aprendizaje y especializaci´on, mez- clando ´areas de investigaci´on de operaciones de ingenier´ıa industrial y de dise˜no de algoritmos de ingenier´ıa de sistemas y computaci´on. El proyecto cuenta con el lanzamiento de un API de JAVA, que cambia la forma de hallar la soluci´on a cualquier problema de programaci´on din´amica, ya que apoyados a este, simplemente se plantea, modela e ingresa los datos del problema que esta limitados por los par´ametros de los m´etodos de la librer´ıa. Para tener una lectura amena de esta tesis, a continuaci´on se explicar´a los temas que contiene cada cap´ıtulo de este documento. Inicialmente en el prefacio, se encuentra una introducci´on sobre este desarrollo, un breve ¿qu´e?, ¿para qu´e?, ¿por qu´e?, y ¿c´omo leer la tesis?; luego en el cap´ıtulo uno, est´a una introducci´on te´orica acerca de la programaci´on din´amica, que prob- lemas soluciona, la existencia de metodolog´ıas para atacar estos problemas, adem´as de varias generalidades sobre conceptos b´asicos, es decir, un diccionario simple, que para lectores con pocos conocimientos del tema, clarifica ideas b´asicas; un cap´ıtulo importante es el n´umero dos, donde el modelo y metodolog´ıa implementados se ven expl´ıcitos, adem´as muestra la estructura base para la realizaci´on del proyecto, es decir, todo el ciclo de dise˜no del API; en el cap´ıtulo tres se hace un paralelo entre la metodolog´ıa mencionada en 1.5 y el ¿c´omo se implement´o el proyecto?, explicando las estructuras de datos y la funciones que este posee, acorde con la metodolog´ıa utilizada; y por ´ultimo, en el cuarto cap´ıtulo se encuentran las conclusiones y de- sarrollos futuros de la tesis, para que esta librer´ıa abarque aun m´as problemas de programaci´on din´amica. Para finalizar la inducci´on a la lectura de este documento, se anexa un manual que explica c´omo el problema del morral es solucionado in- gresando los datos que la librer´ıa exige, este problema es uno de los ejemplos m´as famosos de la programaci´on din´amica. En los anexos existe una investigaci´on y con- clusiones sobre que variables se necesita tener para poder desarrollar un problema de programaci´on din´amica, donde la conclusi´on fu´e una validaci´on al modelo usado en la t´esis. Adicional al documento, se encuentra un disco compacto que contiene la librer´ıa y los javadoc que muestran la documentaci´on interna del proyecto.

v

Tabla de Contenido

Dedicatoria III

Prefacio IV

Reconocimientos VI

I. Introducci´on a la programaci´on din´amica 1

1.1. Definici´on................................ 1 1.2. Enfoques de la programaci´on din´amica................ 2 1.3. ¿Qu´e se puede solucionar con esta metodolog´ıa?........... 3 1.4. Marco te´orico.............................. 4 1.5. Metodolog´ıa aplicada de programaci´on din´amica........... 5

II. Modelaje y dise˜no del problema 7

2.1. Elementos b´asicos de los problemas de programaci´on din´amica... 7 2.2. Planteamiento.............................. 9 2.3. El problema del morral......................... 10 2.4. Planteamiento del morral bajo la metodolog´ıa............. 11 2.5. Dise˜no de la implementaci´on...................... 17 2.6. Requerimientos funcionales....................... 17 2.7. Requerimientos no funcionales..................... 19 2.8. Casos de uso............................... 20 2.8.1. Usuario con pocos conocimientos en modelar un problema de programaci´on din´amica................... 20 2.8.2. Usuario con altos conocimientos en modelar un problema de programaci´on din´amica..................... 20

vii

viii

  • 2.9. Diagrama de Clases
  • III. Desarrollo de la librer´ıa
    • 3.1. Generalidades del Desarrollo
    • 3.2. Componentes del Problema
    • 3.3. Estructura de datos
      • 3.3.1. Los estados
      • 3.3.2. Pregunta y etapas
    • 3.4. API para problemas de programaci´on din´amica
      • 3.4.1. Conjunto de estados
      • 3.4.2. Pregunta
      • 3.4.3. Condiciones inductivas
      • 3.4.4. Operador de la funci´on Objetivo
      • 3.4.5. Funci´on aplicada a estados sucesores
      • 3.4.6. Funci´on de valor en el caso base
      • 3.4.7. Funci´on de valor en el caso inductivo
      • 3.4.8. Memorizaci´on
      • 3.4.9. Librer´ıa JEP
  • IV. Conclusiones y futuros desarrollos
    • 4.1. Conclusiones
    • 4.2. Futuros avances
  • Ap´endice A. — Manual Operativo sobre el problema del morral
  • Ap´endice B. — Investigaci´on previa
  • Referencias

Los subproblemas se resuelven a su vez, con subproblemas que surgen de estos mismos, as´ı se van haciendo m´as sencillos de solucionar hasta llegar al caso base, donde la soluci´on es trivial Cormen[6]. Se debe notar que una mala implementaci´on de programaci´on din´amica puede incurrir en desperdicios de tiempo. Pues podr´ıa volver a calcular soluciones a sub- problemas que ya se saben de antemano. Para solucionar este detalle, y bajar la complejidad de un algoritmo de programaci´on din´amica, guardando las soluciones que ya se han calculado. Esta metodolog´ıa se conoce como memorizaci´on. A lo largo del documento se hablar´a del problema del morral, con el fin de hallar similitudes entre la teor´ıa y la pr´actica, haciendo m´as f´acil la lectura y el entendimiento de este documento. En breve, este problema, sugiere un morral que cuenta con cierta capacidad, adem´as se cuentan con objetos que se pueden meter dentro del morral, cada uno con un costo de capacidad y un valor o beneficio al cargarlo en el morral. Se pretende encontrar la combinaci´on de objetos que max- imicen la utilidad generada en conjunto entre los objetos incluidos en el morral, simplemente teniendo bajo restricci´on que estos objetos quepan.

1.2. Enfoques de la programaci´on din´amica

De arriba a abajo

El problema se empieza a dividir en subproblemas, se solucionan los que no han sido resueltos, a medida que se divide en subproblemas y se recuerdan los que han sido resueltos, combinando inducci´on y memorizaci´on^3.

De abajo a arriba

Primero se solucionan absolutamente todos los problemas que se requieran para la implementaci´on de antemano y luego, ya teniendo sus soluciones, estas son uti- lizadas para resolver a los problemas mayores. Es poco intuitivo, pero ahorra espacio y llamados a funciones.

(^3) Nota: Este fue el m´etodo utilizado para la implementaci´on de la librer´ıa, ya que es el m´as intuitivo.

1.3. ¿Qu´e se puede solucionar con esta metodolog´ıa?

Algunos de los problemas que se pueden resolver son los siguientes:

  1. Problema de c´aculo de sucesi´on Fibonacci: La forma para ser calculado es netamente inductiva, el valor de este c´alculo, es la suma de los dos ´ultimos resultados teniendo como caso base, la funci´on evaluada en cero o en uno, que genera como resultado uno.
  2. Problema de inventario: Es considerado un problema de ordenar una canti- dad de cierto tipo de items para cada N periodos, hasta encontrar los montos necesarios para suplir la demanda, ya obtenida de manera estoc´astica o de- terminista, ver Bertsekas[3]. Este problema contiene, ci, que es el inventario disponible en el periodo i-´esimo, cpi un inventario pedido en el comienzo de cada i-´esimo periodo y un di que es la demanda durante el i-´esimo periodo, dada por la distribuci´on de probabilidad. Entonces ci+1 = ci + cpi + di, de aqu´ı surgen: Un costo de oportunidad o(ci), que es una penalidad por tener exceso, el costo de hacer el pedido por unidad C(cpi) y M (cN ) el costo de mantener un inventario al final de los N periodos entonces el costo total, esta descrito.

E{M (cN ) + ∑N i=0^ − 1 C(cpi) + o(ci)}

La soluci´on encontrar el conjunto de objetos que en la etapa N , minimice mi costo.

  1. Ruta m´as corta: Se conoce como al problema de encontrar la mejor ruta entre un v´ertice y los dem´as v´ertices de un grafo conecto ver Ahuja[1]. La forma de resolver este ejemplo es segmentado, si se encuentran las rutas m´as cortas entre los puntos, y se va analizando que ocurre si se ingresa m´as puntos, luego de desarrollar todos los posibles caminos a los puntos, con ayuda de las soluciones parciales se puede generar una soluci´on definitiva.

se encuentran en la misma etapa, son objetos que caben dentro del morral sabiendo que ya hay o no, otros dentro. Programaci´on din´amica La programaci´on din´amica es una t´ecnica de soluci´on de problemas, pero cuya implementaci´on directa es ineficiente, por eso, se plantea la definici´on de estructuras de datos que almacenen c´alculos, para evitar c´alculos repetidos e innecesarios. Lit- eralmente cambiando espacio por tiempo. Si el algoritmo que se mejora es iterativo, se acelerar´ıa manejando una invariante, minimizando el uso de mucho m´as c´alculos en la implementaci´on del programa.

1.5. Metodolog´ıa aplicada de programaci´on din´amica

Como funciona esto:

  1. Se define un lenguaje para establecer formalmente el problema. Se incluye notaci´on para la funci´on f, cuyo c´aculo es un valor especifico x 0 , corresponda a la soluci´on del problema
  2. Se establece una recurrencia que defina la funci´on f en un dominio que incluya a x 0.
  3. Se estudia la recurrencia, determinando un diagrama de necesidades, para cada elemento x del dominio de f, establecer para que elementos se deber´a conocer el valor de f para poder calcular f(x)
  4. El diagrama de necesidades sugiere un invariante para un ciclo que calcule todos los valores previos necesarios para evaluar f(x 0 ). Adem´as de un orden de evaluaci´on para los elementos del dominio de f.

De esta forma se puede disminuir la complejidad temporal considerablemente, apoyando el tan conocido, dividir y conquistar. Por otra parte, ya que hay c´alculos almacenados en la estructura de datos, y existe un orden de evaluaci´on, se puede apoyar en los c´alculos ya realizados y obtener los nuevos valores, de igual forma tambi´en guardar los datos ya obtenidos para que no sean vueltos a calcular.

Al crear una librer´ıa para resolver problemas de programaci´on din´amica, se debe recurrir a la generalizaci´on de los problemas din´amicos, separando por niveles, los datos y librer´ıa; con esta separaci´on se trataron varios problemas para analizar, cuales son los datos necesarios para desarrollar problemas de esta ´ındole. Para entender un poco m´as esta t´ecnica de soluci´on se debe ver el planteamiento del problema del morral bajo la misma metodolog´ıa, ver 2.4.

esta se vuelve a realizar el mismo proceso, hasta llegar al caso trivial, que para este seria que no quepa m´as objetos i, en el morral. Con los valores obtenidos por cada etapa se empieza a armar una contribuci´on a la funci´on objetivo en este caso, metiendo en el morral la combinaci´on de objetos que maximicen el valor del conjunto de objetos.

  1. Dado el estado actual, una pol´ıtica ´optima para las etapas restantes. En el ejemplo del morral, Dado un objeto i que se desea evaluar para ingresar dentro del morral, desde ese punto en adelante es independiente de como lleg´o all´ı. Para los problemas de programaci´on din´amica en general, el conocimiento del estado actual del sistema comunica toda la informaci´on de su comportamiento previo, necesaria para determinar la pol´ıtica ´optima de all´ı en adelante. Esta propiedad se conoce como el principio de optimalidad.
  2. El procedimiento de soluci´on empieza por hallar la pol´ıtca ´optima para cada estado de la ´ultima etapa. Com´unmente, la soluci´on de este problema para la ´ultima etapa es trivial. En el caso del morral, se llega al caso trivial cuando de esa etapa no se pueden generar m´as etapas, y eso ocurre cuando no existe capacidad restante para insertar cualquier otro objeto.
  3. Se dispone de una relaci´on recursiva que identifica la pol´ıtica ´optima para cada estado en la etapa n, dada la pol´ıtica ´optima para cada estado en la etapa (n+1)

f (^) n∗ (s) = m´axxn (vs|xn + f (^) n∗− 1 (xn))

Por lo tanto, hallar la pol´ıtica ´optima cuando se parte del estado s, quiere que se encuentre el valor que maximice xn. Esta pol´ıtica consiste en usar este valor de xn, seguir la pol´ıtica ´optima cuando se parte del estado xn en la etapa (n-1). La forma precisa de la relaci´on recursiva difiere algo entre los problemas de programaci´on din ´mica. As´ı sea, variable o vector xn, la variable de decisi´on en la etapa n. Sea fn(s, xn), el valor que m´aximiza la funci´on objetivo. dado que el sistema parte del estado s en la etapa n y se selecciona xn. As´ı que

8

para el problema del morral, fn(s, xn) = vs|xn + f (^) n∗− 1 (xn), siendo f (^) n∗ (s) el valor m´aximo de fn(s, xn) sobre todos los valores posibles de xn; entonces la relaci´on recursiva siempre sera de la forma: f (^) n∗ (s) = m´ax fn(s, xn), en donde se escribir´ıa fn(s, xn), en t´erminos de s, xn, f (^) n∗ y de alguna medida de la primera etapa de la efectividad o no efectividad de xn

  1. Usando esta relaci´on recursiva, el procedimiento de soluci´on se mueve hacia atr´as, etapa por etapa, hallando la pol´ıtica ´optima, para cada estado de esa etapa, hasta que se encuentra la pol´ıtica ´optima cuando se parte de la etapa inicial, Eso se demostr´o en el problema del morral, en el que se encontr´o la pol´ıtica ´optima, para todos los estados y para todas las etapas. Para hacer an´alisis, todos los problemas de programaci´on din´amica, se puede tener una tabla que contiene s, f (^) n∗ (s) y xn, cuando se obtiene esta tabla para la etapa inicial, se resuelve el problema. Ya que se conocer´ıa el estado inicial, la decisi´on inicial especificada por x∗ 1. Entonces, a su vez se especifica el valor ´optimo de las otras variables de decisi´on mediante otras tablas, de acuerdo con el estado del sistema que resulta de la decisiones precedentes. ver Hillier[5].

2.2. Planteamiento

Para la metodolog´ıa usada en este proyecto, un problema de programaci´on din´amica requiere de:

  1. Una funci´on objetivo f que tiene un operador, el cual busca encontrar la solu- ci´on ´optima para ese problema, el resultado de esa funci´on es generado induc- tivamente, y a ese se nombra valor inductivo. En el caso del morral se busca maximizar el beneficio llenando el morral con la mayor cantidad de objetos que generen m´as valor conjunto, ver 2.3.
  2. Una pregunta P, que en realidad es la evaluaci´on de una funci´on asociada a la funci´on objetivo, a la pol´ıtica alcanzada, en alg´un estado o valor entero. Sobre el cual se desea concluir. En el caso del morral la pregunta es cual es el

P , estos objetos i tienen un costo de capacidad pi, una cantidad de objetos oi y un valor o beneficio ui, se busca llenar el morral con la cantidad objetos ´optima, es decir, (^) n ∑ i=

pioi ≤ C

cuantos objetos caben en el morral y

m´ax f(oi, ui)

, la funci´on objetivo f, depende de conjunto de elementos que se encuentran en el morral y el valor que estos en conjunto generan; en otras palabras, encontrar la combinaci´on de objetos que maximicen el beneficio dado por la funci´on objetivo. Donde la pregunta para este caso seria maximizar la funci´on objetivo, para una capacidad P ya dada.

2.4. Planteamiento del morral bajo la metodolog´ıa

En esta secci´on, se muestra el problema del morral, utilizando la t´ecnica de solu- ci´on de problemas de programaci´on din´amica dividir y vencer, tomado de Boh´orquez[4]. El problema del morral es un problema cl´asico de la investigaci´on de operaciones. Una soluci´on recurrente ingenua puede resultar demasiado onerosa. La soluci´on que se presenta, utilizando programaci´on din´amica, es eficiente y pr´actica^1.

El problema: Dados

n objetos, o 1 , ..., on

Para i = 1, ..., n, pi es el peso de oi. Naturalmente, pi > 0

Un morral, que soporta un peso m´aximo P. (^1) A pesar de ser un problema NP-completo, la soluci´on que se presenta es eficiente en la praxis, si se concede que los n´umeros involucrados no sean arbitrariamente grandes

Para i = 1, ..., n, si se carga en el morral el objeto oi , se obtiene un beneficio o utilidad ui.

Se quiere maximizar la utilidad de cargar en el morral algunos objetos.

El lenguaje ut(j,x) : Utilidad m´axima que se consigue, si los objetos que se pueden cargar se eligen entre o 1 ,...,oj , si el peso m´aximo que se puede soportar es x. ut(n,P) : Respuesta deseada.

La recurrencia

ut(j,x)= 0 , si j= = ut(j-1,x), si 1 ≤ j ≤ n, 0 ≤ x< pj = m´ax{ut(j-1,x), ut(j-1,x-pj ) + uj }, si 1 ≤ j ≤ n, 0 < x≤ pj

El diagrama de necesidades

Figura 1: Diagrama de necesidades

El algoritmo