Saltar al contenido principal
LibreTexts Español

19.4: Modelos Ecológicos y Evolutivos

  • Page ID
    115923
  • \( \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}}\)

    En esta última sección de este libro de texto, discutiremos las ABM de dinámicas ecológicas y evolutivas. Tales ABMs son diferentes de los otros ejemplos discutidos hasta ahora en este capítulo respecto a un aspecto importante: Los agentes pueden nacer y morir durante una simulación. Esto significa que el número de variables de estado involucradas en un sistema puede cambiar dinámicamente las horas extras, por lo que los conceptos tradicionales de los sistemas dinámicos no se aplican fácilmente a esos sistemas. Quizás recuerdes que vimos un reto similar cuando hicimos una transición de dinámicas en redes a dinámicas de redes en el Capítulo 16. Un aumento o disminución dinámica en el número de componentes del sistema viola la suposición de que el comportamiento del sistema puede representarse como una trayectoria dentro de un espacio de fase estático. Para estudiar los comportamientos de dichos sistemas, el enfoque más general y práctico probablemente sería realizar simulaciones explícitas en computadoras.

    La simulación de una ABM con un número variable de agentes requiere cuidados especiales para simular nacimientos y muertes de agentes. Debido a que los agentes se pueden agregar o eliminar del sistema en cualquier momento durante un proceso de actualización, es un poco complicado implementar la actualización sincrónica de los agentes (aunque no es imposible). Es mucho más sencillo y directo actualizar el estado del sistema de manera asíncrona, eligiendo aleatoriamente un agente para actualizar su estado y, si es necesario, eliminarlo directamente del sistema (simulación de muerte) o agregar un nuevo agente al sistema (simulación de nacimiento). En lo que sigue, adoptaremos este esquema de actualización asincrónica para la simulación de ABMs ecológicas.

    Un ejemplo ilustrativo de ABM ecológicas es el ecosistema depredador-presa, que ya discutimos en la Sección 4.6 y en varias otras ocasiones. La idea básica de este modelo sigue siendo simple: Las presas crecen naturalmente pero son devoradas por los depredadores, mientras que los depredadores crecen si consiguen presas pero por lo demás mueren naturalmente. Cuando vamos a implementar este modelo como ABM, estas dinámicas ecológicas deben describirse a nivel de agente individual, no a nivel de población agregada. Diseñemos este ABM paso a paso, nuevamente pasando por las seis tareas de diseño.

    1. Diseñar la estructura de datos para almacenar los atributos de los agentes. El ecosistema depredador-presa obviamente está formado por dos tipos de agentes: presa y depredadores. Por lo que la información sobre el tipo de agente debe estar representada en la estructura de datos. Además, si vamos a simular sus interacciones en un espacio, también se necesita la información sobre su ubicación espacial. Tenga en cuenta que estos atributos son idénticos a los de los agentes en el modelo de segregación de Schelling, por lo que podemos usar el mismo diseño de agente, de la siguiente manera:

    Aquí, llamamos presa “conejos” y depredadores “zorros” en el código, por lo que podemos denotarlos por r y f, respectivamente (ya que tanto presa como depredadores comienzan con “pre”!). Además, utilizamos r_init y f_init para representar la población inicial de cada especie. El bucle for itera r_init + f_init veces, y en la primera iteración r_init, se generan los agentes presa, mientras que los agentes depredadores se generan para el resto.

    2. Diseñar la estructura de datos para almacenar los estados del entorno, 3. Describir las reglas de cómo se comporta el medio ambiente por sí solo, & 4. Describir las reglas de cómo los agentes interactúan con el entorno. Este ABM no implica un entorno explícitamente, por lo que podemos ignorar estas tareas de diseño.

    5. Describir las reglas de cómo se comportan los agentes por su cuenta, & 6. Describir las reglas de cómo los agentes interactúan entre sí. En este modelo, los comportamientos e interacciones inherentes de los agentes son algunos de los que se entrelazan, por lo que discutiremos juntos estas dos tareas de diseño. Se van a diseñar diferentes reglas para presas y agentes depredadores, de la siguiente manera.

    Para los agentes de presa, cada agente individual se reproduce a una cierta tasa de reproducción. En los modelos basados en ecuaciones, fue posible permitir que una población crezca exponencialmente, pero en ABM, el crecimiento exponencial significa un aumento exponencial del uso de la memoria porque cada agente toma físicamente una cierta cantidad de espacio de memoria en su computadora. Por lo tanto, necesitamos prevenir dicho crecimiento del uso de la memoria aplicando una restricción de crecimiento de tipo lógico. Mientras tanto, si un agente presa se encuentra con un agente depredador, muere con cierta probabilidad a causa de la depredación. La muerte puede implementarse simplemente como la eliminación del agente de la lista de agentes.

    Para los agentes depredadores, las reglas son algo opuestas. Si un agente depredador no puede encontrar ningún agente presa cerca, muere con cierta probabilidad por la falta de comida. Pero si puede consumir presas, también puede reproducirse a cierta tasa de reproducción.

    Finalmente, ambos tipos de agentes se difunden en el espacio por caminata aleatoria. Las tasas de difusión pueden ser diferentes entre las dos especies, así que supongamos que los depredadores pueden difundirse un poco más rápido que las presas.

    Los supuestos diseñados anteriormente pueden implementarse en conjunto en la función de actualización de la siguiente manera. Como puede ver, el código se está volviendo un poco más largo que antes, lo que refleja la mayor complejidad de las reglas de comportamiento de los agentes:
    Aquí, ag es el agente seleccionado aleatoriamente para la actualización asincrónica. El módulo de copia de Python se utiliza para crear una copia de cada agente como descendencia cuando se reproduce. Obsérvese que la restricción de crecimiento de tipo lógico se implementa para los agentes presa multiplicando la probabilidad de reproducción por\((1−x/n_r)\), donde\(x\) está la población actual de presas y\(n_r\) es la capacidad de carga. También tenga en cuenta que al principio de esta función, se comprueba si hay algún agente en la lista de agentes. Esto se debe a que existe la posibilidad de que todos los agentes se extinguen en las ABM ecológicas.

    Ahora, me gustaría sacar a colación un tema sutil que surge en las ABM con un número variable de agentes que se simulan asincrónicamente. Cuando el número de agentes era fijo y constante, la duración del tiempo transcurrido en el mundo simulado era linealmente proporcional al número de ejecuciones de la función de actualización asíncrona (por ejemplo, en el modelo de segregación de Schelling), por lo que no tuvimos que hacer nada especial para manejar el flujo del tiempo. Sin embargo, cuando el número de agentes varía, una ejecución de la función de actualización asíncrona en un agente seleccionado aleatoriamente no siempre representa la misma cantidad de tiempo transcurrido en el mundo simulado. Para entender mejor este tema, imagina dos situaciones diferentes: Simulando 10 agentes y simulando 1,000 agentes. En la situación anterior, cada agente se actualiza una vez, en promedio, cuando la función de actualización se ejecuta 10 veces. Sin embargo, en esta última situación, 10 veces de ejecución de la función significa que solo alrededor del 1% de los agentes están siendo actualizados. Pero en el mundo simulado, los agentes deben estar comportándose simultáneamente en paralelo, por lo que cada agente debe actualizarse una vez, en promedio, en una unidad de duración de tiempo simulado. Esto implica que el tiempo transcurrido por cada actualización asíncrona debe depender del tamaño de la población de agentes. ¿Cómo podemos hacer frente a esta complicación adicional de la simulación?

    Una solución rápida y sencilla a este problema es asumir que, en cada actualización asíncrona, pasa 1/\(n\) de una unidad de tiempo, donde\(n\) está el tamaño de la población de agentes al momento de la actualización. Este método puede manejar de forma natural situaciones en las que el tamaño de la población de agentes cambia rápidamente, y (casi) garantiza que cada agente se actualice una vez, en promedio, en cada unidad de tiempo de duración. Para implementar una simulación por una unidad de tiempo, podemos escribir la siguiente función “wrapper” para asegurarnos de que el tiempo en el mundo simulado transcurra en una unidad de longitud:
    Este truco se da cuenta de que el progreso del tiempo aparece constante en la simulación, incluso si el número de agentes cambia con el tiempo.

    Bien, ahora básicamente terminamos. Al armar todo y agregar la función de visualización, todo el código del simulador se ve así:

    Un resultado típico de simulación se muestra en la Figura 19.5. Los pequeños puntos azules representan individuos presa, mientras que los círculos rojos más grandes representan depredadores. Como se ve en la figura, la interacción entre presas y depredadores produce patrones espaciales muy dinámicos, que se asemejan de alguna manera a los patrones observados en el modelo CA hospedador-patógeno discutido en la Sección 11.5. La población de presas crece para formar racimos (nubes de diminutos puntos azules), pero si están infestadas por depredadores, los depredadores también crecen rápidamente para consumir a la presa, dejando atrás un espacio vacío desierto. Como resultado, el sistema en su conjunto comienza a mostrar ondas dinámicas de presa seguidas de depredadores. Es claro que las distribuciones espaciales de esas especies son altamente heterogéneas. Mientras observamos la cera y disminución periódica de estas especies, como se predice en los modelos de depredador-presa basados en la ecuación, la versión ABM genera dinámicas mucho más complejas que involucran localidad patial y estocástica. Se podría argumentar que los resultados obtenidos de esta versión ABM serían más realistas que los obtenidos a partir de modelos puramente basados en ecuaciones.

    Podemos modificar aún más el código del simulador de la ABM depredador-presa para que emita la trama de series de tiempo de las poblaciones de presas y depredadores junto a la visualización de las posiciones de los agentes. Esto se puede hacer en una revisión bastante simple: Solo necesitamos crear listas para almacenar series temporales de poblaciones de presas y depredadores, y luego revisar la función de observación para contarlas, agregar los resultados a las listas y visualizar las listas como parcelas de series de tiempo. Aquí están las funciones actualizadas de inicializar y observar:

    Un resultado típico de simulación con este código revisado se muestra en la Fig. 19.6. Se puede ver que las poblaciones de las dos especies están mostrando definitivamente dinámicas oscilatorias, sin embargo, no se parecen en nada a las regulares cíclicas predichas por modelos basados en ecuaciones (p. ej., Fig. 4.8). En cambio, hay fluctuaciones significativas y el período de las oscilaciones tampoco es regular. La extensión espacial, la discreción de los agentes individuales y la estocástica en sus comportamientos contribuyen a que los resultados de las simulaciones basadas en agentes sean más dinámicos y “realistas”.

    Ejercicio\(\PageIndex{1}\)

    En los escenarios del modelo actual, la ABM depredador-presa ocasionalmente muestra la extinción de agentes depredadores (o ambos tipos de agentes). ¿Cómo se puede hacer más robusta y sustentable la convivencia de dos especies? Desarrolla tu propia estrategia (por ejemplo, ajustar los parámetros del modelo, revisar las reglas de comportamiento de los agentes, agregar estructuras al espacio, etc.), implementarla en el código de tu simulador y probar qué tan efectiva es. Encuentra qué tipo de estrategia funciona mejor para la conservación de ambas especies.

    Ejercicio\(\PageIndex{2}\)

    Revisar la ABM depredador-presa para que también incluya un recurso alimentario distribuido espacialmente (por ejemplo, pasto) que la presa necesita consumir para su supervivencia y reproducción. Este recurso puede crecer y difundirse espontáneamente sobre el espacio, y disminuir cuando se come por la presa. Realizar simulaciones de este modelo revisado para ver cómo la introducción de esta tercera especie afecta la dinámica del ecosistema simulado.

    La adición final que haremos al modelo es introducir la evolución de los agentes. La evolución es un proceso dinámico simple pero muy poderoso mediante el cual una población de organismos puede optimizar espontáneamente sus atributos para su propia supervivencia. Consta de los siguientes tres componentes:

    Tres componentes de la evolución

    Herencia Los organismos reproducen descendencia cuyos atributos son similares a los suyos.
    Variación Existe cierta diversidad de atributos de organismos dentro de la población, que surge principalmente de la herencia imperfecta (p. ej., mutación).
    Selección Diferentes atributos provoca diferente supervivencia de los organismos (aptitud).

    Cuando todos estos tres componentes están presentes, la evolución puede ocurrir en cualquier tipo de sistema, no limitado a los biológicos sino también a los sociales, culturales e informativos. En nuestra ABM depredador-presa, la selección ya está ahí (es decir, muerte de agentes). Por lo tanto, lo que tendremos que hacer es implementar herencia y variación en el modelo. Por ejemplo, podemos dejar que las tasas de difusión de presas y depredadores evolucionen espontáneamente con el tiempo. Para hacerlos evolutivos, necesitamos representarlos como rasgos heredables. Esto se puede lograr agregando

    a la función de inicialización, y luego reemplazando

    con

    en la función de actualización. Estos cambios hacen de la magnitud del movimiento un atributo heredable de los agentes individuales. Finalmente, para introducir variación de este atributo, debemos agregarle algún pequeño número aleatorio cuando nace una descendencia. Esto se puede implementar reemplazando

    con algo como:

    Hay dos lugares en el código donde se necesita este reemplazo, uno para presa y otro para depredadores. Obsérvese que, con las mutaciones implementadas anteriormente, las tasas de difusión de los agentes m podrían llegar a ser arbitrariamente grandes o pequeñas (incluso podrían llegar a ser negativas). Esto está bien para nuestro propósito, porque m se usa en la función de actualización en forma de uniforme (-m, m) (que funciona si m es positivo o negativo). Pero en general, debe verificar cuidadosamente su código para asegurarse de que los atributos evolutivos de los agentes se mantengan dentro de límites significativos.

    Para completarlo, aquí está el código revisado para la ABM evolutiva depredador-presa (con las partes revisadas indicadas por ###):

    Puedes realizar simulaciones con este código revisado para ver cómo evolucionan las movilidades de presas y depredadores con el paso del tiempo. ¿El resultado es consistente o contrario a su predicción inicial? Espero que encuentren algunos descubrimientos interesantes.

    Ejercicio\(\PageIndex{1}\)

    Revisar la función de observación de la ABM evolutiva depredador-presa desarrollada anteriormente para que pueda ver las distribuciones de m entre presas y depredadores. Observe cómo las movilidades de los agentes evolucionan espontáneamente en una simulación. ¿Están convergiendo a ciertos valores o cambiando continuamente?

    Ejercicio\(\PageIndex{2}\)

    Realizar simulaciones sistemáticas utilizando las ABM depredador-presa originales y evolutivas para evaluar cuantitativamente si la introducción de la evolución en el modelo ha hecho que la convivencia de dos especies sea más robusta y sustentable o no.

    Ejercicio\(\PageIndex{3}\)

    Hacer que las tasas de reproducción de presas y agentes depredadores también evolucionen, además de la magnitud de sus movimientos. Realizar simulaciones para ver cómo evolucionan las tasas de reproducción con el tiempo.

    Lo creas o no, ahora estamos al final de nuestro viaje de más de 450 páginas. Gracias por explorar el mundo de los sistemas complejos conmigo. Espero que lo hayan disfrutado. No hace falta decir que esto es solo el comienzo para que te sumerjas en un territorio mucho más grande e inexplorado de la ciencia de sistemas complejos. Creo que hay toneladas de nuevas propiedades de varios sistemas complejos aún por descubrir, y sería un placer para mí que este libro de texto fuera un poco de ayuda para que ustedes hagan tales descubrimientos en los próximos años. ¡Buen viaje!


    This page titled 19.4: Modelos Ecológicos y Evolutivos is shared under a CC BY-NC-SA 3.0 license and was authored, remixed, and/or curated by Hiroki Sayama (OpenSUNY) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.