Raul E. Lopez Briega

Matemáticas, análisis de datos y python

Modelos basados en Agentes con Python

Modelos basados en Agentes con Python

"Conocer la realidad implica construir sistemas en continua transformación que se corresponden, más o menos, a la realidad"

Jean Piaget

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.

In [1]:
Ver Código
In [2]:
# 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()
In [3]:
output_data
Out[3]:
infectados recuperados susceptibles muertes R0 casos_severos
0 94 0 9906 0.0 0.000000 12
1 1357 10 8633 0.0 2.791667 229
2 6748 88 3161 3.0 2.310806 1193
3 9322 311 355 12.0 2.119270 1651
4 9288 638 53 21.0 2.105173 1629
5 8860 1088 9 43.0 2.097285 1545
6 8265 1665 3 67.0 2.097300 1409
7 7572 2337 1 90.0 2.098090 1283
8 6731 3157 1 111.0 2.098667 1126
9 5839 4029 1 131.0 2.098212 968
10 4858 4997 0 145.0 2.097477 791
11 3826 6013 0 161.0 2.097345 609
12 2901 6929 0 170.0 2.097471 453
13 2108 7713 0 179.0 2.097772 323
14 1402 8417 0 181.0 2.097577 217
15 864 8952 0 184.0 2.097814 145
16 489 9324 0 187.0 2.098052 83
17 246 9564 0 190.0 2.098052 40
18 110 9699 0 191.0 2.098052 20
19 46 9763 0 191.0 2.098052 9
20 22 9787 0 191.0 2.098052 5
In [4]:
title = 'Modelo COVID'
plot1 = c_p.plot_SIR(output_data, title)
In [5]:
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.

Este articulo fue escrito utilizando Jupyter notebook. Presionar aquí para la versión interactiva: Binder badge

Comments