19.3: Interacción Agente-Medio Ambiente
- Page ID
- 115930
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)
( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\id}{\mathrm{id}}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\kernel}{\mathrm{null}\,}\)
\( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\)
\( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\)
\( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)
\( \newcommand{\vectorA}[1]{\vec{#1}} % arrow\)
\( \newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow\)
\( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vectorC}[1]{\textbf{#1}} \)
\( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)
\( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)
\( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)Un componente importante que debes considerar agregar a tu ABM es la interacción entre los agentes y su entorno. El estado ambiental sigue siendo parte del estado general del sistema, pero se define sobre el espacio, y no se asocia con agentes específicos. El estado ambiental cambia dinámicamente ya sea espontáneamente o por las acciones de los agentes (o ambas). Los ejemplos discutidos hasta ahora (modelo de segregación de Schelling, DLA, Boids) no incluyeron dicho entorno, pero muchos ABM representan explícitamente entornos en los que los agentes actúan e interactúan. La importancia de la interacción agente-ambiente está bien ilustrada por el hecho de que NetLogo [13], una popular plataforma ABM, utiliza “tortugas” y “parches” por defecto, para representar a los agentes y al medio ambiente, respectivamente. Podemos hacer lo mismo en Python.
Un buen ejemplo de dicha interacción agente-ambiente está en el modelo de agregación de moho de limo de Keller-Segel que discutimos en la Sección 13.4, donde las células de moho de limo se comportan como agentes e interactúan con un ambiente hecho de moléculas de cAMP. La concentración de AMPc se define en todas partes del espacio, y cambia por su propia dinámica inherente (decaimiento natural) y por las acciones de los agentes (secreción de moléculas de AMPc por los agentes). Este modelo puede implementarse como un ABM, diseñado paso a paso de la siguiente manera:
1. Diseñar la estructura de datos para almacenar los atributos de los agentes. Si las celdas de moho de limo están representadas por agentes individuales, su concentración en el modelo original de Keller-Segel está representada por la densidad de agentes, por lo que ya no tendrán ningún atributo que no sea la posición espacial en el espacio 2-D. Por lo tanto x
e y
son los únicos atributos de los agentes en este modelo.
2. Diseñar la estructura de datos para almacenar los estados del entorno. El ambiente en este modelo es la función espacial que representa la concentración de moléculas de AMPc en cada ubicación. Podemos representar este entorno discretizando el espacio y asignando un valor a cada celda espacial discreta, tal como hicimos para simulaciones numéricas de PDEs. Podemos usar la estructura de datos de matriz
para este propósito.
Aquí hay una parte de inicialización
de muestra que configura las estructuras de datos tanto para los agentes como para el entorno. Tenga en cuenta que preparamos dos arrays, env
y nextenv
, para simular la dinámica del entorno.
3. Describir las reglas de cómo se comporta el medio ambiente por sí solo. La dinámica inherente al ambiente en este modelo es la difusión y la decadencia espontánea de la concentración de cAMP. Estos pueden modelarse utilizando la versión discreta del operador laplaciano, así como un factor de decaimiento exponencial, aplicado a los estados ambientales en todas partes del espacio en cada iteración. Esto no es diferente de lo que hicimos para las simulaciones numéricas de PDEs. Podemos implementarlos en el código de la siguiente manera:
Aquí adoptamos condiciones de límite periódicas para la simplicidad.
4. Describir las reglas de cómo los agentes interactúan con el entorno. En este modelo, los agentes interactúan con el entorno de dos maneras diferentes. Una forma es la secreción de AMPc por los agentes, que se puede implementar permitiendo que cada agente aumente la concentración de AMPc en una célula discreta donde se encuentra. Para ello, podemos agregar lo siguiente a la función de actualización:
La otra forma es la quimiotaxis, que se puede implementar de varias maneras diferentes. Por ejemplo, podemos hacer que cada agente mire una celda elegida aleatoriamente de su vecindario, y se mueva allí con una probabilidad determinada por la diferencia en la concentración de AMPc (\(∆c\)) entre la célula vecina y la celda donde actualmente se encuentra el agente. Una función sigmoidea
\[P ( \Delta c ) = \frac { e ^ { \Delta c / c _ { 0 } } } { 1 + e ^ { \Delta c / c _ { 0 } } } \label{(19.1)} \]
sería adecuado para este propósito, donde\(c_{o}\) hay un parámetro que determina qué tan sensible es esta probabilidad a\(∆c\). \(P(∆c)\)se acerca a 1 con\(∆c → ∞\), o 0 con\(∆c → −∞\). Esta parte se puede implementar en la función de actualización de la siguiente manera:
Aquí diff corresponde a\(∆c\), y usamos\(c_0 = 0.1\).
5. Describir las reglas de cómo se comportan los agentes por su cuenta. Todas las acciones que toman los agentes en este modelo son interacciones con el entorno, por lo que podemos saltarnos esta tarea de diseño.
6. Describir las reglas de cómo los agentes interactúan entre sí. En este modelo, los agentes no interactúan entre sí directamente; todas las interacciones entre ellos son indirectas, mediadas por variables ambientales (concentración de AMPc en este caso), por lo que no hay necesidad de implementar nada para la interacción directa de los agentes entre sí. La interacción indirecta agente-agente a través de señales informativas escritas en el ambiente se llama estigmergia, que es un mecanismo esencial de coordinación utilizado por muchos organismos sociales [88].
Al armar todo y agregar la función observe
para la visualización, todo el código del simulador se ve así:
Como ves, el código es cada vez más largo y más complicado que antes, lo que es una consecuencia típica cuando implementas un ABM.
La Figura 19.3.1 muestra un resultado típico de simulación. Los pequeños puntos azules representan células individuales (agentes), mientras que los tonos de escala de grises en el fondo muestran la concentración de AMPc (ambiente). Con el paso del tiempo, las zonas un poco más pobladas producen más AMPc, atrayendo más células. Finalmente, varios picos distintos de poblaciones de agentes se forman espontáneamente, reproduciendo patrones autoorganizados que son similares a los que produjo el modelo basado en PDE.
Lo único de esta versión ABM del modelo Keller-Segel, en comparación con su versión original basada en PDE, es que el resultado de la simulación se ve más “natural” —la formación de los picos poblacionales no son simultáneos, sino que aparecen gradualmente uno tras otro, y los arreglos espaciales de esos picos son no regular. Por el contrario, en la versión basada en PDE, los puntos se forman simultáneamente a intervalos regulares (ver
Fig. 13.4.3). Tal “mirada natural” de los resultados obtenidos con ABM proviene del hecho de que las ABM se basan en los comportamientos de agentes individuales discretos, que a menudo implican mucha incertidumbre realista.
Realizar simulaciones de la versión ABM del modelo Keller-Segel con k
, Dc
y f
variadas sistemáticamente. Son los efectos de esos parámetros sobre la formación de patrones similares a los de la versión PDE del mismo modelo (ver Ec. (14.3.40))?
Implementar un mecanismo adicional en el ABM anterior para evitar que los agentes se agreguen demasiado densamente en una sola ubicación, de modo que la densidad de población no exceda un límite superior predeterminado en ninguna parte del espacio. Realizar simulaciones para ver qué tipo de efecto tiene esta suposición de modelo adicional en la formación de patrones.
Recolección de basura por hormigas Esta es otra ABM interesante con una interacción agente-ambiente, que fue presentada por primera vez por Mitchel Resnick en su famoso libro “Tortugas, termitas y atascos de tráfico” [89]. Supongamos que hay muchos pequeños trozos de basura esparcidos en un espacio 2-D, donde muchas hormigas deambulan al azar. Cuando una hormiga llega a un lugar donde hay algo de basura, se comporta de acuerdo con las siguientes reglas muy simples:
1. Si la hormiga sostiene un pedazo de basura, deja caer la pieza.
2. Si la hormiga no sostiene basura, recoge un pedazo de basura.
¿Qué resultaría de estas reglas? ¿Se van a dispersar cada vez más las piezas de basura debido a estos insectos sin cerebro? Implementar un ABM de este modelo y realizar simulaciones para averiguar qué tipo de comportamiento colectivo surge.
Si implementas bien el modelo, verás que estas reglas de comportamiento muy simples permiten que las hormigas recojan y amontonen basura de forma espontánea y despejen el espacio a la larga. Este modelo nos dice cómo tal comportamiento emergente del colectivo es a veces contrario a nuestra intuición natural.