15 Jun

Fighters!

El problema original fue publicado por la revista InfORMS en Octubre de 2014. A continuación su versión en español.

Cuatro combatientes debaten entre quién de ellos es el más fuerte. La figura 1 muestra a los cuatro combatientes: Allan, Barry, Charles y Dan.
Cada luchador tiene diferentes habilidades de ataque y resistencia. Al inicio de la batalla tienen diferentes puntos de resistencia: Allan tiene 10, Barry tiene 12, Charles tiene 16 y Dan tiene 18. Además, cada luchador tiene diferentes puntos de ataque: Allan tiene 4, Barry tiene 3, Charles tiene 2 y Dan tiene 1.
La batalla tiene lugar en varias rondas, cada una consistente en un solo ataque. En cada ronda, una atacante aleatorio y un defensor aleatorio son elegidos.
Cuando el atacante ataca a un defensor, el defensor pierde puntos de resistencia en la cantidad equivalente a los puntos de ataque del contrincante. Por ejemplo, si Allan es el atacante y Barry es el defensor, Barry perdería cuatro puntos de resistencia.
Los combatientes continúan atacando y defendiendo aleatoriamente en las rondas siguientes hasta que sólo queda un luchador, quien entonces es declarado ganador. Se elimina un luchador de la batalla cuando sus puntos de vida se convierten en cero (o menos).
Pregunta: ¿Qué peleador es más probable que gane la batalla?

 

Un simple ejercicio de simulación, la respuesta se publicará en una semana.

 

Respuesta

En el link de final de página se encuentra una macro sencilla que permite simular múltiples repeticiones de un combate entre los cuatro jugadores. El código que realiza la simulación se explica a continuación: En síntesis, una vez borrado el resultado de la ronda anterior, se elige un atacante y un defensor de manera aleatoria y se hace un ataque por un valor entre 1 y el mínimo entre el número de puntos de defensa y el número de puntos de ataque. Este valor se resta al jugador de defensa y se repite el proceso hasta que solo quede un jugador con puntos. Esto se contabiliza dentro del tablero de mando al inicio del archivo. Al final, luego de al menos 1000 repeticiones, se establece el jugador que más partidas ha ganado, que bajo las configuraciones descritas arriba es Charles con una probabilidad del 32.5%.

Descarga del archivo de Excel.

18 May

Macro para transferir archivos a un sitio FTP

Recientemente tuve un caso donde luego de realizar unos cálulos automatizados en Excel, el resultado debía transferirse a un sitio FTP.  El desafío entonces es si es posible crear una manera automatizada de transferir estos archivos al sitio remoto.

Encontré varios recursos en línea y gracias a ellos desarrollé la siguiente solución

En síntesis es una macro que crea un archivo de texto con las instrucciones en sintaxis FTP, luego crea un archivo Batch que transfiere instrucciones MS-DOS siguiendo cada una de las  líneas del archivo de texto. Al finalizar, crea un archivo con extensión .out donde se confirma la transferencia.

Nótese que es necesario cambiar el código para agregar el usuario y password correcto. En ocasiones el sitio FTP no requiere password pues la conexión es anónima. Si este es el caso, simplemente remueva esas dos líneas del código.

El siguiente video muestra el programa en ejecución.

01 Apr

Nueva versión de AnyLogic 8 (cloud)

AnyLogic lanza oficialmente su versión 8 la cuál cuenta como atractivo principal que permite exportar los modelos a la nube para compartirlos pública o privadamente a usuarios seleccionados como en el caso de clientes (ver lista completa de adiciones a esta versión).

AnyLogic cloud es de acceso público, disponible en https://cloud.anylogic.com

Una vez dentro, el usuario podrá acceder a la galería de modelos públicos así como a los que el usuario tenga en su cuenta bien sea por haberlos cargado desde AnyLogic o por haber clonado modelos existentes (ver imagen)

