Refugios artificiales y barreras para la supervivencia de serpientes en un parque urbano
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
Descripción del modelo
Este modelo simula cómo una población de serpiente sabanera (Atractus crassicaudatus) se mueve, sobrevive y muere en un parque urbano bogotano, cuando:
El pasto kikuyo (Cenchrus clandestinus) pierde la capacidad de funcionar como refugio para la especie debido a eventos de lluvia intensa o sequía.
Se incorporan refugios artificiales mediante elementos estructurales no vivos (coberturas rocosas y restos leñosos) como estrategia para la protección de la especie
Se incorporan barreras de exclusión alrededor de parches de pasto kikuyo acolchonado como otra estrategia para la protección de la especie.
Nota: El mundo representa un parque que posee un área de 3.150 m² (0,315 ha), equivalente a un parque urbano de tipo vecinal o de barrio según el Plan de Ordenamiento Territorial de Bogotá (Alcaldía Mayor de Bogotá, 2021):
¿Cómo funciona?
El modelo integra:
- Heterogeneidad del paisaje a pequeña escala
- Variación microclimática (temperatura horaria por cobertura)
- Calidad de habitat en terminos de la calidad de refugio (IR)
- Respuestas comportamentales de la espcie
- Riesgos fisiológicas (deshidratación, sobrecalentamiento, ahogamiento)
- Riesgos ambientales (exposición)
¿Cómo usarlo?
En la parte izquierda de la interfaz y de arriba abajo el usuario podra encontrar las instrucciones de uso de los controles deslizante y menus desplegables para configurar los parámetros del modelo, haciendolo en el siguiente orden:
Primero, el usuario ajustará la población de serpientes con la que desee hacer la simulación mediante el numero de serpientes, luego ajustará el escenario estocástico (lluvia intensa o sequía) y las condiciones ambientales (soleado, seminublado y nublado).
Segundo, si el usuario desea simular el escenario estocastico "lluvia intensa", con el control deslizantes "porcentaje de inundación" podra ajustar ese parametro
Tercero, el usuario ajustará si desea incorporar refugios artificiales en la simulación y de hacerlo podra seleccionar el tamaño y la distancia entre ellos
Cuarto, el usuario ajustará si desea incorporar barreras de exclusión alrededor de las coberturas de pasto acolchonado
Una vez definidos estos parámetros, se debe presionar el botón “setup” para inicializar la simulación y posteriormente “go” para ejecutarla y en el mundo podra visualizar la dinamica. Las convenciones ubicadas en la parte inferior explica el significado de los colores y elementos representados en el mundo.
Por ultimo, a la derecha, las gráficas e indicadores, presentaran los resultados de la simulación en tiempo real, incluyendo métricas como tasa de supervivencia, tasa de mortalidad y eventos de riesgo acumulado con su evolución en el tiempo.
Aspectos a tener el cuenta
El usuario notará el cambio de las coberturas de pasto (Acolchonado o Compacto) en respuesta a los eventos climáticos extremos simulados.
El usuario podrá ver como la configuración espacial de los refugios junto a la presencia de barreras influye en la supervivencia de las serpientes del parque.
Cosas para probar
El usuario podrá experimentar con diferentes configuraciones, observar el comportamiento del sistema y analizar los resultados generados por el modelo.
Extenciones del modelo
1.) Por el momento, este modelo debe considerarse una herramienta exploratoria. Los parámetros implementados se basan en el conocimiento disponible sobre Atractus crassicaudatus, incluyendo aspectos de su ecología, comportamiento y fisiología. Sin embargo, debido a vacíos de información sobre ciertas respuestas de la especie, algunos parámetros (ej, la respuesta a la deshidratción, etc.) fueron establecidas a partir de información disponible para especies con características ecológicas similares. Por esta razón, varios de los procesos representados en el modelo operan actualmente bajo supuestos y simplificaciones que deberán ser refinadas a medida que se disponga de nueva información empírica fisiológica de la especie.
2.) Esta primera versión fue diseñada como un sistema idealizado que busca evaluar la respuesta de la especie frente a configuraciones regulares de refugios artificiales y barreras de exclusión en un pastizal urbano hipotético, en el que se asume que las condiciones pueden ser controladas y se puede hacer uso de todo el espacio. Aunque este enfoque facilita la exploración de patrones generales, los paisajes urbanos reales presentan limitaciones socioambientales que podrian dificultar el uso regular del espacio para la creación de refugios. Por ello, el modelo podría evolucionar hacia una herramienta de apoyo para la toma de decisiones que permita evaluar la implementación de refugios y barreras en escenarios reales y bajo configuraciones que sean espacial y socialmente viables.
2.1.) Para lograrlo, futuras versiones podrían permitir la incorporación de rasters georeferenciados de parques y otras áreas verdes urbanas de la ciudad que integre la creación de arreglos irregulares de refugios, lo que permitiria experimentar como diferentes arreglos pueden beneficiar la supervivencia de una poblacion para un determinado caso
2.2.) Ademas dichos rasters podrian incluir mapeos topográficos, de tipo de suelo, u otros datos considerados relevantes, para permitir, por ejemplo simulaciones de inundación sobre zonas que en la realidad son potencialmente susceptibles a inundarse.
3.) En la presente versión, el sistema se encuentra simplificado a dos variables principales del ambiente: el Índice de Refugio (IR) (variable compuesta) y la variacion circadiana de la temperatura operativa de cada cobertura. En consecuencia, la supervivencia de los individuos está determinada principalmente por la interacción entre estas variables, que condicionan la capacidad de las serpientes para encontrar refugios adecuados y mantener condiciones fisiológicas favorables. Los eventos de mortalidad modelados corresponden principalmente a respuestas fisiológicas derivadas de condiciones ambientales adversas, tales como el sobrecalentamiento, la deshidratación o el ahogamiento durante eventos de inundación.
3.1.) No obstante, el modelo simplifica la mortalidad por causas bioticas al incorporar una probabilidad de mortalidad asociada a la exposición dentro de coberturas que no favorcen ocultamiento. Una probabilidad de mortalidad que aumenta con el tiempo de exposición, que a su vez es una probabilidad de que la serpiente muera por cuaquier causa ecológica biotica, sea natural como depredación por fauna nativa o antropica como la depredación por fauna feral, atropellamiento vehicular, pisoteo accidental o matanza indiscriminada.
3.1.1.) Una extensión relevante del modelo consistiría en incorporar las amenazas bioticas de manera explícita en el modelo, permitiendo que los riesgos asociados a la exposición emerjan de la interacción entre las serpientes y otros agentes del sistema (fauna feral, depredadores naturales, humanos transeuntes, humanos que realizan actividades de mantenimiento del cesped, vehiculos, etc.). Esto haría posible evaluar cómo la presencia de otras entidades explicitas con reglas de desicion propias modifican la efectividad de los refugios artificiales y las barreras de exclusión. Asimismo, permitiría diferenciar con mayor claridad las causas de mortalidad asociadas a limitaciones fisiológicas de aquellas derivadas de interacciones ecológicas bioticas, sean naturales o antropicas.
3.1.2:) La incorporación de estos procesos también facilitaría la comparación entre escenarios simplificados (como el actual del modelo) con escenarios más complejos donde múltiples factores influyen simultáneamente sobre la supervivencia. Este tipo de comparaciones permitiría evaluar en qué medida las conclusiones del modelo son robustas frente a la incorporación de nuevos procesos ecológicos y contribuiría a una comprensión más integral de la dinámica de la especie en paisajes urbanos sometidos a eventos climáticos extremos.
4.) Futuras versiones del modelo podrian implementar extenciones de amenazas ambientales abioticas, como lluvia acida etc, modelando tanto la respuesta del pasto a estos fenomenos y de los agentes (serpientes y otros que se agreguen a futuro).
5.) Futuras versiones del modelo deberían incorporar datos de ecología del movimiento y ecología sensorial para definir mecanismos de orientación y navegación mas realistas. Esto solo posible a medida que se realicen investigaciones dentro de este campo (por el momento inexistentes). Pero resultaria interesante involucrar cuestiones de percepción, ejempo hacia estimulos vibracionales del entorno.
6.) Las temperaturas operativas utilizadas para algunas coberturas fueron obtenidas a partir de la literatura disponible, mientras que otras debieron ser estimadas mediante supuestos fundamentados en información ecológica. Por tanto, se recomienda obtener mediciones empíricas de temperatura operativa para cada uno de los entornos que puede experimentar la especie dentro del parque. La incorporación de estos datos permitirá reducir la incertidumbre asociada a las simulaciones y mejorar progresivamente la capacidad del modelo para representar de manera realista la supervivencia de poblaciones urbanas de Atractus crassicaudatus frente a eventos climáticos extremos.
7.) La humedad ambiental fue representada de manera simplificada como una subvariable binaria dentro del indice de refugio debido a la limitada disponibilidad de información sobre su variación temporal para cada uno de los entornos que puede experimentar la especie dentro del parque. En particular, no se dispone actualmente de datos detallados sobre los cambios circadianos de humedad. Por esta razón, una línea de mejora importante consiste en incorporar la humedad como una variable dinámica que fluctúe temporal y espacialmente dentro del paisaje, una vez se disponga de esta información.
8.) Otra posible extensión del modelo consiste en ampliar el conjunto de estrategias de manejo evaluadas. La presente versión se centra exclusivamente en la implementación de refugios artificiales y barreras de exclusión; sin embargo, futuras versiones podrían incorporar otras medidas de conservación diseñadas para mejorar la conectividad y reducir la mortalidad de la especie en paisajes urbanos. Entre estas estrategias se encuentran los pasos de fauna subterráneos, estructuras de conectividad adaptadas a especies fosoriales y combinaciones de múltiples intervenciones aplicadas simultáneamente. Esto permitiría evaluar posibles efectos sinérgicos entre diferentes herramientas de manejo y determinar cuáles configuraciones ofrecen los mayores beneficios para la supervivencia y el movimiento de los individuos.
9.) Asimismo, debido a que el modelo fue diseñado para explorar la respuesta de la especie frente a eventos climáticos extremos en escalas temporales relativamente cortas, una línea de desarrollo futura consiste en extender las simulaciones hacia horizontes temporales más amplios. Esto permitiría incorporar procesos poblacionales y evolutivos que operan a largo plazo, tales como la conectividad funcional entre áreas verdes urbanas, el aislamiento de subpoblaciones y las posibles consecuencias sobre el flujo génico y la variabilidad genética. De esta manera, el modelo podría convertirse en una herramienta útil para evaluar no solo la supervivencia inmediata de los individuos, sino también la viabilidad de las poblaciones urbanas a través del tiempo.
10.) Futuras versiones podrían explorar escenarios ambientales estables que no estén necesariamente asociados a eventos climáticos extremos. Esto permitiría analizar cómo los individuos seleccionan refugios y utilizan el paisaje bajo condiciones ordinarias. Estos escenarios complementarían los análisis actuales al permitir estudiar procesos relacionados con la selección de hábitat, el movimiento cotidiano y la funcionalidad de las estrategias de conservación bajo condiciones ambientales más representativas de la dinámica normal de los ecosistemas urbanos.
11.) Finalmente, una extensión interesante del modelo consistiría en incorporar una representación tridimensional del paisaje. En su versión actual, el modelo opera en dos dimensiones. Si bien parte de la complejidad vertical del hábitat se encuentra representada de manera implícita mediante el Índice de Refugio (IR), el cual integra atributos estructurales relacionados con la capacidad de ocultamiento subterraneo y superficial que definen respuestas para el movimiento del agente en la presente versión. Incorporar la tridimencionalidad resultaría particularmente relevante debido a que la especie modelada es de naturaleza semifosorial (alterna entre ambientes subterráneos y superficiales según las condiciones ambientales y la disponibilidad de refugios). Por ello, futuras versiones podrían incorporar una dimensión vertical que permita representar de manera explícita el uso de diferentes profundidades del suelo, los movimientos entre estratos y las variaciones microclimáticas asociadas a estos. Esto permitiría evaluar con mayor realismo procesos relacionados con la termorregulación, la selección de refugios, la exposición a eventos climáticos extremos y la utilización del espacio. No obstante, el desarrollo de esta aproximación requerirá información empírica adicional sobre la ecología del movimiento, de la cual no se dispone hasta el momento.
Funcionalidades de Netlogo
El modelo hace uso de las funcionalidades estándar de NetLogo para la simulación basada en agentes. Se emplean turtles para representar a los individuos y patches para modelar el entorno, permitiendo la interacción entre agentes y su espacio.
Creditos y referencias
Trabajo de grado de Ecología del estudiante Julián Felipe Rengifo Martínez de la Pontificia Univesidad Javeriana, Bogotá, bajo la dirección de Liliana Patricia Saboya y coodirección de Mauricio Alexander Gonzales Mendez
Datos relevantes extraidos de:
Paternina, R. F. (2016). Estrategia de termorregulación y riesgo de extinción de Atractus crassicaudatus (Squamata: Dipsadidae) asociado al calentamiento global. Recuperado de: https://repositorio.unal.edu.co/handle/unal/58313
Paternina-Cruz, Ricardo y Capera, Victor. (2017). Atractus crassicaudatus (Duméril, Bibron y Duméril, 1854). Catálogo de Anfibios y Reptiles de Colombia, 3, 7–13.
Paternina-Cruz, R. F., y Calderón-Espinosa, M. L. (2022). Withstanding cold nights at high elevation: Thermal strategy of Atractus crassicaudatus, a nocturnal tropical snake endemic to the eastern Andes of Colombia. Revista Mexicana de Biodiversidad, 93, e933705. https://doi.org/10.22201/ib.20078706e.2022.93.3705
Comments and Questions
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1) EXTENSIONES Y VARIABLES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; extensions [csv table] patches-own [ tipo temperatura IR pasto-acolchonado-vecino? ID-refugio expuesto-lluvia? ] turtles-own [ temp-anterior IR-anterior estrategia_termica peso-serpiente tasa-perdida-agua perdida-acumulada desplazamiento velocidad hazard-ambiental tiempo-en-inundacion tiempo-en-exposicion causa-muerte vivo? ] globals [ temp-temseca-soleado temp-temseca-seminublado temp-temseca-nublado temp-temhumeda-soleado temp-temhumeda-seminublado temp-temhumeda-nublado temp-por-cobertura IR-por-cobertura ticks-por-hora duracion delta-tiempo total_original_pa total_original_pc total_original_td num_refugios_rocoso num_refugios_leñoso num_refugios_totales to-ev-riesgo-choquetermico-ac to-ev-riesgo-deshidratacion-ac to-ev-riesgo-ahogamiento-ac to-ev-riesgo-fisiologico-ac to-ev-riesgo-ambiental-ac to-eventos-riesgo-ac muertes-choquetermico muertes-deshidratacion muertes-ahogamiento muertes-causas-fisiologicas muertes-causas-ambientales total_muertes total_vivos tasa_mortalidad tasa_supervivencia ] ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 2) SETUP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to setup clear-all ;; (2.1) TAMAÑO DEL MUNDO resize-world -250 250 -140 140 ;; (2.2) IMPORTAR PNG CON COBERTURAS BASE import-pcolors "C:/Users/julia/Downloads/NetLogo_Trabajo de grado/Mundo view.png" ask patches [ if pcolor = 0 [ set tipo "limite_urbano" ] if pcolor = 63 [ set tipo "pasto_acolchonado" ] if pcolor = 65 [ set tipo "pasto_compacto" ] if pcolor = 9 [ set tipo "suelo_duro" ] if pcolor = 32 [ set tipo "tierra_desnuda" ] ] ;; GUARDAR ESTADO ORIGINAL (ANTES DE QUE SE PONGAN LOS REFUGIOS) set total_original_pa count patches with [tipo = "pasto_acolchonado"] set total_original_pc count patches with [tipo = "pasto_compacto"] set total_original_td count patches with [tipo = "tierra_desnuda"] ;; (2.3) CREAR TABLAS DE TEMPERATURA POR COBERTURA SEGÚN TEMPORADA + CONDICICIÓN CLIMÁTICA (ESCENARIO ESTOCASTICO LIGADO A TEMPORADA) ;; --------- Tablas de temperatura por temporada + condición climática ------------------ ;; --------- El ESCENARIO ESTOCASTICO= LLUVIA INTENSA está ligado a temporada húmeda entonces usará los valores de estas tablas más adelante ------------ set temp-temhumeda-soleado table:make ;;;;;;;;;; ver 2.3.1 set temp-temhumeda-seminublado table:make ;;;;;;;; ver 2.3.2 set temp-temhumeda-nublado table:make ;;;;;;;;;;;; ver 2.3.3 ;; --------- El ESCENARIO ESTOCASTICO= SEQUIA está ligado a temporada seca entonces usará los valores de estas tablas más adelante, VER 2.5 ---------------------- set temp-temseca-soleado table:make ;;;;;;;;;;;;;; ver 2.3.4 set temp-temseca-seminublado table:make ;;;;;;;;;; ver 2.3.5 set temp-temseca-nublado table:make ;;;;;;;;;;;;;; ver 2.3.6 ;; ---------- (2.3.1) Temperaturas por hora de coberturas en Temporada humeda - Condición climática= soleado, VER 2.5 ---------------------------------------- table:put temp-temhumeda-soleado "pasto_acolchonado" [13.4 13.2 13.0 12.8 12.6 12.4 12.6 13.2 14.2 15.4 16.4 18.2 20.6 20.2 19.8 20.0 18.8 17.0 15.8 15.2 14.8 14.0 13.4 13.2] table:put temp-temhumeda-soleado "pasto_compacto" [12.0 10.5 9.0 7.5 5.5 3.1 4.5 7.5 12.5 17.5 23.0 30.0 38.4 36.5 34.0 32.0 29.0 25.5 22.0 19.0 16.5 14.5 13.0 12.0] table:put temp-temhumeda-soleado "suelo_duro" [12.0 10.5 9.0 7.5 5.5 3.1 4.5 7.5 12.5 17.5 23.0 30.0 38.4 36.5 34.0 32.0 29.0 25.5 22.0 19.0 16.5 14.5 13.0 12.0] table:put temp-temhumeda-soleado "tierra_desnuda" [12.0 10.5 9.0 7.5 5.5 3.1 4.5 7.5 12.5 17.5 23.0 30.0 38.4 36.5 34.0 32.0 29.0 25.5 22.0 19.0 16.5 14.5 13.0 12.0] table:put temp-temhumeda-soleado "limite_urbano_pastovecino" [14.4 14.2 14.0 13.8 13.6 13.4 13.6 14.2 15.2 16.4 17.4 19.2 21.6 21.2 20.8 21.0 19.8 18.0 16.8 16.2 15.8 15.0 14.4 14.2] table:put temp-temhumeda-soleado "limite_urbano_sinpastovecino" [12.0 10.5 9.0 7.5 5.5 3.1 4.5 7.5 12.5 17.5 23.0 30.0 38.4 36.5 34.0 32.0 29.0 25.5 22.0 19.0 16.5 14.5 13.0 12.0] table:put temp-temhumeda-soleado "roca_a_ras_suelo_pastovecino" [14.4 14.2 14.0 13.8 13.6 13.4 13.6 14.2 15.2 16.4 17.4 19.2 21.6 21.2 20.8 21.0 19.8 18.0 16.8 16.2 15.8 15.0 14.4 14.2] table:put temp-temhumeda-soleado "roca_a_ras_suelo_sinpastovecino" [12.0 10.5 9.0 7.5 5.5 3.1 4.5 7.5 12.5 17.5 23.0 30.0 38.4 36.5 34.0 32.0 29.0 25.5 22.0 19.0 16.5 14.5 13.0 12.0] table:put temp-temhumeda-soleado "leñoso_a_ras_suelo_pastovecino" [13.9 13.7 13.5 13.3 13.1 12.9 13.1 13.7 14.7 15.9 16.9 18.7 21.1 20.7 20.3 20.5 19.3 17.5 16.3 15.7 15.3 14.5 13.9 13.7] table:put temp-temhumeda-soleado "leñoso_a_ras_suelo_sinpastovecino" [12.0 10.5 9.0 7.5 5.5 3.1 4.5 7.5 12.5 17.5 23.0 30.0 38.4 36.5 34.0 32.0 29.0 25.5 22.0 19.0 16.5 14.5 13.0 12.0] table:put temp-temhumeda-soleado "cobertura_rocosa" [14.4 14.2 14.0 13.8 13.6 13.4 13.6 14.2 15.2 16.4 17.4 19.2 21.6 21.2 20.8 21.0 19.8 18.0 16.8 16.2 15.8 15.0 14.4 14.2] table:put temp-temhumeda-soleado "restos_leñosos_gruesos" [13.9 13.7 13.5 13.3 13.1 12.9 13.1 13.7 14.7 15.9 16.9 18.7 21.1 20.7 20.3 20.5 19.3 17.5 16.3 15.7 15.3 14.5 13.9 13.7] ;; ---------- Temperaturas por hora de coberturas que solo existen en escenario estocástico= LLUVIA_INTENSA (Temporada= humeda - Condición climática= soleado) ---------- table:put temp-temhumeda-soleado "pasto_acolchonado_inundado" [13.4 13.2 13.0 12.8 12.6 12.4 12.6 13.2 14.2 15.4 16.4 18.2 20.6 20.2 19.8 20.0 18.8 17.0 15.8 15.2 14.8 14.0 13.4 13.2] table:put temp-temhumeda-soleado "pasto_compacto_inundado" [12.0 10.5 9.0 7.5 5.5 3.1 4.5 7.5 12.5 17.5 23.0 30.0 38.4 36.5 34.0 32.0 29.0 25.5 22.0 19.0 16.5 14.5 13.0 12.0] table:put temp-temhumeda-soleado "tierra_desnuda_inundada" [12.0 10.5 9.0 7.5 5.5 3.1 4.5 7.5 12.5 17.5 23.0 30.0 38.4 36.5 34.0 32.0 29.0 25.5 22.0 19.0 16.5 14.5 13.0 12.0] ;; ---------- (2.3.2) Temperaturas por hora de coberturas en Temporada humeda - Condición climática= seminublado -------------------------------------- table:put temp-temhumeda-seminublado "pasto_acolchonado" [13.6 13.4 13.2 13.0 12.8 12.8 12.8 13.0 13.6 13.8 17.0 16.4 16.6 17.0 17.2 17.6 17.0 16.0 15.4 15.2 15.0 14.8 14.2 13.8] table:put temp-temhumeda-seminublado "pasto_compacto" [15.2 14.8 14.4 14.0 13.6 13.4 13.2 13.5 14.5 16.5 19.8 19.0 19.2 19.8 20.0 20.5 19.8 18.8 17.8 17.0 16.5 16.2 15.8 15.5] table:put temp-temhumeda-seminublado "suelo_duro" [15.2 14.8 14.4 14.0 13.6 13.4 13.2 13.5 14.5 16.5 19.8 19.0 19.2 19.8 20.0 20.5 19.8 18.8 17.8 17.0 16.5 16.2 15.8 15.5] table:put temp-temhumeda-seminublado "tierra_desnuda" [15.2 14.8 14.4 14.0 13.6 13.4 13.2 13.5 14.5 16.5 19.8 19.0 19.2 19.8 20.0 20.5 19.8 18.8 17.8 17.0 16.5 16.2 15.8 15.5] table:put temp-temhumeda-seminublado "limite_urbano_pastovecino" [14.6 14.4 14.2 14.0 13.8 13.8 13.8 14.0 14.6 14.8 18.0 17.4 17.6 18.0 18.2 18.6 18.0 17.0 16.4 16.2 16.0 15.8 15.2 14.8] table:put temp-temhumeda-seminublado "limite_urbano_sinpastovecino" [15.2 14.8 14.4 14.0 13.6 13.4 13.2 13.5 14.5 16.5 19.8 19.0 19.2 19.8 20.0 20.5 19.8 18.8 17.8 17.0 16.5 16.2 15.8 15.5] table:put temp-temhumeda-seminublado "roca_a_ras_suelo_pastovecino" [14.6 14.4 14.2 14.0 13.8 13.8 13.8 14.0 14.6 14.8 18.0 17.4 17.6 18.0 18.2 18.6 18.0 17.0 16.4 16.2 16.0 15.8 15.2 14.8] table:put temp-temhumeda-seminublado "roca_a_ras_suelo_sinpastovecino" [15.2 14.8 14.4 14.0 13.6 13.4 13.2 13.5 14.5 16.5 19.8 19.0 19.2 19.8 20.0 20.5 19.8 18.8 17.8 17.0 16.5 16.2 15.8 15.5] table:put temp-temhumeda-seminublado "leñoso_a_ras_suelo_pastovecino" [14.1 13.9 13.7 13.5 13.3 13.3 13.3 13.5 14.1 14.3 17.5 16.9 17.1 17.5 17.7 18.1 17.5 16.5 15.9 15.7 15.5 15.3 14.7 14.3] table:put temp-temhumeda-seminublado "leñoso_a_ras_suelo_sinpastovecino" [15.2 14.8 14.4 14.0 13.6 13.4 13.2 13.5 14.5 16.5 19.8 19.0 19.2 19.8 20.0 20.5 19.8 18.8 17.8 17.0 16.5 16.2 15.8 15.5] table:put temp-temhumeda-seminublado "cobertura_rocosa" [14.6 14.4 14.2 14.0 13.8 13.8 13.8 14.0 14.6 14.8 18.0 17.4 17.6 18.0 18.2 18.6 18.0 17.0 16.4 16.2 16.0 15.8 15.2 14.8] table:put temp-temhumeda-seminublado "restos_leñosos_gruesos" [14.1 13.9 13.7 13.5 13.3 13.3 13.3 13.5 14.1 14.3 17.5 16.9 17.1 17.5 17.7 18.1 17.5 16.5 15.9 15.7 15.5 15.3 14.7 14.3] ;; ---------- Temperaturas por hora de coberturas que solo existen en escenario estocástico= LLUVIA_INTENSA (Temporada= humeda - Condición climática= seminublado) ---------- table:put temp-temhumeda-seminublado "pasto_acolchonado_inundado" [13.6 13.4 13.2 13.0 12.8 12.8 12.8 13.0 13.6 13.8 17.0 16.4 16.6 17.0 17.2 17.6 17.0 16.0 15.4 15.2 15.0 14.8 14.2 13.8] table:put temp-temhumeda-seminublado "pasto_compacto_inundado" [15.2 14.8 14.4 14.0 13.6 13.4 13.2 13.5 14.5 16.5 19.8 19.0 19.2 19.8 20.0 20.5 19.8 18.8 17.8 17.0 16.5 16.2 15.8 15.5] table:put temp-temhumeda-seminublado "tierra_desnuda_inundada" [15.2 14.8 14.4 14.0 13.6 13.4 13.2 13.5 14.5 16.5 19.8 19.0 19.2 19.8 20.0 20.5 19.8 18.8 17.8 17.0 16.5 16.2 15.8 15.5] ;; ---------- (2.3.1) Temperaturas por hora de coberturas en Temporada humeda - Condición climática= nublado ------------------------------------------ table:put temp-temhumeda-nublado "pasto_acolchonado" [12.8 12.7 12.6 12.5 12.4 12.2 12.3 12.8 13.2 13.8 15.0 15.2 15.6 16.2 15.8 15.6 15.4 14.2 13.6 13.4 13.2 13.0 12.8 12.6] table:put temp-temhumeda-nublado "pasto_compacto" [14.5 14.2 14.0 13.8 13.6 13.4 13.2 13.5 14.0 15.0 16.5 17.0 17.5 18.2 18.0 17.8 17.5 16.8 16.0 15.5 15.0 14.8 14.6 14.4] table:put temp-temhumeda-nublado "suelo_duro" [14.5 14.2 14.0 13.8 13.6 13.4 13.2 13.5 14.0 15.0 16.5 17.0 17.5 18.2 18.0 17.8 17.5 16.8 16.0 15.5 15.0 14.8 14.6 14.4] table:put temp-temhumeda-nublado "tierra_desnuda" [14.5 14.2 14.0 13.8 13.6 13.4 13.2 13.5 14.0 15.0 16.5 17.0 17.5 18.2 18.0 17.8 17.5 16.8 16.0 15.5 15.0 14.8 14.6 14.4] table:put temp-temhumeda-nublado "limite_urbano_pastovecino" [13.8 13.7 13.6 13.5 13.4 13.2 13.3 13.8 14.2 14.8 16.0 16.2 16.6 17.2 16.8 16.6 16.4 15.2 14.6 14.4 14.2 14.0 13.8 13.6] table:put temp-temhumeda-nublado "limite_urbano_sinpastovecino" [14.5 14.2 14.0 13.8 13.6 13.4 13.2 13.5 14.0 15.0 16.5 17.0 17.5 18.2 18.0 17.8 17.5 16.8 16.0 15.5 15.0 14.8 14.6 14.4] table:put temp-temhumeda-nublado "roca_a_ras_suelo_pastovecino" [13.8 13.7 13.6 13.5 13.4 13.2 13.3 13.8 14.2 14.8 16.0 16.2 16.6 17.2 16.8 16.6 16.4 15.2 14.6 14.4 14.2 14.0 13.8 13.6] table:put temp-temhumeda-nublado "roca_a_ras_suelo_sinpastovecino" [14.5 14.2 14.0 13.8 13.6 13.4 13.2 13.5 14.0 15.0 16.5 17.0 17.5 18.2 18.0 17.8 17.5 16.8 16.0 15.5 15.0 14.8 14.6 14.4] table:put temp-temhumeda-nublado "leñoso_a_ras_suelo_pastovecino" [13.3 13.2 13.1 13.0 12.9 12.7 12.8 13.3 13.7 14.3 15.5 15.7 16.1 16.7 16.3 16.1 15.9 14.7 14.1 13.9 13.7 13.5 13.3 13.1] table:put temp-temhumeda-nublado "leñoso_a_ras_suelo_sinpastovecino" [14.5 14.2 14.0 13.8 13.6 13.4 13.2 13.5 14.0 15.0 16.5 17.0 17.5 18.2 18.0 17.8 17.5 16.8 16.0 15.5 15.0 14.8 14.6 14.4] table:put temp-temhumeda-nublado "cobertura_rocosa" [13.8 13.7 13.6 13.5 13.4 13.2 13.3 13.8 14.2 14.8 16.0 16.2 16.6 17.2 16.8 16.6 16.4 15.2 14.6 14.4 14.2 14.0 13.8 13.6] table:put temp-temhumeda-nublado "restos_leñosos_gruesos" [13.3 13.2 13.1 13.0 12.9 12.7 12.8 13.3 13.7 14.3 15.5 15.7 16.1 16.7 16.3 16.1 15.9 14.7 14.1 13.9 13.7 13.5 13.3 13.1] ;; ---------- Temperaturas por hora de coberturas que solo existen en escenario estocástico= LLUVIA_INTENSA (Temporada= humeda - Condición climática= nublado) ---------- table:put temp-temhumeda-nublado "pasto_acolchonado_inundado" [12.8 12.7 12.6 12.5 12.4 12.2 12.3 12.8 13.2 13.8 15.0 15.2 15.6 16.2 15.8 15.6 15.4 14.2 13.6 13.4 13.2 13.0 12.8 12.6] table:put temp-temhumeda-nublado "pasto_compacto_inundado" [14.5 14.2 14.0 13.8 13.6 13.4 13.2 13.5 14.0 15.0 16.5 17.0 17.5 18.2 18.0 17.8 17.5 16.8 16.0 15.5 15.0 14.8 14.6 14.4] table:put temp-temhumeda-nublado "tierra_desnuda_inundada" [14.5 14.2 14.0 13.8 13.6 13.4 13.2 13.5 14.0 15.0 16.5 17.0 17.5 18.2 18.0 17.8 17.5 16.8 16.0 15.5 15.0 14.8 14.6 14.4] ;; ---------- (2.3.4) Temperaturas por hora de coberturas en Temporada seca - Condición climática= soleado --------------------------------------------- table:put temp-temseca-soleado "pasto_acolchonado" [14.6 14.2 13.8 13.6 13.4 13.2 13.0 12.9 13.5 14.0 15.2 15.8 16.8 17.5 18.2 18.6 19.0 18.8 18.5 17.4 16.6 16.0 15.4 15.0] table:put temp-temseca-soleado "pasto_compacto" [17.5 16.5 15.0 14.0 13.0 12.0 11.2 10.7 15.5 20.5 26.0 30.5 34.0 36.8 39.5 40.8 41.4 38.5 35.0 31.0 27.0 23.5 20.5 18.5] table:put temp-temseca-soleado "suelo_duro" [17.5 16.5 15.0 14.0 13.0 12.0 11.2 10.7 15.5 20.5 26.0 30.5 34.0 36.8 39.5 40.8 41.4 38.5 35.0 31.0 27.0 23.5 20.5 18.5] table:put temp-temseca-soleado "tierra_desnuda" [17.5 16.5 15.0 14.0 13.0 12.0 11.2 10.7 15.5 20.5 26.0 30.5 34.0 36.8 39.5 40.8 41.4 38.5 35.0 31.0 27.0 23.5 20.5 18.5] table:put temp-temseca-soleado "limite_urbano_pastovecino" [15.6 15.2 14.8 14.6 14.4 14.2 14.0 13.9 14.5 15.0 16.2 16.8 17.8 18.5 19.2 19.6 20.0 19.8 19.5 18.4 17.6 17.0 16.4 16.0] table:put temp-temseca-soleado "limite_urbano_sinpastovecino" [17.5 16.5 15.0 14.0 13.0 12.0 11.2 10.7 15.5 20.5 26.0 30.5 34.0 36.8 39.5 40.8 41.4 38.5 35.0 31.0 27.0 23.5 20.5 18.5] table:put temp-temseca-soleado "roca_a_ras_suelo_pastovecino" [15.6 15.2 14.8 14.6 14.4 14.2 14.0 13.9 14.5 15.0 16.2 16.8 17.8 18.5 19.2 19.6 20.0 19.8 19.5 18.4 17.6 17.0 16.4 16.0] table:put temp-temseca-soleado "roca_a_ras_suelo_sinpastovecino" [17.5 16.5 15.0 14.0 13.0 12.0 11.2 10.7 15.5 20.5 26.0 30.5 34.0 36.8 39.5 40.8 41.4 38.5 35.0 31.0 27.0 23.5 20.5 18.5] table:put temp-temseca-soleado "leñoso_a_ras_suelo_pastovecino" [15.1 14.7 14.3 14.1 13.9 13.7 13.5 13.4 14.0 14.5 15.7 16.3 17.3 18.0 18.7 19.1 19.5 19.3 19.0 17.9 17.1 16.5 15.9 15.5] table:put temp-temseca-soleado "leñoso_a_ras_suelo_sinpastovecino" [17.5 16.5 15.0 14.0 13.0 12.0 11.2 10.7 15.5 20.5 26.0 30.5 34.0 36.8 39.5 40.8 41.4 38.5 35.0 31.0 27.0 23.5 20.5 18.5] table:put temp-temseca-soleado "cobertura_rocosa" [15.6 15.2 14.8 14.6 14.4 14.2 14.0 13.9 14.5 15.0 16.2 16.8 17.8 18.5 19.2 19.6 20.0 19.8 19.5 18.4 17.6 17.0 16.4 16.0] table:put temp-temseca-soleado "restos_leñosos_gruesos" [15.1 14.7 14.3 14.1 13.9 13.7 13.5 13.4 14.0 14.5 15.7 16.3 17.3 18.0 18.7 19.1 19.5 19.3 19.0 17.9 17.1 16.5 15.9 15.5] ;; ---------- Temperaturas por hora de coberturas que solo existen en escenario estocástico= SEQUÍA (Temporada= seca - Condición climática= soleado) ---------- table:put temp-temseca-soleado "pasto_acolchonado_deteriorofoliar" [16.6 15.9 14.9 14.3 13.7 13.1 12.6 12.3 15.0 17.8 21.1 23.7 25.9 27.7 29.4 30.2 30.7 29.2 27.3 24.7 22.3 20.3 18.5 17.3] table:put temp-temseca-soleado "pasto_compacto_deteriorofoliar" [17.5 16.5 15.0 14.0 13.0 12.0 11.2 10.7 15.5 20.5 26.0 30.5 34.0 36.8 39.5 40.8 41.4 38.5 35.0 31.0 27.0 23.5 20.5 18.5] table:put temp-temseca-soleado "pasto_deteriorofoliar_estolonifero" [17.5 16.5 15.0 14.0 13.0 12.0 11.2 10.7 15.5 20.5 26.0 30.5 34.0 36.8 39.5 40.8 41.4 38.5 35.0 31.0 27.0 23.5 20.5 18.5] ;; ---------- (2.3.5) Temperaturas por hora de coberturas en Temporada seca - Condición climática= seminublado --------------------------------------------- table:put temp-temseca-seminublado "pasto_acolchonado" [13.1 12.8 12.7 12.6 12.5 12.4 12.5 13.2 15.2 16.6 18.2 18.2 17.6 17.4 17.4 17.2 16.8 16.2 15.2 14.6 14.2 13.9 13.7 13.5] table:put temp-temseca-seminublado "pasto_compacto" [17.0 16.2 15.4 14.8 14.2 13.8 13.6 14.0 17.2 20.5 23.8 25.0 24.0 23.5 23.5 23.0 22.0 21.0 20.0 19.0 18.0 17.2 16.8 16.5] table:put temp-temseca-seminublado "suelo_duro" [17.0 16.2 15.4 14.8 14.2 13.8 13.6 14.0 17.2 20.5 23.8 25.0 24.0 23.5 23.5 23.0 22.0 21.0 20.0 19.0 18.0 17.2 16.8 16.5] table:put temp-temseca-seminublado "tierra_desnuda" [17.0 16.2 15.4 14.8 14.2 13.8 13.6 14.0 17.2 20.5 23.8 25.0 24.0 23.5 23.5 23.0 22.0 21.0 20.0 19.0 18.0 17.2 16.8 16.5] table:put temp-temseca-seminublado "limite_urbano_pastovecino" [14.1 13.8 13.7 13.6 13.5 13.4 13.5 14.2 16.2 17.6 19.2 19.2 18.6 18.4 18.4 18.2 17.8 17.2 16.2 15.6 15.2 14.9 14.7 14.5] table:put temp-temseca-seminublado "limite_urbano_sinpastovecino" [17.0 16.2 15.4 14.8 14.2 13.8 13.6 14.0 17.2 20.5 23.8 25.0 24.0 23.5 23.5 23.0 22.0 21.0 20.0 19.0 18.0 17.2 16.8 16.5] table:put temp-temseca-seminublado "roca_a_ras_suelo_pastovecino" [14.1 13.8 13.7 13.6 13.5 13.4 13.5 14.2 16.2 17.6 19.2 19.2 18.6 18.4 18.4 18.2 17.8 17.2 16.2 15.6 15.2 14.9 14.7 14.5] table:put temp-temseca-seminublado "roca_a_ras_suelo_sinpastovecino" [17.0 16.2 15.4 14.8 14.2 13.8 13.6 14.0 17.2 20.5 23.8 25.0 24.0 23.5 23.5 23.0 22.0 21.0 20.0 19.0 18.0 17.2 16.8 16.5] table:put temp-temseca-seminublado "leñoso_a_ras_suelo_pastovecino" [13.6 13.3 13.2 13.1 13.0 12.9 13.0 13.7 15.7 17.1 18.7 18.7 18.1 17.9 17.9 17.7 17.3 16.7 15.7 15.1 14.7 14.4 14.2 14.0] table:put temp-temseca-seminublado "leñoso_a_ras_suelo_sinpastovecino" [17.0 16.2 15.4 14.8 14.2 13.8 13.6 14.0 17.2 20.5 23.8 25.0 24.0 23.5 23.5 23.0 22.0 21.0 20.0 19.0 18.0 17.2 16.8 16.5] table:put temp-temseca-seminublado "cobertura_rocosa" [14.1 13.8 13.7 13.6 13.5 13.4 13.5 14.2 16.2 17.6 19.2 19.2 18.6 18.4 18.4 18.2 17.8 17.2 16.2 15.6 15.2 14.9 14.7 14.5] table:put temp-temseca-seminublado "restos_leñosos_gruesos" [13.6 13.3 13.2 13.1 13.0 12.9 13.0 13.7 15.7 17.1 18.7 18.7 18.1 17.9 17.9 17.7 17.3 16.7 15.7 15.1 14.7 14.4 14.2 14.0] ;; ---------- Temperaturas por hora de coberturas que solo existen en escenario estocástico= SEQUÍA (Temporada= seca - Condición climática= seminublado) ---------- table:put temp-temseca-seminublado "pasto_acolchonado_deteriorofoliar" [15.6 15.0 14.6 14.2 13.9 13.6 13.6 14.1 16.7 19.1 21.5 22.1 21.3 21.0 21.0 20.6 19.9 19.1 18.1 17.3 16.6 16.1 15.8 15.5] table:put temp-temseca-seminublado "pasto_compacto_deteriorofoliar" [17.0 16.2 15.4 14.8 14.2 13.8 13.6 14.0 17.2 20.5 23.8 25.0 24.0 23.5 23.5 23.0 22.0 21.0 20.0 19.0 18.0 17.2 16.8 16.5] table:put temp-temseca-seminublado "pasto_deteriorofoliar_estolonifero" [17.0 16.2 15.4 14.8 14.2 13.8 13.6 14.0 17.2 20.5 23.8 25.0 24.0 23.5 23.5 23.0 22.0 21.0 20.0 19.0 18.0 17.2 16.8 16.5] ;; ---------- (2.3.6) Temperaturas por hora de coberturas en Temporada seca - Condición climática= nublado --------------------------------------------- table:put temp-temseca-nublado "pasto_acolchonado" [13.1 12.8 12.7 12.6 12.5 12.4 12.5 12.7 13.0 14.0 14.8 15.4 15.8 16.8 16.3 16.3 15.8 15.4 14.8 14.2 13.9 13.6 13.4 13.2] table:put temp-temseca-nublado "pasto_compacto" [16.5 16.0 15.5 15.0 14.6 14.3 14.1 14.2 15.5 17.0 18.5 19.2 19.8 20.5 20.0 19.8 19.2 18.5 17.8 17.0 16.5 16.0 15.5 15.0] table:put temp-temseca-nublado "suelo_duro" [16.5 16.0 15.5 15.0 14.6 14.3 14.1 14.2 15.5 17.0 18.5 19.2 19.8 20.5 20.0 19.8 19.2 18.5 17.8 17.0 16.5 16.0 15.5 15.0] table:put temp-temseca-nublado "tierra_desnuda" [16.5 16.0 15.5 15.0 14.6 14.3 14.1 14.2 15.5 17.0 18.5 19.2 19.8 20.5 20.0 19.8 19.2 18.5 17.8 17.0 16.5 16.0 15.5 15.0] table:put temp-temseca-nublado "limite_urbano_pastovecino" [14.1 13.8 13.7 13.6 13.5 13.4 13.5 13.7 14.0 15.0 15.8 16.4 16.8 17.8 17.3 17.3 16.8 16.4 15.8 15.2 14.9 14.6 14.4 14.2] table:put temp-temseca-nublado "limite_urbano_sinpastovecino" [16.5 16.0 15.5 15.0 14.6 14.3 14.1 14.2 15.5 17.0 18.5 19.2 19.8 20.5 20.0 19.8 19.2 18.5 17.8 17.0 16.5 16.0 15.5 15.0] table:put temp-temseca-nublado "roca_a_ras_suelo_pastovecino" [14.1 13.8 13.7 13.6 13.5 13.4 13.5 13.7 14.0 15.0 15.8 16.4 16.8 17.8 17.3 17.3 16.8 16.4 15.8 15.2 14.9 14.6 14.4 14.2] table:put temp-temseca-nublado "roca_a_ras_suelo_sinpastovecino" [16.5 16.0 15.5 15.0 14.6 14.3 14.1 14.2 15.5 17.0 18.5 19.2 19.8 20.5 20.0 19.8 19.2 18.5 17.8 17.0 16.5 16.0 15.5 15.0] table:put temp-temseca-nublado "leñoso_a_ras_suelo_pastovecino" [13.6 13.3 13.2 13.1 13.0 12.9 13.0 13.2 13.5 14.5 15.3 15.9 16.3 17.3 16.8 16.8 16.3 15.9 15.3 14.7 14.4 14.1 13.9 13.7] table:put temp-temseca-nublado "leñoso_a_ras_suelo_sinpastovecino" [16.5 16.0 15.5 15.0 14.6 14.3 14.1 14.2 15.5 17.0 18.5 19.2 19.8 20.5 20.0 19.8 19.2 18.5 17.8 17.0 16.5 16.0 15.5 15.0] table:put temp-temseca-nublado "cobertura_rocosa" [14.1 13.8 13.7 13.6 13.5 13.4 13.5 13.7 14.0 15.0 15.8 16.4 16.8 17.8 17.3 17.3 16.8 16.4 15.8 15.2 14.9 14.6 14.4 14.2] table:put temp-temseca-nublado "restos_leñosos_gruesos" [13.6 13.3 13.2 13.1 13.0 12.9 13.0 13.2 13.5 14.5 15.3 15.9 16.3 17.3 16.8 16.8 16.3 15.9 15.3 14.7 14.4 14.1 13.9 13.7] ;; ---------- Temperaturas por hora de coberturas que solo existen en escenario estocástico= SEQUÍA (Temporada= seca - Condición climática= nublado) ---------- table:put temp-temseca-nublado "pasto_acolchonado_deteriorofoliar" [15.3 14.9 14.6 14.3 14.1 13.9 13.8 14.0 14.8 16.0 17.2 17.8 18.3 19.2 18.7 18.6 18.0 17.5 16.8 16.1 15.7 15.3 15.0 14.6] table:put temp-temseca-nublado "pasto_compacto_deteriorofoliar" [16.5 16.0 15.5 15.0 14.6 14.3 14.1 14.2 15.5 17.0 18.5 19.2 19.8 20.5 20.0 19.8 19.2 18.5 17.8 17.0 16.5 16.0 15.5 15.0] table:put temp-temseca-nublado "pasto_deteriorofoliar_estolonifero" [16.5 16.0 15.5 15.0 14.6 14.3 14.1 14.2 15.5 17.0 18.5 19.2 19.8 20.5 20.0 19.8 19.2 18.5 17.8 17.0 16.5 16.0 15.5 15.0] ;; (2.4) CREAR TABLA DE IR POR COBERTURA set IR-por-cobertura table:make ;; ---------- IR de coberturas base --------------------------------------------------------------- table:put IR-por-cobertura "pasto_acolchonado" 5 table:put IR-por-cobertura "pasto_compacto" 3 table:put IR-por-cobertura "suelo_duro" 3 table:put IR-por-cobertura "tierra_desnuda" 3 table:put IR-por-cobertura "limite_urbano" 0 ;; ---------- IR de coberturas de barreras intencionales ----------------------------------------- table:put IR-por-cobertura "roca_a_ras_suelo" 0 table:put IR-por-cobertura "leñoso_a_ras_suelo" 0 ;; ---------- IR de coberturas de refugios intencionales ------------------------------------------ table:put IR-por-cobertura "cobertura_rocosa" 6 table:put IR-por-cobertura "restos_leñosos_gruesos" 6 ;; ---------- IR de coberturas que solo existen en escenario estocástico= SEQUÍA ------------------ table:put IR-por-cobertura "pasto_acolchonado_deteriorofoliar" 4 table:put IR-por-cobertura "pasto_compacto_deteriorofoliar" 3 table:put IR-por-cobertura "pasto_deteriorofoliar_estolonifero" 3 ;; ---------- IR de coberturas que solo existen en escenario estocástico= LLUVIA INTENSA ---------- table:put IR-por-cobertura "pasto_acolchonado_inundado" 2 table:put IR-por-cobertura "pasto_compacto_inundado" 1 table:put IR-por-cobertura "tierra_desnuda_inundada" 1 ask patches [ update-IR ] ;; (2.5) CONFIGURACIÓN DEL ESCENARIO ESTOCÁSTICO ;; Este bloque selecciona: ;; - la tabla de temperatura a usar ;; - la resolución temporal del modelo (ticks por hora) ;; - la duración total de la simulación ;; ;; AJUSTE IMPORTANTE: ;; Se usan ifelse anidados para garantizar que SOLO una tabla de temperatura sea seleccionada según la combinación: (escenario_estocastico + condicion_climatica) if escenario_estocastico = "sequia" [ ;; Selección de tabla según condición climática (TEMPORADA SECA) ifelse condicion_climatica = "soleado" [ ;; Temporada seca - condición climática = soleado set temp-por-cobertura temp-temseca-soleado ] [ ifelse condicion_climatica = "seminublado" [ ;; Temporada seca - condición climática = seminublado set temp-por-cobertura temp-temseca-seminublado ] [ if condicion_climatica = "nublado" [ ;; Temporada seca - condición climática = nublado set temp-por-cobertura temp-temseca-nublado ] ] ] ;; 1 tick = 1 hora (baja resolución temporal) set ticks-por-hora 1 ;; Duración total: 120 días (en horas) set duracion 120 * 24 ;; para que la velocidad del agente en cm/min se ajuste a la resolucion temporal set delta-tiempo 60 ;; 1 tick es igual a 60 minutos ] if escenario_estocastico = "lluvia_intensa" [ ;; Selección de tabla según condición climática (TEMPORADA HÚMEDA) ifelse condicion_climatica = "soleado" [ ;; Temporada húmeda - condición climática = soleado set temp-por-cobertura temp-temhumeda-soleado ] [ ifelse condicion_climatica = "seminublado" [ ;; Temporada húmeda - condición climática = seminublado set temp-por-cobertura temp-temhumeda-seminublado ] [ if condicion_climatica = "nublado" [ ;; Temporada húmeda - condición climática = nublado set temp-por-cobertura temp-temhumeda-nublado ] ] ] ;; 60 ticks = 1 hora (alta resolución temporal) set ticks-por-hora 60 ;; los ticks actuaran como minutos" ;; Duración total: 24 horas (evento corto e intensivo) set duracion 24 * 60 ;; para que la velocidad del agente en cm/min se ajuste a la resolucion temporal set delta-tiempo 1 ;; 1 tick es igual a 1 minuto ] ask patches [ actualizar-exposicion-lluvia ] ;; crear barreras intencionales crear-barreras-exclusion ;; crear refugios crear-refugios-artificiales ;; crear agentes create-turtles numero-serpientes [ set shape "arrow" set color black set size 1.2 set peso-serpiente 29 ;; g ;; 29.000 mg set tasa-perdida-agua 0.53 ;; mg H2O / g / h set perdida-acumulada 0 set tiempo-en-inundacion 0 set tiempo-en-exposicion 0 set hazard-ambiental 0 set causa-muerte "" set vivo? true ;; estrategia térmica) if escenario_estocastico = "lluvia_intensa" [ set estrategia_termica "termoconformista" ] if escenario_estocastico = "sequia" [ set estrategia_termica "termorregulador_activo" ] move-to one-of patches with [tipo = "pasto_acolchonado"] set IR-anterior [IR] of patch-here set temp-anterior [temperatura] of patch-here ] ;; inicializar contadores globales set to-ev-riesgo-choquetermico-ac 0 set to-ev-riesgo-deshidratacion-ac 0 set to-ev-riesgo-ahogamiento-ac 0 set to-ev-riesgo-fisiologico-ac 0 set to-ev-riesgo-ambiental-ac 0 set to-eventos-riesgo-ac 0 reset-ticks end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AMBIENTE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 3) TIEMPO → HORA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to-report hora-actual report floor (ticks / ticks-por-hora) mod 24 end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 4) Actualización de TEMPERATURA e IR ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to actualizar-vecindad set pasto-acolchonado-vecino? any? neighbors4 with [ tipo = "pasto_acolchonado" ] end to update-temperature let hour hora-actual let clave tipo ;; con las barreras los valores de temperatura cambiaran si estan o no en contacto con pasto kikuyo acolchonado ;; barreras base if tipo = "limite_urbano" [ if pasto-acolchonado-vecino? [ set clave "limite_urbano_pastovecino" ] if not pasto-acolchonado-vecino? [ set clave "limite_urbano_sinpastovecino" ] ] ;; con barreras intencionales ;; roca if tipo = "roca_a_ras_suelo" [ if pasto-acolchonado-vecino? [ set clave "roca_a_ras_suelo_pastovecino" ] if not pasto-acolchonado-vecino? [ set clave "roca_a_ras_suelo_sinpastovecino" ] ] ;; tronco if tipo = "leñoso_a_ras_suelo" [ if pasto-acolchonado-vecino? [ set clave "leñoso_a_ras_suelo_pastovecino" ] if not pasto-acolchonado-vecino? [ set clave "leñoso_a_ras_suelo_sinpastovecino" ] ] let lista table:get temp-por-cobertura clave set temperatura item hour lista end to update-IR set IR table:get IR-por-cobertura tipo end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 5) CAMBIO DE COBERTURA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to cambiar-cobertura [nuevo-tipo nuevo-color] set tipo nuevo-tipo set pcolor nuevo-color update-IR actualizar-exposicion-lluvia end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 6) PROCESO: INUNDACIÓN (LLUVIA INTENSA) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to proceso-inundacion ;; Solo ocurre en lluvia intensa if escenario_estocastico != "lluvia_intensa" [ stop ] let minutos ticks ;; Convertir porcentaje (0–100) a proporción (0–1) let p porcentaje_inundacion / 100 ;; Probabilidad inicial (no puede superar el objetivo total) let prob_inicial min list 0.03 p ;; ================================ ;; (6.1) FASE 1: CHARCOS INICIALES ;; ================================ if minutos >= 10 and minutos <= 15 [ ask patches with [tipo = "pasto_acolchonado"] [ if random-float 1 < prob_inicial [ cambiar-cobertura "pasto_acolchonado_inundado" 83 ] ] ask patches with [tipo = "pasto_compacto"] [ if random-float 1 < prob_inicial [ cambiar-cobertura "pasto_compacto_inundado" 85 ] ] ask patches with [tipo = "tierra_desnuda"] [ if random-float 1 < prob_inicial [ cambiar-cobertura "tierra_desnuda_inundada" 31 ] ] ] ;; ================================ ;; (6.2) FASE 2: EXPANSIÓN DESDE CHARCOS ;; ================================ if minutos > 15 and minutos <= 60 [ ;; -------- PASTO ACOLCHONADO -------- let inundados_pa count patches with [ tipo = "pasto_acolchonado_inundado" ] if total_original_pa > 0 and (inundados_pa / total_original_pa) < p [ ask patches with [tipo = "pasto_acolchonado"] [ if any? neighbors with [tipo = "pasto_acolchonado_inundado"] [ if random-float 1 < 0.2 [ cambiar-cobertura "pasto_acolchonado_inundado" 83 ] ] ] ] ;; -------- PASTO COMPACTO -------- let inundados_pc count patches with [ tipo = "pasto_compacto_inundado" ] if total_original_pc > 0 and (inundados_pc / total_original_pc) < p [ ask patches with [tipo = "pasto_compacto"] [ if any? neighbors with [tipo = "pasto_compacto_inundado"] [ if random-float 1 < 0.2 [ cambiar-cobertura "pasto_compacto_inundado" 85 ] ] ] ] ;; -------- TIERRA DESNUDA -------- let inundados_td count patches with [ tipo = "tierra_desnuda_inundada" ] if total_original_td > 0 and (inundados_td / total_original_td) < p [ ask patches with [tipo = "tierra_desnuda"] [ if any? neighbors with [tipo = "tierra_desnuda_inundada"] [ if random-float 1 < 0.2 [ cambiar-cobertura "tierra_desnuda_inundada" 31 ] ] ] ] ] end ;; valores de IR < 6 no aislan contra precipitación to actualizar-exposicion-lluvia set expuesto-lluvia? (IR < 6) end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 7) PROCESO: SEQUÍA (DETERIORO) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to proceso-sequia if escenario_estocastico != "sequia" [ stop ] let horas ticks ;; 20–45 días → deterioro parcial if horas >= 480 and horas <= 1080 [ ask patches with [tipo = "pasto_acolchonado"] [ cambiar-cobertura "pasto_acolchonado_deteriorofoliar" 43 ] ask patches with [tipo = "pasto_compacto"] [ cambiar-cobertura "pasto_compacto_deteriorofoliar" 44 ] ] ;; 100–120 días → deterioro total if horas >= 2400 and horas <= 2880 [ ask patches with [tipo = "pasto_acolchonado_deteriorofoliar"] [ cambiar-cobertura "pasto_deteriorofoliar_estolonifero" 45 ] ask patches with [tipo = "pasto_compacto_deteriorofoliar"] [ cambiar-cobertura "pasto_deteriorofoliar_estolonifero" 45 ] ] end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 8) CREACIÓN DE BARRERAS DE EXCLUSIÓN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to crear-barreras-exclusion ;; Si el chooser está en "sin", no hacer nada if barreras_exclusion = "sin" [ stop ] ;; Parches de pasto_acolchonado en contacto con otras coberturas (excepto limite_urbano) let candidatos patches with [ tipo = "pasto_acolchonado" and any? neighbors with [ tipo != "pasto_acolchonado" and tipo != "limite_urbano" ] ] ask candidatos [ ;; Intentar colocar tronco (3x1) con probabilidad 50% if random-float 1 < 0.5 [ if colocar-tronco-barrera self [ stop ] ] ;; Si no se pudo tronco → colocar roca (1x1) let _ colocar-roca-barrera self ] end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; (8.1) ROCA (1x1) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to-report colocar-roca-barrera [p] if [tipo] of p != "pasto_acolchonado" [ report false ] ;; IMPORTANTE: NO bloqueamos vecinos aquí ;; Esto permite que las rocas formen una barrera continua sin huecos ask p [ cambiar-cobertura "roca_a_ras_suelo" 3 ] report true end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; (8.2) TRONCO (3x1) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to-report colocar-tronco-barrera [p] ;; orientación aleatoria let paso-x one-of [1 0] let paso-y ifelse-value (paso-x = 1) [0] [1] let grupo (patch-set p patch ([pxcor] of p + paso-x) ([pycor] of p + paso-y) patch ([pxcor] of p + paso-x * 2) ([pycor] of p + paso-y * 2) ) ;; validar tamaño if count grupo != 3 [ report false ] ;; todos deben ser pasto_acolchonado if any? grupo with [tipo != "pasto_acolchonado"] [ report false ] ;; SOLO PARA TRONCOS: evitar que queden pegados entre sí let vecinos patch-set ([neighbors] of grupo) if any? vecinos with [ tipo = "leñoso_a_ras_suelo" ] [ report false ] ;; TODOS los parches del grupo deben estar en borde válido ;; (esto evita que los troncos se metan hacia el interior del pasto) if any? grupo with [ ;; NO toca otra cobertura (borde externo) not any? neighbors4 with [ tipo != "pasto_acolchonado" and tipo != "limite_urbano" ] or ;; NO toca pasto_acolchonado (borde interno) not any? neighbors4 with [ tipo = "pasto_acolchonado" ] ] [ report false ] ask grupo [ cambiar-cobertura "leñoso_a_ras_suelo" 24 ] report true end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 9) Creación de refugios artificiales ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to crear-refugios-artificiales ask patches [ set ID-refugio -1 ] ;; métricas set num_refugios_totales 0 set num_refugios_rocoso 0 set num_refugios_leñoso 0 if tamaño_refugios_seleccion = "ninguno" [ show "✔ No se generaron refugios" stop ] ;; ------------------------- ;; (9.1). Definir la secuencia en la que se pondran los refugios ;; ------------------------- let secuencia [] if tamaño_refugios_seleccion = "30x30cm" [ set secuencia ["rocoso" "tronco"] ] if tamaño_refugios_seleccion = "30x90cm" [ set secuencia ["rocoso" "tronco"] ] if tamaño_refugios_seleccion = "90x180cm" [ set secuencia ["rocoso" "tronco"] ] if tamaño_refugios_seleccion = "180x360cm" [ set secuencia ["rocoso" "tronco"] ] if tamaño_refugios_seleccion = "360x720cm" [ set secuencia ["rocoso" "tronco"] ] ;; ------------------------- ;; (9.2) se define el tamaño de los refugios ;; ------------------------- let gap distancia_entre_refugios let ancho 0 let alto 0 if tamaño_refugios_seleccion = "30x30cm" [ set ancho 1 set alto 1 ] if tamaño_refugios_seleccion = "30x90cm" [ set ancho 3 set alto 1 ] if tamaño_refugios_seleccion = "90x180cm" [ set ancho 6 set alto 3 ] if tamaño_refugios_seleccion = "180x360cm" [ set ancho 12 set alto 6 ] if tamaño_refugios_seleccion = "360x720cm" [ set ancho 24 set alto 12 ] let celda_x (ancho + gap) let celda_y (alto + gap) ;; ------------------------- ;; (9.3) se define donde se originaran ;; ------------------------- let origen-y max [pycor] of patches with [tipo = "pasto_acolchonado"] let origen-x min [pxcor] of patches with [tipo = "pasto_acolchonado"] ;; ------------------------- ;; (9.4) se define su aparición global (a manera de mosaico para que se aparezcan lo mas rapido posible) ;; ------------------------- ask patches [ if tipo = "pasto_acolchonado" [ ;; ajuste de origen let cx floor ((pxcor - origen-x) / celda_x) let cy floor ((origen-y - pycor) / celda_y) let local_x ((pxcor - origen-x) mod celda_x) let local_y ((origen-y - pycor) mod celda_y) if (local_x < ancho) and (local_y < alto) [ let indice (cx + cy) let tipo_actual item (indice mod length secuencia) secuencia ;;;; se le da identidad a cada refugio y un ID if tipo_actual = "rocoso" [ cambiar-cobertura "cobertura_rocosa" 6 ] if tipo_actual = "tronco" [ cambiar-cobertura "restos_leñosos_gruesos" 35 ] set ID-refugio (cx * 100000 + cy) ] ] ] ;; ------------------------- ;; (9.5) se eliminan los refugios que no cumplan con el tamaño tamaño definido ;; ------------------------- if (ancho * alto) > 1 [ let tamaño_refugio (ancho * alto) let ids remove-duplicates [ID-refugio] of patches with [ID-refugio != -1] foreach ids [ id -> let bloque patches with [ID-refugio = id] if count bloque != tamaño_refugio [ ask bloque [ set ID-refugio -1 cambiar-cobertura "pasto_acolchonado" 63 ] ] ] ] ;; ------------------------- ;; (9.6) Metricas para mostrar ;; ------------------------- let patches_refugio patches with [ID-refugio != -1] set num_refugios_totales length remove-duplicates [ID-refugio] of patches_refugio set num_refugios_rocoso length remove-duplicates [ID-refugio] of patches with [ID-refugio != -1 and pcolor = 6] set num_refugios_leñoso length remove-duplicates [ID-refugio] of patches with [ID-refugio != -1 and pcolor = 35] ;; ------------------------- ;; RESULTADOS ;; ------------------------- show (word "✔ Refugios rocosos: " num_refugios_rocoso) show (word "✔ Refugios tronco: " num_refugios_leñoso) show (word "✔ Total refugios: " num_refugios_totales) end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AGENTE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; (11) Magnitud del desplazamiento, Beneficios, Consecuencias y Muerte ;; → magnitud del desplazamiento (NO pasos) ;; → acoplado a ritmo circadiano (en estado optimo) o ariesgo ;; → escala temporal explícita con delta-tiempo ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to velocidad-movimiento let temp-local [temperatura] of patch-here let IR-local [IR] of patch-here ;; ------------------------- ;; VELOCIDADES (EN PARCHES) ;; ------------------------- let velocidad-base 1 ;; 1 parche/min = 30 cm/min let velocidad-riesgo 4 ;; 4 parches/min = 120 cm/min ;; ------------------------- ;; RESET ;; ------------------------- set velocidad 0 ;; ------------------------- ;; Ajuste de la escala para la acumulación de la perdida de agua por hora ;; ------------------------- let cambio-tick tasa-perdida-agua * peso-serpiente * (delta-tiempo / 60) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DESPLAZAMIENTO SOBRE OPTIMO y BENEFICIOS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; if IR-local >= 5 [ let actividad-circadiana item hora-actual [ 1 1 1 1 1 1 0.8 0.6 0.3 0.1 0 0 0 0 0.1 0.3 0.6 0.8 1 1 1 1 1 1 ] set velocidad velocidad-base * delta-tiempo * actividad-circadiana ;; ------------------------- ;; BENEFICIO 1 - REHIDRATACION ;; ------------------------- set perdida-acumulada perdida-acumulada - cambio-tick ] ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DESPLAZAMIENTO SOBRE ZONAS DE RIESGO - CONSECUENCIAS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; VELOCIDAD EN RIESGO (solo si está en zona peligrosa) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; if IR-local < 5 [ set velocidad velocidad-riesgo * delta-tiempo ] ;; ------------------------- ;; CONSECUENCIA 1: choquetermico ;; ------------------------- if temp-local > 31 or temp-local < 3.991 [ ;; si supera el umbral muere set causa-muerte "choquetermico" set muertes-choquetermico muertes-choquetermico + 1 morir ] ;; ------------------------- ;; CONSECUENCIA 2: PERDIDA DE AGUA - DESHIDRATACIÓN (IR 4) ;; ------------------------- ;; acumulación SOLO cuando está en zona de riesgo hídrico if IR-local = 4 [ set perdida-acumulada perdida-acumulada + cambio-tick ] ;; ------------------------- ;; EVITAR VALORES NEGATIVOS ;; ------------------------- if perdida-acumulada < 0 [ set perdida-acumulada 0 ] ;; ------------------------- ;; PORCENTAJE DE PÉRDIDA ;; (estado fisiológico acumulado) ;; ------------------------- let porcentaje-perdida perdida-acumulada / (peso-serpiente * 1000) ;; ------------------------- ;; MUERTE POR DESHIDRATACIÓN ;; ------------------------- if porcentaje-perdida >= 0.15 [ ;; umbral letal: 15% pérdida de masa set causa-muerte "deshidratacion" set muertes-deshidratacion muertes-deshidratacion + 1 morir ] ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; CONSECUENCIA 3 - AHOGAMIENTO ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ifelse (IR-local = 1 or IR-local = 2) [ ;; acumulación de tiempo en agua set tiempo-en-inundacion tiempo-en-inundacion + delta-tiempo ] [ ;; fuera del agua → reinicia exposición set tiempo-en-inundacion 0 ] ;; ------------------------- ;; PROBABILIDAD DE MUERTE POR AHOGAMIENTO ;; ------------------------- if tiempo-en-inundacion > 17 [ let prob-muerte 1 - exp(-0.12 * (tiempo-en-inundacion - 17)) if random-float 1 < prob-muerte [ set causa-muerte "ahogamiento" set muertes-ahogamiento muertes-ahogamiento + 1 die ;; o "morir" si tienes procedimiento propio ] ] ;; ------------------------- ;; Desplazamiento ;; ------------------------- set desplazamiento max list 0 velocidad if desplazamiento > 0 [ tomar-decision-desplazamiento ] end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; (12) TOMA DE DECISIONES PARA CADA DESPLAZAMIENTO ;; → define dirección del movimiento (NO magnitud) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to tomar-decision-desplazamiento ;; ========================= ;; 1. DIRECCIÓN DEL DESPLAZAMIENTO ;; ========================= ;; Crea una lista con los 8 parches vecinos alrededor del agente. let opciones neighbors ;; Esto es el “mapa inmediato” de posibles desplazamientos. ;; Se filtran los vecinos para que el agente solo pueda moverse sobre celdas que no sean barreras ;; Barreras (IR = 0) let opciones-validas opciones with [IR > 0] ;; si no hay vecinos transitables → no se mueve if not any? opciones-validas [ stop ] ;; para que el agente pueda leer el estado del parche actual: let temp-local [temperatura] of patch-here ;; lee la temperatura actual let IR-local [IR] of patch-here ;; lee el IR actual ;; Esto le permite al agente definr si está en un parche óptimo o en riesgo. ;; sin embargo, durante la lluvia hay caos ;; ========================= ;; MODO CAOTICO (ESTADO: BAJO PRECIPITACIÓN) ;; Solo durante la franja de tiempo en que la precipitacion esta activa (10min - 60min; Condición climática: LLuvia intensa) ;; y dentro de coberturas donde la lluvia NO es aislada completamente = IR < 6) ;; ========================= if escenario_estocastico = "lluvia_intensa" and ticks >= 10 and ticks <= 60 and [expuesto-lluvia?] of patch-here [ ;; comportamiento desorganizado bajo perturbación ;; solo se desplaza como respuesta al disturbio (lluvia) let r-lluvia random-float 1 ;; 🔄 50% desplazamiento aleatorio ;; el agente se mueve en cualquier dirección sin preferencia if r-lluvia < 0.5 [ move-to one-of opciones-validas stop ] ;; ➡️ 50% desplazamiento direccional (inercia de desplazamiento) ;; el agente mantiene su rumbo sin evaluar condiciones del entorno let adelante opciones-validas with [ abs (subtract-headings ([heading] of myself) towards myself) < 45 ] ;; si hay opciones en la dirección actual, las usa if any? adelante [ move-to one-of adelante stop ] ;; fallback: si no hay dirección clara, se mueve aleatoriamente move-to one-of opciones-validas stop ] ;; ========================= ;; (12.1) EVALUACIÓN DENTRO DEL ÓPTIMO (ESTADO: PROTEGIDO) ;; ======================== ;; Detectar si el agente está en condición óptima ecológica if (temp-local >= 3.991 and temp-local <= 31) and (IR-local = 5 or IR-local = 6) [ ;; si esta en condiciones óptima: ;; se activa el comportamiento termico de acuerdo a la temporada ;; ========================= ;; Temporada humeda → termoconformista ;; ========================= if estrategia_termica = "termoconformista" [ ;; filtrar vecinos que sigan siendo optimos y buscar moverse en ellos sin salir del óptimo let candidatos opciones with [ temperatura >= 3.991 and temperatura <= 31 and (IR = 5 or IR = 6) ] ;; ========================= ;; TOMA DE DECISIÓN EN TERMOCONFORMISMO ;; ========================= ;; Si existe al menos un vecino optimo → muévete a ese if any? candidatos [ move-to one-of candidatos ] ;; Si NO hay vecinos buenos → muévete a cualquier vecino disponible (exploración) if not any? candidatos [ move-to one-of opciones ] stop ] ;; ========================= ;; Temporada seca → termorregulador activo ;; ========================= if estrategia_termica = "termorregulador_activo" [ ;; Si existe vecinos con temperaturas mas cercanas a Tsel del agente - → muévete a uno de esos let candidatos-optimos opciones with [ temperatura >= 19.53 and temperatura <= 21.30 and (IR = 5 or IR = 6) ] ;; si no, filtrar vecinos que sigan siendo optimos y buscar moverse en ellos sin salir del óptimo let candidatos-secundarios opciones with [ temperatura >= 3.991 and temperatura <= 31 and (IR = 5 or IR = 6) ] ;; ========================= ;; TOMA DE DECISIÓN EN TERMORREGULACIÓN ACTIVA ;; ========================= ;; si hay zonas que se acerquen al Tsel del agente, elige la que mas se acerque a la media de Tsel= 20.36 if any? candidatos-optimos [ move-to min-one-of candidatos-optimos [ abs(temperatura - 20.36) ] stop ] ;; si no hay optimo con tsel perfecto, de todas formas, busca la mejor aproximación if any? candidatos-secundarios [ move-to min-one-of candidatos-secundarios [ abs(temperatura - 20.36) ] stop ] ;; si no encuntras nada, exploración move-to one-of opciones stop ] stop ] ;; ========================= ;; (12.2) EVALUACION FUERA DEL ÓPTIMO SIN CAOS (ESTADO: EN RIESGO) ;; ========================= ;; 1. Si existen vecinos en óptimo de temperatura e IR ;; busca moverte hacia ellos let buscar-optimo opciones-validas with [ temperatura >= 3.991 and temperatura <= 31 and (IR = 5 or IR = 6) ] ;; 2. si no, busca uno que mejoren al menos en un atributo ;; (ya sea por temperatura o por IR) let mejorar-IR opciones-validas with [ IR > IR-local ] let mejorar-temperatura opciones-validas with [ temperatura >= 3.991 and temperatura <= 31 ] ;; ========================= ;; TOMA DE DECISIÓN FUERA DE OPTIMO ;; ========================= if any? opciones-validas [ let r random-float 1 ;; 1. volver al óptimo (máxima prioridad) if any? buscar-optimo and r < 0.35 [ move-to one-of buscar-optimo stop ] ;; 2. mejorar condición térmica if any? mejorar-temperatura and r >= 0.35 and r < 0.6 [ move-to one-of mejorar-temperatura stop ] ;; 3. mejorar calidad (IR) if any? mejorar-IR and r >= 0.6 and r < 0.85 [ move-to one-of mejorar-IR stop ] ;; 🔍 4. EXPLORACIÓN (con direccionalidad) ;; 1. seleccionar candidatos de exploración (igual o peor IR) let candidatos-exploracion opciones-validas with [ IR <= IR-local ] ;; 2. si existen candidatos de exploración if any? candidatos-exploracion [ ;; generar decisión probabilística let r2 random-float 1 ;; 50%: moverse hacia adelante (mantener dirección) if r2 < 0.5 [ ;; vecinos que están aproximadamente en la dirección actual let adelante candidatos-exploracion with [ abs (subtract-headings ([heading] of myself) towards myself) < 45 ] ;; si hay opciones hacia adelante, usarlas if any? adelante [ move-to one-of adelante stop ] ] ;; 50% (o fallback): desplazamiento aleatorio dentro de exploración move-to one-of candidatos-exploracion stop ] ;; si no hay candidatos de exploración, usar cualquier opción válida move-to one-of opciones-validas stop ] end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; (13) DINÁMICA AMBIENTAL ;; → registra cambios en el entorno ;; → acumula eventos ecológicos ;; → calcula riesgo de exposición (NO fisiológico) ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to dinamica-ambiental let IR-local [IR] of patch-here let temp-local [temperatura] of patch-here ;; ========================= ;; RIESGO AMBIENTAL (HAZARD PROGRESIVO) ;; ========================= ;; acumulación SOLO en zona de exposición (IR 1 o IR 3) if IR-local = 3 or IR-local = 1 [ set tiempo-en-exposicion tiempo-en-exposicion + delta-tiempo ] ;; reset TOTAL si sale de esas zonas if IR-local != 3 and IR-local != 1 [ set tiempo-en-exposicion 0 ] ;; conversión a hazard progresivo let k 1 let base-hazard 0.005 set hazard-ambiental base-hazard * (tiempo-en-exposicion / (tiempo-en-exposicion + k)) ;; ========================= ;; MUERTE POR CAUSAS AMBIENTALES (IR 1 o IR 3) ;; ========================= let p hazard-ambiental * delta-tiempo ;; límite de seguridad (evita probabilidades > 1) set p min (list p 0.9) if (IR-local = 1 or IR-local = 3) and random-float 1 < p [ set muertes-causas-ambientales muertes-causas-ambientales + 1 morir ] end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Mortalidad ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to conteo-eventos let IR-local [IR] of patch-here let temp-local [temperatura] of patch-here ;; ========================= ;; Conteo de eventos de riesgo ;; ========================= if (temp-anterior > 3.991 and temp-anterior < 31) and (temp-local <= 3.991 or temp-local >= 31) [ set to-ev-riesgo-choquetermico-ac to-ev-riesgo-choquetermico-ac + 1 ] if (IR-anterior = 6 or IR-anterior = 5 or IR-anterior = 3 or IR-anterior = 2 or IR-anterior = 1) and (IR-local = 4) [ set to-ev-riesgo-deshidratacion-ac to-ev-riesgo-deshidratacion-ac + 1 ] if (IR-anterior = 6 or IR-anterior = 5 or IR-anterior = 4 or IR-anterior = 2 or IR-anterior = 1) and (IR-local = 3) [ set to-ev-riesgo-ambiental-ac to-ev-riesgo-ambiental-ac + 1 ] if (IR-anterior = 6 or IR-anterior = 5 or IR-anterior = 4 or IR-anterior = 3) and (IR-local = 2) [ set to-ev-riesgo-ahogamiento-ac to-ev-riesgo-ahogamiento-ac + 1 ] if (IR-anterior = 6 or IR-anterior = 5 or IR-anterior = 4 or IR-anterior = 3) and (IR-local = 1) [ set to-ev-riesgo-ahogamiento-ac to-ev-riesgo-ahogamiento-ac + 1 set to-ev-riesgo-ambiental-ac to-ev-riesgo-ambiental-ac + 1 ] ;; ========================= ;; TOTALES ;; ========================= set to-ev-riesgo-fisiologico-ac to-ev-riesgo-choquetermico-ac + to-ev-riesgo-deshidratacion-ac + to-ev-riesgo-ahogamiento-ac set to-eventos-riesgo-ac to-ev-riesgo-fisiologico-ac + to-ev-riesgo-ambiental-ac end to morir set vivo? false set color red set total_muertes total_muertes + 1 die end to sobrevivir set vivo? true set color green set total_vivos total_vivos + 1 ;; NO die end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; (10) GO ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to go if ticks >= duracion [ stop ] proceso-inundacion proceso-sequia ask patches [ actualizar-vecindad update-temperature ] ask turtles with [vivo?] [ velocidad-movimiento dinamica-ambiental conteo-eventos ;; actualizar memoria aquí set temp-anterior [temperatura] of patch-here set IR-anterior [IR] of patch-here ] ;; ========================= ;; Mortalidad ;; ========================= set total_muertes (numero-serpientes - count turtles with [vivo?]) if numero-serpientes > 0 and ticks > 0 [ set tasa_mortalidad total_muertes / numero-serpientes ] ;; ========================= ;; Supervivencia ;; ========================= set total_vivos count turtles with [vivo?] if numero-serpientes > 0 [ set tasa_supervivencia total_vivos / numero-serpientes ] ;; ========================= ;; PLOTS ;; ========================= set-current-plot "Mortalidad" set-current-plot-pen "muertes" plot total_muertes set-current-plot "Eventos de riesgo acumulado" set-current-plot-pen "Total" plot to-eventos-riesgo-ac set-current-plot-pen "ambiental" plot to-ev-riesgo-ambiental-ac set-current-plot-pen "fisiologico" plot to-ev-riesgo-fisiologico-ac set-current-plot-pen "choquetermico" plot to-ev-riesgo-choquetermico-ac set-current-plot-pen "deshidratacion" plot to-ev-riesgo-deshidratacion-ac set-current-plot-pen "ahogamiento" plot to-ev-riesgo-ahogamiento-ac set-current-plot "Supervivencia" set-current-plot-pen "Sobrevivientes" plot total_vivos tick end
There is only one version of this model, created about 8 hours ago by Julián Felipe Rengifo Martínez.
Attached files
| File | Type | Description | Last updated | |
|---|---|---|---|---|
| Mundo view.png | png | Debe importar el archivo PNG para cargar las coberturas base sobre las que se desarrollará el modelo | about 8 hours ago, by Julián Felipe Rengifo Martínez | Download |
| Refugios artificiales y barreras para la supervivencia de serpientes en un parque urbano.png | preview | Preview for 'Refugios artificiales y barreras para la supervivencia de serpientes en un parque urbano' | about 8 hours ago, by Julián Felipe Rengifo Martínez | Download |
This model does not have any ancestors.
This model does not have any descendants.
Download this model