Programación dinámica: algoritmo, ejemplos e implementación 
Autor: Eunice Carpio Macedo
Año: 2017
Carrera: Actuaría

La programación dinámica esuna técnica que permite determinar eficientementelas decisiones que optimizan el comportamiento de un sistema que evoluciona a lo largo de una serie de etapas. Ejemplos de sistemas o procesos en múltiples etapas pueden ser encontrados en diversas actividades de la vida cotidiana: determinar la ruta a seguir para llegar más rápido a un destino, programar la política óptima para la compra de productos e inventario de almacenes, tomar la decisión de participar o no en un programa de inversión, etcétera. El inicio y desarrollo de la programación dinámica se debe aRichard Bellman alrededor de la década de los cincuenta; su trabajo aportó una herramienta eficiente para dar respuesta a una amplia clase de problemas. En años más recientes, diferentes especialistasse han dedicado a ahondar en esta teoría de programación dinámica enriqueciendo el trabajo realizado por el matemático estadounidense. En términos generalesesta técnicadivide un problema en una secuencia de subproblemasyresuelve cada uno de ellos de manera recursiva, por lo que encontrar la solución del problema originalsetraduce en resolver subproblemas más sencillos y combinar las soluciones encontradas para la construcción de la solución del problema original, esta técnica es similar a “divide y vencerás”. Lo anterior es conocido como el algoritmo de programación dinámica. El objetivo de esta tesis es estudiar y analizar el algoritmo de programación dinámica con la finalidad deresolverproblemasclásicos de programación dinámica, además de crear una herramienta computacional diseñada para la resolución de los mismos con ejemplos expuestos en el presente trabajo. Cabe señalar que esta herramienta puede servir de apoyo para los estudiantes y profesores del área deinvestigación de operacionespara el aprendizaje del algoritmo y el análisis de los problemas. Elcapítulo 1aborda el punto medular de la tesis: el algoritmo de programación dinámica. En esta partese presenta la definición de la programación dinámica, así como las características principales de los problemas que son resueltos con esta técnica. Posteriormente, se introducen los elementos básicos de un problema de programación dinámica tales como: etapas, estados, variables de decisión, costos y función de recurrencia. A lo largo de los siguientes capítulos se muestran diferentes tipos de problemas clasificados en dos grupos: determinísticos y probabilísticos. En cada uno de los apartados se describen de manera general las características de los problemas y se resuelven ejemplos que ayudarán a entender la lógica que sigue el algoritmo de programación dinámica. Primero, en el capítulo 2 se analizan y resuelven diferentes problemas determinísticos, es decir, aquellos en los que el azar no está involucrado en la evolución del sistema. Uno de los temas centrales de este capítulo es la formulación y solución de un problema de ruta más corta, esto debido a que losproblemas de programación dinámica de estados finitos pueden ser vistos como un problema de este tipo. Por otro lado, en el capítulo 3 se describen las características de problemas probabilísticos en donde el comportamiento o la evolución del sistema no es completamente predecible. De acuerdo con el objetivo de la tesis y con base en lo analizado en los primeros capítulos, se implementaron una serie de rutinas que permiten resolver diferentes problemas utilizando el algoritmo de programación dinámica;a este conjunto de rutinas se le denominó “Prográmica”. Los algoritmos fueron construidos en Microsoft Excelutilizando el lenguaje de programación Visual Basic, el cual essencillo y de fácil acceso para la mayoría de los usuarios. En el capítulo 4 se presenta la estructura de cada uno de los programas implementados, definiendo las variables y funciones utilizadas. El último capítulo es un manual cuyo propósito es facilitarla operación de la interfazcreada, de manera que el usuario pueda resolver correctamente los problemas con “Prográmica”. Además, se muestra como ejemplo la solución de los problemas mencionados en capítulos anteriores. Finalmente, en los anexos se muestran las líneas de código utilizadas en la construcción de las rutinas, así como ejemplos resueltos con “Prográmica”.