Al elegir un modelo, el usuario puede ejecutarlo en modo virtual que es bastante rápido, o utilizando un vector que es una adaptación menos sofisticada del modelo original que permite visualizar los controles, estadísticas y en algunos casos la animación 2D. La animación 3D y objetos personalizados no están disponibles aún en esta versión.

Una ventaja importante de este mecanismo es que permite ejecutar y guardar varias configuraciones del mismo modelo (incluyendo los gráficos y estadísticas finales), de manera que los resultados se pueden comparar e incluso exportar a Excel. Además, los ficheros fuentes no están basados en Applets de Java lo que definitivamente era un inconveniente en la metodología anterior, cuando los modelos eran exportados a runthemodel y eran bloqueados por motivos de seguridad, lo que limitaba el acceso y divulgación. Finalmente, los modelos pueden ser ejecutados desde un navegador utilizando cualquier dispositivo (laptop, tableta, smartphone, etc.).

Muy interesante y necesario este salto pues esta es precisamente la tendencia de los demás simuladores y herramientas de toma de decisión, permitiendo no solo la colaboración con desarrolladores y clientes sino también la ejecución rápida de experimentos en un ambiente multi plataforma.

El siguiente video muestra varias funcionalidades de AL Cloud.

Los invito a descargar esta nueva versión en el siguiente link y a experimentar con esta nueva funcionalidad.

23 Sep

SIMULADOS: Simulación basada en agentes para enteneder mejor el pasado

simulados_poster

El siguiente video fue creado por el equipo de visualización del centro nacional de supercomputación (Barcelona supercomputing center) BSC-CNS. En él se describe cómo la simulación basada en agentes es utilizada para modelar el comportamiento de las sociedades primitivas, su relación con el entorno, el clima, la disponibilidad de alimentos, la rivalidad con otras tribus y la consecuente evolución en la zona de Gujarat (India) 10,000 años atrás.

Múltiples experimentos fueron realizados implementando además algoritmos de inteligencia artificial, lo que combinado con el paradigma de simulación permite que los agentes interactúen, aprendan y perfeccionen sus decisiones a partir de la experiencia y su visión (limitada) del entorno. Las simulaciones fueron realizadas en el supercomputador MareNostrum del BSC. Esta investigación se enmarca dentro del proyecto Simulpast, una iniciativa del programa Consolider liderada por el investigador ICREA Marco Madella.

Mayor información sobre este proyecto en el siguiente link.

Los invito a ver este excelente video:

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.

21 Aug

SimOpti: Video

En Stream Systems hemos diseñado un nuevo producto llamado SimOpti, un simulador en línea destinado a terminales de petróleo que permite analizar diversos escenarios y optimizar la configuración de tanques, rutas, oleoductos entre otros en un ambiente seguro, confiable y eficiente. El siguiente es un video tipo tablero (white board) que explica con un sencillo ejemplo el tipo de aplicaciones que se pueden resolver con este sistema.

El lanzamiento de este producto esta planeado para el 28 de septiembre de 2016.

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.

16 Aug

Cuándo usar Java Class y cuándo Agentes en AnyLogic

class vs agent

Para aquellos familizarizados con la programación, es común la utilización de clases en la manipulación de objetos. Una clase en términos generales es una plantilla de código donde se crean los objetos del programa. Los objetos son entidades personalizadas con atributos y operaciones específicas (para entender con mayor detalle el concepto de clases y objetos sugiero leer los siguientes artículos: conceptos y ejemplo sencillo ).

Un concepto similar a una clase es un agente. Los agentes son plantillas genéricas que permiten capturar atributos (parámetros, variables, colecciones, etc.), realizar calculos, gráficos, animaciones e incluso incrustar grupos de agentes adicionales. Todas estas funcionalidades son igualmente posibles en una clase Java, así que porqué utilizar una u otra figura?

Desde el punto de vista de complejidad y curva de aprendizaje, el agente es mejor opción ya que todas sus propiedades son creadas con solo arrastrar el ícono del elemento requerido. Por ejemplo, si se quiere agregar una variable, se arrastra el ícono correspondiente, se cambia el tipo de valor (doble, string, etc.) y se re-nombra. Igual con colecciones, poblaciones, estadísticas, etc. (ver animación).

agent ex

La misma operación en una clase requiere de cierto conocimiento de programación para poder definir correctamente las variables, tipo de acceso, funciones, etc. En otras palabras, todo debe hacerse mediante código (ver animación).

class ex

Una clase puede volverse confusa para un usuario si desde su diseño no ha sido bien estructurada. Una práctica recomendada por muchos usuarios es utilizar agentes de manera general, incluso convertir las clases Java en agentes (AnyLogic ofrece esa posibilidad como se observa en la imagen siguiente)

convert_class

Otro beneficio relacionado con el uso de agentes es las poblaciones. Grupos de agentes pueden ser almacenados y manipulados en poblaciones, las cuales tienen incluso funciones pre-definidas que permiten organizar, filtrar, etc. Las clases Java no pueden almacenarse igual y deben ser (si se requiere) añadidas a colecciones.

Cuando usar clases?

A pesar de ser recomendados los agentes, dado que se pueden realizar las mismas actividades existen casos en los que es mejor utilizar clases, a continuación algunos ejemplos:

  1. Almacenamiento de información: En muchos modelos se requiere almacenar información (local o global) que no requiere ser manipulada, solo creada y consultada. Un ejemplo muy común es la creación de órdenes o pedidos, o la lista de pasajeros de un vuelo, o los registros de mediciones de un evento. La clase Java Pedido puede ser la lista de ítems requeridos con cantidad. Se crea periódicamente y se envía a una gente para que aliste los productos en una bodega cuyo contenido es una lista con objetos (agentes o simplemente números).
  2. Cálculos o Elementos que requieren ser transportados entre diferentes softwares: Cuando se trabaja en equipos de desarrollo, es común que partes del mismo programa sean desarrollados por diferentes personas o equipos. Los cálculos  son generalmente desarrollados por especialistas en el mismo o diferente software y luego enviados a los modeladores para ser incorporados. Las clases son ideales para esto pues son transportables y pueden ser validadas en otros ambientes (tests funcionales y control de cambios).
  3. Limitación de agentes: Ciertas versiones de AnyLogic como la PLE tienen limitaciones en cuanto al número de agentes a utilizar y por ende si el modelo es complejo se requiere combinar clases con agentes (ver comparación de ediciones, sección tamaño del modelo).

 

Editions

13 Jul

Simio PLE

Simio PLE

El software de simulación Simio presenta su versión gratuita PLE (Personal Learning Edition) que permite crear modelos con todas las funcionalidades de la versión profesional, no obstante aplican ciertas limitaciones para guardar modelos de gran tamaño.

Al igual que otros software de simulación (ejemplo: Arena, Promodel, AnyLogic), Simio entra en la era de las versiones gratuitas como una iniciativa para popularizar el uso de la simulación en todas las disciplinas lo cuál es una noticia muy positiva para quienes trabajamos en este campo.

El software puede ser descargado en el siguiente link

30 Jun

Presentación: R como herramienta de soporte para Analytics y simulación

Recientemente tuve la oportunidad de dar una charla sobre las ventajas de utilizar R como soporte para profesionales en Analytics y Simulación.

Si bien existen diferentes software especializados para realizar análisis de datos cada uno con sus ventajas y desventajas, en los últimos años los especialistas de diversas disciplinas han coincidido en la necesidad de estandarizar procesos y análisis en un solo lenguaje, la gran mayoría han optado por R (Python es otra buena alternativa). Esta presentación pretende mostrar las ventajas del lenguaje R (y algunas aplicaciones) como herramienta de soporte a profesionales que requieren manipulación y análisis de datos, en mi caso particular como consultor en optimización y simulación.

A continuación el material de soporte de la presentación.

%d bloggers like this: