"Conocer la realidad implica construir sistemas en continua transformación que se corresponden, más o menos, a la realidad"
Introducción¶
A medida que el mundo se hace más interconectado y complejo, nuestra habilidad para comprenderlo se hace menos efectiva. Los modelos simples que solíamos utilizar ya no alcanzan para responder muchas de nuestras preguntas. Para poder entender las dinámicas de los sistemas complejos; necesitamos de nuevas herramientas. El poder de cálculo de las computadoras actuales nos permite realizar nuevos tipos de experimentos. Una de las nuevas metodologías que disponemos para analizar los sistemas complejos son los modelos basados en agentes.
Modelos basados en Agentes¶
La idea central de los modelos basados en agentes es que muchos de los fenómenos que vemos en el mundo pueden ser modelados con agentes, un ambiente, y la descripción de las interacciones entre los agentes y entre los agentes y el ambiente. Un agente es un individuo autónomo o un objeto con propiedades particulares, acciones y posibles objetivos. El ambiente es el territorio en el que los agentes interactúan. Las interacciones pueden ser de los agentes entre sí o de éstos con el ambiente y pueden llegar a ser bastante complejas e incluso pueden llegar a cambiar con el paso del tiempo. Como las interacciones están construidas en base a un intercambio de información, luego de una interacción el agente puede actualizar su estado interno o tomar distintas decisiones.
Los modelos basados en agentes constituyen una nueva generación de métodos computacionales que permiten modelar la estructura de un sistema complejo y simular su evolución dinámica a lo largo del tiempo. Constituyen un tercer modo de hacer ciencia, distinto y complementario a los dos métodos científicos clásicos: la inducción y la deducción.
Un modelo basado en agentes es un tipo particular de modelo científico que se implementa como una simulación computacional. Por lo tanto, son modelos formales que deben ser distinguidos tanto de los matemáticos (basados en ecuaciones diferenciales o de otro tipo) como de los estadísticos (orientados por variables y expresados como ecuaciones de regresión, estructurales, o de otro tipo).
Vínculo micro-macro¶
Los modelos basados en agentes abordan el vínculo micro-macro en una doble dirección. En primer lugar, permiten modelar y simular el vínculo de lo micro a lo macro, es decir, "cómo las interacciones locales y descentralizadas entre agentes autónomos y heterogéneos generan una determinada regularidad" macrosocial. Se suele utilizar el concepto de emergente para referirse a la aparición de "cualidades o propiedades de un sistema que presentan un carácter de novedad con relación a las cualidades o propiedades de los elementos considerados aisladamente". Los fenómenos emergentes son, en consecuencia, difíciles de explicar y predecir en la medida en que las cualidades nuevas a nivel macro de un sistema no pueden deducirse ni reducirse al conocimiento analítico de las partes a nivel micro.
En segundo lugar, los modelos basados en agentes contribuyen a comprender el vínculo de lo macro a lo micro, relativo al modo en que "las estructuras sociales construyen e influyen las acciones futuras y las interacciones entre los actores individuales". El interés analítico de esta fase del modelado del vínculo micro-macro se centra en comprender cómo "los individuos elaboran representaciones mentales de construcciones sociales" que influyen en su propia conducta práctica. En otros términos, la acción social (nivel micro) no puede escindirse del modo en que los individuos piensan y razonan sobre el orden social (nivel macro). Esta problemática ha sido conceptualizada bajo el nombre emergente de segundo orden, es decir, a la aptitud reflexiva de los agentes para razonar sobre las propiedades emergentes que la misma interacción social produce (emergencia de primer orden).
Pensar con modelos¶
Aprender es explorar. Organizar e interpretar datos con modelos se ha convertido en una competencia fundamental para la estrategia en los negocios, la planificación urbana, la economía, la medicina, la ingeniería y la ecología, entre muchas otras. Pero no necesariamente debemos quedarnos con un solo modelo, muchas veces la aplicación de un conjunto de modelos puede ayudarnos a dar sentido a fenómenos complejos. La idea central es que el pensamiento con múltiples modelos produce sabiduría a través de un conjunto diverso de marcos lógicos. Los distintos modelos acentúan diferentes fuerzas causales. Sus conocimientos e implicaciones se superponen y se entrelazan. Al utilizar muchos modelos como marcos, desarrollamos una comprensión más profunda de la realidad.
Algunas de las ventajas de utilizar modelos son:
Los modelos son explicativos porque señalan los mecanismos esenciales que subyacen un fenómeno. Pueden funcionar como una prueba de que los mecanismos hipotéticos son suficientes para dar cuenta de una observación. Los modelos nos proporcionan una prueba de concepto de que algo es posible.
Los modelos facilitan la experimentación. Los modelos se pueden ejecutar repetidamente para notar variaciones en su dinámica y sus resultados. Los parámetros del modelo se pueden variar para ver el efecto en su comportamiento y resultados.
Los modelos nos proporcionan analogías. Dado que los modelos son simplificaciones de la realidad, nos permiten encontrar similitudes con otras simplificaciones similares, incluso si los fenómenos modelados son aparentemente muy diferentes.
Los modelos se pueden utilizar como vehículo de comunicación y educación. Los modelos nos brindan una herramienta educativa que encapsula conocimientos que pueden no estar fácilmente disponibles en la observación del mundo real.
Mesa¶
Una de las razones por las que amo Python; es que siempre es posible encontrar alguna librería para hacer casi cualquier cosa en Ciencia con su ayuda. Obviamente, modelar modelos basados en agentes no podía ser una excepción.
Mesa es un paquete de Python de código abierto con licencia Apache 2.0 que nos permite crear rápidamente modelos basados en agentes utilizando componentes centrales incorporados (como programadores de agentes y cuadrículas espaciales) o implementaciones personalizadas; visualizarlos usando una interfaz basada en el navegador; y analizar sus resultados con las herramientas de análisis de datos Python.
El principio rector de la arquitectura de Mesa es la modularidad; hace suposiciones mínimas sobre la forma que tomará un modelo. Se divide en tres categorías principales: modelado, análisis y visualizaciones. El componente principal de modelado, nos brinda todo lo que necesitamos para construir un modelo. La clase Model para guardar los parámetros a nivel modelo; una o más clases Agent que describen a los agentes del modelo; un Scheduler que controla la activación de los agentes y maneja el tiempo y el espacio o red en la que se desarrollan las interacciones. Los componentes de análisis son el data collector utilizado para grabar los datos de cada ejecución del modelo y los batch runners para automatizar múltiples ejecuciones con distintos parámetros. Finalmente, los componentes de visualización se utilizan para mapear desde un objeto modelo a uno o más representaciones visuales a través de una interfaz de servidor con el navegador web.
Modelando el COVID19 - Modelo SIR¶
Tiempo de pasar a un ejemplo concreto, y que mejor que aprovechar la popularidad de los modelos epidemiológicos que trajo la pandemia global del COVID19. Para este ejemplo en particular vamos a utilizar el modelo SIR; el cual es uno de los más simples para captar las características típicas de los brotes epidémicos. El nombre del modelo proviene de las iniciales S (población susceptible), I (población infectada) y R (población recuperada); relaciona las variaciones de las tres poblaciones (Susceptible, Infectada y Recuperada) a través de la tasa de infección y el período infeccioso promedio.
Veamos como implementarlo para una población de 10000 individuos.
# Ejecución del modelo
# Guardar salida del modelo
today = datemethod.strftime(datetime.utcnow(), '%Y%m%dZ%H%M%S')
filename = 'COVID_output_' + today + '.csv'
output_path = '/home/raul/Documentos/'
output_file = output_path + filename
# iniciar modelo
covid = modelo_COVID()
dias=parametros["steps"]
for i in range(dias):
covid.step()
# generar salida.
output_data = covid.datacollector.get_model_vars_dataframe()
output_data
title = 'Modelo COVID'
plot1 = c_p.plot_SIR(output_data, title)
c_p.plot_severe(output_data, title)
Como vemos en este ejemplo simplificado, la infección se expande a un velocidad muy considerable; en tan solo 3 días la mayoría de la población está infectada. Podemos jugar con los parámetros, por por ejemplo con el de interacciones, para ver el efecto que puede tener reducir la circulación social en la expansión de la infección (el ya tan famoso aplanamiento de la curva en Argentina).
Los modelos basados en agentes constituyen una herramienta más del enorme arsenal que nos ofrecen las computadoras para asistirnos en el proceso de toma de decisiones. No deberíamos perder la oportunidad de explorarlos!
Saludos!
Este post fue escrito por Raúl e. López Briega utilizando Jupyter notebook. Pueden descargar este notebook o ver su version estática en nbviewer.