En el área de conocimiento de Investigación Operativa, la resolución de problemas de toma de decisiones, que muchas veces resulta en la aplicación de técnicas de optimización combinatoria suele llevarse a cabo, a grandes rasgos, mediante: a) modelos matemáticos o bien b) técnicas heurísticas y metaheurísticas.
En el primer caso, los modelos matemáticos se desarrollan de forma específica para cada problema a resolver. Esto implica también que cada nuevo problema requiere de un experto capaz de crear el modelo. Además, el modelo hay que mantenerlo de forma constante conforme la realidad modelada va cambiando. La ventaja de este esfuerzo es la capacidad de estas técnicas de obtener soluciones óptimas, es decir, las mejores. Como contrapartida, las técnicas exactas requieren de tiempos de cómputo que crecen de forma exponencial con el tamaño del problema y por lo general, no son capaces de resolver problemas de gran tamaño. Otra de las desventajas es la necesidad de pagar licencias del software específico para resolver los modelos. Estas licencias suelen superar los miles de euros y además se pagan por procesador o core de ejecución en casi todos los casos, lo que relaciona directamente el precio con la velocidad de resolución de problemas.
En el segundo caso, las heurísticas y metaheurísticas, tienen la clara desventaja de que no se puede saber si el resultado obtenido es el óptimo o no, ya que en general dan soluciones aproximadas. En algunos casos se pueden calcular cotas (mejores casos posible) que nos ayuden a conocer cómo de lejos está la solución obtenida de un hipotético óptimo. Por otro lado, allí donde fallan los modelos matemáticos las heurísticas y metaheurísticas brillan. Una metaheurística bien diseñada puede llegar a resolver problemas de gran tamaño en relativamente poco tiempo. Desarrollar metaheurísticas también trae aparejado ciertos costes, como la necesidad de contar con desarrolladores con conocimientos en optimización y desarrollo de algoritmos de optimización.
Uno de los problemas que nos encontramos a la hora de transferir tecnología hacia las empresas en nuestro entorno socioeconómico es el elevado coste que representa, sobre todo para las empresas pequeñas, obtener un desarrollo a medida que resuelva sus problemas relacionados con la optimización y toma de decisiones.
ITI lleva tiempo trabajando en la creación de herramientas, tanto a medida como generalistas, capaces de resolver problemas de optimización comunes, como pueden ser los problemas de rutas de vehículos (VRP) o de programación de la producción en líneas de fabricación (flowshop). El problema del VRP (Vehicle Routing Problem) consiste en encontrar la mejor ruta para uno o varios vehículos que deben pasar por ciertos puntos o paradas, saliendo y acabando en un almacén. Este tipo de problemas se pueden aplicar en cualquier empresa que deba hacer reparto, como empresas de transportes de pasajeros, paquetería, distribución de alimentos, o simplemente empresas que realicen reparto de sus productos. Mientras que los problemas de líneas de fabricación o flowshop permiten obtener un programa de producción optimizando el uso de recursos (máquinas, personal, etc.). Este tipo de problemas tienen una alta aplicabilidad en industrias productivas de todo tipo, sin importar el tipo de producto, por lo general una planta productiva casi siempre se puede modelar mediante alguna variedad de problema de tipo flowshop.
Para permitir un acceso más fluido a la tecnología en ITI nos centramos en el desarrollo de algoritmos (heurísticas y metaheurísticas) incrustados o embebidos en herramientas de software que puedan utilizar las empresas.
El tiempo y la experiencia han demostrado que existen muchas tareas no relacionadas con el desarrollo de algoritmos que deben llevarse a cabo antes y después de ejecutar un algoritmo. La lectura, ordenación, limpieza, verificación y clasificación de datos de entrada, así como la escritura de los resultados y presentación de las soluciones son dos ejemplos claros de estas actividades que, aunque no son parte de un algoritmo, requieren también un tiempo de proceso (y de desarrollo). Muchas veces, estos tiempos son incluso superiores a los del desarrollo de los algoritmos.
De esta necesidad surge la idea de desarrollar un entorno o framework capaz de realizar todas estas tareas repetitivas que son necesarias alrededor de un algoritmo, disminuyendo el tiempo de desarrollo, añadiendo además homogeneidad y reproducibilidad y evitando errores en todos los procesos necesarios que no son parte de los algoritmos.
El framework FACOP ha sido desarrollado con la idea de reaprovechar el código, no solo de lectura y escritura de datos. FACOP tiene un diseño completamente orientado a la resolución de problemas de optimización, cada pieza o componente desarrollado representa una parte de un problema de optimización.
Para ello, hemos identificado las partes de un problema de optimización que pueden desarrollarse de manera autónoma y que pueden trabajar en conjunto con el resto de componentes. La idea detrás de este diseño es que un problema de optimización se puede formar uniendo las diferentes piezas que lo componen, como pueden ser la unidad de datos de entrada, la representación de la solución, la evaluación de la solución y varios componentes más como pueden ser constructores, búsquedas locales, alteradores de soluciones, el resultado, etc.
En FACOP, cada parte de un problema de optimización está desarrollado en librerías (archivos DLL). Todas las librerías que representan una misma parte de un problema comparten una interfaz de comunicación. Por ejemplo, todos los algoritmos han heredado la interfaz IAlgorithm. Esto permite que FACOP reconozca y utilice cada componente y cada librería como si fueran piezas intercambiables. Componiendo el problema completo mediante la combinación de piezas (DLL) previamente desarrolladas. Esta generalización permite utilizar partes creadas para resolver un problema en otros problemas similares, reduciendo el tiempo y coste en el desarrollo de algoritmos a medida.
Otro paso en la dirección de tener un framework genérico y muy aplicable es hacerlo multiplataforma, para ello hemos adoptado la tecnología .Net Core, que permite la ejecución del software en las plataformas más utilizadas en la actualidad en las empresas como son Windows, Linux y Mac OS.
FACOP provee clases, interfaces, estructuras y métodos que aceleran el tiempo de desarrollo de algoritmos, la resolución de nuevos problemas de optimización y la inclusión de la capacidad de realizar optimización en software externo. Pero para trabajar con el framework aún hace falta desarrollar algunas herramientas que, si bien no forman parte FACOP en sí, son indispensables para su funcionamiento y, sobre todo, para poder utilizarlo en diferentes escenarios.
Cada componente se comunica con el resto a través de las interfaces provistas por la librería principal. También existen componentes que se encargan de la lectura de datos de entrada y exportación de resultados. FACOP se ha desarrollado pensando en sus posibilidades de adaptación a nuevos problemas, nuevas fuentes de datos y nuevos formatos de exportación. El framework provee las interfaces necesarias para ampliar su funcionalidad añadiendo librerías de lectura de datos, por ejemplo, para leer datos de un nuevo formato de base de datos proveniente del ERP de una empresa. De la misma manera su funcionalidad se puede ampliar añadiendo nuevos algoritmos, constructores o cambiando el destino de exportación.
Para desarrollar un algoritmo, también es necesario tener una herramienta que permita su ejecución y depuración, mientras que para parametrizar un algoritmo en aras de resolver un problema en particular, es necesario generar y ejecutar distintos experimentos computacionales. Aquí nos referimos a un experimento como la ejecución de un mismo algoritmo o un conjunto de algoritmos contra un conjunto de datos de entrada determinado, con la finalidad de encontrar el conjunto de parámetros o el conjunto de componentes que, combinados, dan las mejores soluciones.
Para este trabajo, hemos diseñado una herramienta tipo asistente capaz de interactuar con FACOP y reconocer los componentes, la compatibilidad entre ellos y los datos de entrada. Con esta herramienta un usuario no especializado en desarrollo o en optimización puede crear las configuraciones necesarias para experimentos masivos, lo que permite comparar algoritmos y buscar combinaciones de parámetros que mejor se adaptan a un conjunto de datos de entrada. Esto abre la puerta a una implantación de algoritmos por parte de consultores o incluso clientes finales, sin necesidad de la participación de expertos en optimización.
Mediante el proyecto ORP, financiado con fondos FEDER, ampliaremos la funcionalidad existente en FACOP. En primer lugar, desarrollaremos las herramientas necesarias para interactuar con el framework, como herramientas para probar algoritmos en desarrollo, pero también herramientas para la creación de experimentos masivos. En aras de llegar a más empresas estas herramientas estarán desarrolladas pensando en entornos web y utilizarán tecnologías multiplataforma como dockers. La adopción de estas tecnologías permitirá en un futuro llegar a la nube y ofrecer también servicios de optimización puntuales o periódicos. Así las empresas podrán acceder a la optimización sin necesidad de contar con expertos en la materia y sin tener que desarrollar software ni pagar licencias anuales para casos puntuales de optimización.
Además de esto, el proyecto ORP ampliará las capacidades de FACOP mediante el desarrollo de componentes que permitan la optimización con varios niveles de decisión, permitiendo resolver muchos problemas de optimización realistas presentes en las empresas de nuestro entorno.