





































Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
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
1 / 45
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!






































Trabajo de Tesis presentado al Departamento de Ingenier´ıa Sistemas y Computaci´on
por
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
Aprobado por:
Rafael Garc´ıa, Asesor
Fecha de Aprobaci´on
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
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
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.
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.
Algunos de los problemas que se pueden resolver son los siguientes:
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.
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.
Como funciona esto:
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.
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
Para la metodolog´ıa usada en este proyecto, un problema de programaci´on din´amica requiere de:
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.
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