06 Jan

Pyomo y JuMP: Nuevas plataformas de modelación matemática

Leí recientemente el material de una presentación realizada en la universidad Carnegie Mellon en marzo de 2017 cuyo objetivo es comparar diferentes plataformas de modelación matemática, unas tradicionales como GAMS y AMPL, otras comerciales de gran reconocimiento como AIMMS, y finalmente nuevas librerias especializadas como Pyomo (Python) y JuMP (Julia).

La presentación en general es muy interesante. A pesar que los autores tienen cierta afinidad con Pyomo y JuMP, hacen un recorrido general por las demás herramientas con una comparación objetiva exibiendo pros y contras de cada una.

La tabla siguiente presenta una cpmparación general de ciertos atributos de cada uno de estas plataformas.

Mi única objeción es que no se consideró el cuál cuenta con una serie de librerías dedicadas a la modelización y optimización (ver link en CRAN).

Un detalle interesante de la presentación es el énfasis que se hace en Python y Julia, los cuáles al igual que R son considerados los lenguajes de programación predilectos por los scientificos de datos (Data Scientist). La popularidad que estas librerías están adquiriendo permitirán a lo usuarios en cualquier nivel hacer la obtención, transformación, análisis, optimización y reporte de todas las fuente de datos al interior de un mismo lenguaje de programación, evitando la transferencia y utilización de archivos auxiliares (como bases de datos, CSV, etc.) para migrar información entre sistemas.

Recomiendo leer la presentación, puede ser descargada en el siguiente link  http://egon.cheme.cmu.edu/ewo/docs/EWO_Seminar_03_10_2017.pdf

02 Sep

Flow Shop Scheduling

Flow Shop Scheduling

Recientemente trabajé en un proyecto con estudiantes de la universidad de Seúl (Korea) para desarrollar un simulador que pudiese implementar diferentes algoritmos de organización de la producción en un taller tipo Flow-Shop.

El modelo fue desarrollado en AnyLogic utilizando simulación a base de agentes. Los trabajos y las máquinas se representan por agentes y deben organizar la producción (secuencia de trabajos) según la metodología previamente definida. Estas metodologías pueden ser:

  • Alocación aleatoria
  • Organizado en forma ascendente por tiempo total de ciclo
  • Organizado en forma descendente por tiempo total de ciclo
  • NEH: Llamado así por sus autores Nawaz, Enscore y Ham, es tal vez el algoritmo mas eficiente par organizar talleres tipo flow shop. Parte de la organización iterativa de los trabajos comenzando por los tiempos de ciclo mayor, evaluando a cada iteración el makespan esperado y eligiendo el menor. Puede encontrar una explicación con ejemplos en el siguiente link
  • Secuenciación multi-etapa: Algoritmo propuesto por Modrák y Pandian (ver link) el cuál es una adaptación del famoso algoritmo de Johnson (1954) considerado como el mejor método de organización de 2 máquinas y n trabajos. Este algoritmo agrupa las m máquinas en dos grupos transformando el tiempo de trabajo de cada  unidad y a continuación aplica el método Johnson tradicional.

El modelo permite agregar variabilidad al tiempo de trabajo, lo que repercute en la organización original requiriendo que periódicamente los algoritmos deban ser re-ejecutados para evaluar el plan de trabajo.

Una etapa futura de este proyecto consiste en agregar múltiples máquinas por estación, almacenamientos temporales (buffers) y estratégias de re-organización que combinen las heurísticas descritas arriba con mecanismos de negociación entre los agentes de manera que las estaciones resuelvan horizontes relativamente cortos de planificación de manera autónoma.

Un video de este modelo se presenta a continuación.

16 Aug

Introducción a HeuristicLab

heuristic1

Recientemente he comenzado a trabajar con HeuristicLab (HL), un software de optimización heurística desarrollada por un grupo de colaboradores del Laboratorio de Algoritmos Heurísticos y Evolutivos (HEAL) de la Universidad de ciencias aplicadas de Viena.

HeuristicLab permite desarrollar una gran variedad de modelos, desde algoritmos de búsqueda y análisis hasta aplicaciones industriales, pasando por problemas de optimización combinatoria (VRP,  job shop, knapsack, etc.), modelos de clasificación, e incluso puede ser integrado con aplicaciones externas tales como Matlab, AnyLogic, Scilab, etc., para la generación de escenarios, el análisis de resultados y la optimización de problemas complejos.

HL comenzó en el año 2002 y ha sido desarrollado en Microsoft .NET y C#, siempre con enfoque principal en la educación e investigación.

HeuristicLab es un software gratuito (licencia GNU del Free Software Foundation) y sus librerías pueden ser distribuídas e integradas en otros programas.

HL cuenta además con una interfaz bastante sencilla que permite ejecutar los modelos de muestra, modificarlos e incluso crear nuevos algoritmos bien sea por código o utilizando la funcionalidad gráfica que permite arrastrar y conectar elementos para controlar el flujo del proceso de decisión.

Finalmente, HL puede ser utilizado para procesamiento paralelo en modelos de gran demanda computacional.

Una lista mas completa de las funcionalidades de HL puede ser consultada en el siguiente flyer.

 

Para mayor información los invito a visitar el sitio web de HeuristicLab en el siguiente link, particularmente la sección de documentación.

Así mismo, los invito a ver el siguiente video que presenta las principales funcionalidades de HeuristicLab.

Próximamente estaré publicando otros posts con aplicaciones de HeuristicLab, particularmente en integración con AnyLogic.

%d bloggers like this: