Instituto Tecnológico de Costa Rica
Ingenierı́a en Computación
Curso: Investigación de Operaciones, Grupo 60
Proyecto Semestral
Estudiante: Kevin Salazar, 2021138547
Profesor: Ing. Jean Carlos Miranda
Segundo Semestre, 2024
1
Formalidades
El proyecto se basa en la creación de una aplicación web usando React, la cual permite la interacción del
usuario con algoritmos de programación dinámica. Los algoritmos incluidos son:
• Algoritmo de Floyd
• Optimización de árboles binarios de búsqueda
• Series deportivas
• Problema de la mochila en sus diferentes variantes
Este proyecto tiene como objetivo ilustrar la aplicación práctica de estos algoritmos en un entorno de
desarrollo web, proporcionando una interfaz intuitiva para su comprensión y manipulación.
Manual de usuario
El programa está diseñado para ser compatible con diferentes dispositivos capaces de mostrar páginas web.
Su diseño es intuitivo y visualmente atractivo para el usuario.
Al iniciar en la página web (ver imagen 1 en la siguiente sección), en la parte superior se observa una barra
de navegación que permite al usuario moverse entre las opciones de algoritmos de programación dinámica
seleccionados:
• Algoritmo de Floyd
• Optimización de árboles binarios de búsqueda
• Series deportivas
• Problema de la mochila en sus diferentes variantes (bounded, unbounded, 0-1)
Cada opción ofrece dos subopciones: una para la ejecución del algoritmo y otra para la generación de
archivos que el algoritmo pueda analizar. Además, en cada opción de ejecución de algoritmos se muestra una
burbuja flotante con una breve explicación del algoritmo (ver imagen 2 en la siguiente sección).
La generación de los archivos permite al usuario crear archivos de prueba personalizados, los cuales se
descargan en formato ‘.json‘ para mayor flexibilidad. Estos archivos tienen una estructura jerarquizada que
permite al programa analizar de manera rápida y eficiente la información necesaria para ejecutar cada algoritmo.
Como caracterı́stica adicional, algunos algoritmos incluyen mensajes de guı́a para el usuario (e.g., ver imágenes
9 y 12), como instrucciones sobre qué hacer en casos particulares, por ejemplo, si se deja un espacio en blanco.
2
Evidencias de funcionalidad
Figure 1: Página de inicio
Figure 2: Barra de navegación con tooltip
3
Figure 3: Inicio de algoritmo de rutas cortas
Figure 4: Ejecución del algoritmo de Floyd
Figure 5: Prueba de mapeo de rutas óptimas
4
Figure 6: Creador de archivos de prueba para rutas cortas
Figure 7: Inicio de algoritmo de mochila
Figure 8: Ejecución del algoritmo mochila
Figure 9: Creador de archivos de prueba para mochila
5
Figure 10: Página de algoritmo de resolución de ABB
Figure 11: Página de algoritmo de resolución de ABB (2)
Figure 12: Creador de archivos de prueba para ABB
6
Análisis de Resultados
A continuación se presenta un análisis de los resultados obtenidos en cada módulo implementado en la
aplicación. Se detallan los elementos alcanzados y no alcanzados, junto con observaciones adicionales.
Ítem
Rutas más cortas
Alcanzado
Sı́
Mochila
Sı́
Árboles binarios
Series deportivas
Sı́
No Alcanzado
No
Observaciones
Ejecución y visualización correctas;
se agregó funcionalidad extra para
mostrar el grafo durante la creación.
Adaptabilidad para múltiples variantes;
se agregó funcionalidad para mostrar el
problema en forma matemática según
lo visto en clase.
Ejecución según lo esperado.
No realizado por falta de tiempo.
Table 1: Análisis de resultados por módulo
References
[1] Galles, D. (s.f.). Data Structure Visualization. University of San Francisco. https://www.cs.usfca.edu/
~galles/visualization/Floyd.html
[2] Krahets [anónimo]. (s.f.). Unbounded knapsack problem. Hello-algo. https://www.hello-algo.com/en/
chapter_dynamic_programming/unbounded_knapsack_problem/
[3] Apuntes de Investigación de Operaciones. TecDigital. Instituto Tecnológico de Costa Rica.
7