Yellowfin tuna dynamics model with real catch data
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
Modelo de dinámica de atún aleta amarilla (Yellowfin tuna) con datos reales de captura
Propósito
Este modelo simula la evolución de la biomasa de atún aleta amarilla bajo diferentes regímenes de pesca, utilizando datos históricos de captura (toneladas anuales) y la ecuación logística con mortalidad por pesca variable en el tiempo. Permite explorar los efectos de la sobrepesca y comparar escenarios de gestión pesquera.
Ecuación del modelo
La biomasa total N(t) (en toneladas) sigue la ecuación diferencial:
dN/dt = r N (1 − N/K) − mt N
donde:
- r = tasa intrínseca de crecimiento anual (ajustable con deslizador)
- K = capacidad de carga oceánica total (toneladas, ajustable)
- mt = mortalidad por pesca anual, que puede ser:
- Modo histórico:
mt = (captura real del año × factor sobrepesca) / biomasa actual - Modo sobrepesca constante:
mt = mortalidad base × factor sobrepesca (ej. 0.3 año−1)
- Modo histórico:
Datos utilizados
Los datos de captura anual provienen del archivo capturas_atun.csv, generado a partir de la base de datos IOTC (Comisión del Atún del Océano Índico) para la especie Thunnus albacares (Yellowfin tuna). El archivo contiene dos columnas: YEAR y CATCH (toneladas). El modelo suma automáticamente las capturas de todas las flotas y zonas para cada año.
Elementos de la interfaz
Botones
- Setup: Inicializa el modelo, carga los datos y crea las poblaciones.
- Go: Ejecuta la simulación año por año (un tick = un año).
- Start Overfishing: Cambia al modo de mortalidad por pesca constante (sobrepesca intensiva).
- Back to Historical: Regresa al modo de capturas históricas.
Deslizadores (sliders)
r: Tasa de crecimiento intrínseco (típico entre 0.3 y 0.8 para atún).K: Capacidad de carga total (toneladas). Valores recomendados: 500 000 – 1 500 000.overfishing-multiplier: Factor que multiplica la captura (modo histórico) o la mortalidad constante (modo sobrepesca). Permite simular eventos de sobrepesca.num-populations: Número de subpoblaciones o stocks independientes. Cada una tiene su propia biomasa inicial y capacidad de carga local.constant-mortality(opcional): Mortalidad por pesca base en modo sobrepesca (año-1).
Monitores
- Biomasa total actual: Muestra la suma de las biomasas de todas las poblaciones.
- Año actual: Indica el año de la simulación.
- Factor sobrepesca: Valor actual del multiplicador.
- Modo: Indica si se está en modo histórico o sobrepesca constante.
Gráficas
- Biomasa total: Evolución de la biomasa agregada a lo largo del tiempo.
- Captura anual: Captura extraída cada año (en toneladas), ya sea histórica ajustada por el factor o resultante de la mortalidad constante.
Cómo usar el modelo
- Ajuste los parámetros
r,K,num-populationsyoverfishing-multipliersegún el escenario deseado. - Presione Setup para inicializar.
- Presione Go para iniciar la simulación. Observe cómo la biomasa responde a las capturas históricas.
- Durante la ejecución, aumente
overfishing-multiplierpara simular un aumento de la presión pesquera. - Presione Start Overfishing para cambiar a un régimen de mortalidad constante (por ejemplo, tras un colapso). La biomasa caerá rápidamente.
- Use Back to Historical para volver a las capturas reales y ver si la población se recupera.
Interpretación de resultados
- Si la biomasa se mantiene estable o fluctúa alrededor de un nivel, la pesca es sostenible.
- Si la biomasa desciende progresivamente hacia cero, hay sobrepesca.
- El factor
overfishing-multiplierpermite explorar umbrales críticos: valores ligeramente superiores a 1 pueden llevar a colapso si se mantienen en el tiempo. - La comparación entre el modo histórico (capturas reales) y el modo sobrepesca constante ayuda a evaluar estrategias de manejo.
Limitaciones y supuestos
- El modelo asume que la captura se extrae instantáneamente al inicio de cada año.
- No considera migración entre poblaciones ni estructura por edades.
- La mortalidad natural no se incluye explícitamente; está implícita en el parámetro
r(crecimiento neto). - Los datos de captura son agregados a nivel oceánico; no distinguen zonas de pesca.
- El método de integración es Euler con paso de 1 año, suficiente para tasas de crecimiento moderadas.
Referencias
- IOTC (Comisión del Atún del Océano Índico). Datos de captura de atún aleta amarilla. https://www.iotc.org
- Ecuación logística con mortalidad por pesca: modelo clásico de dinámica de poblaciones explotadas (Schaefer, 1954).
Créditos
Modelo desarrollado para simulación de escenarios de sobrepesca. Creado por Daniel Pabon para la asignatura de Ecología Acuática, programa de Biología, Universidad de Pamplona. biodaniel001@gmail.com
Comments and Questions
extensions [csv] breed [barcos barco] globals [ years-list catches-list current-index ; historical-mode? ; ← Comentado porque hay un switch en la interfaz que lo crea ; Las siguientes son creadas por sliders ] turtles-own [ biomass r-local K-local ] ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; AUXILIARES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to-report split [string delimitador] let result [] let i 0 let len length string let pos position delimitador string while [pos != false] [ set result lput substring string i pos result set i (pos + 1) set pos position delimitador substring string i len ] set result lput substring string i len result report result end to-report string-to-number [s] ifelse s = "" or s = "NA" or s = "NULL" [ report 0 ] [ report read-from-string s ] end to load-catch-data [filename] ifelse file-exists? filename [ set catches-list [] set years-list [] file-open filename let header file-read-line while [not file-at-end?] [ let line file-read-line let items split line "," if length items >= 2 [ let year string-to-number (item 0 items) let catch string-to-number (item 1 items) let pos position year years-list ifelse pos = false [ set years-list lput year years-list set catches-list lput catch catches-list ] [ let old-catch item pos catches-list set catches-list replace-item pos catches-list (old-catch + catch) ] ] ] file-close print (word "Cargados " length years-list " años. Desde " item 0 years-list " hasta " item (length years-list - 1) years-list) ] [ set years-list [1981 1982 1984 1985 1986 1987 1988 1991] set catches-list [12.422767 0.735563 0.679455 0.794039 0.718265 0.705771 0.198865 0.001112] user-message "Archivo no encontrado. Usando datos de ejemplo limitados." ] end to dibujar-oceano ; Fondo azul fijo (85 = azul medio claro, bonito) ask patches [ set pcolor 95 ] end to actualizar-visuales ; Solo ajustar tamaños si hay al menos un pez if any? turtles [ let max-biomass max [biomass] of turtles if max-biomass > 0 [ ask turtles [ set size 0.8 + (biomass / max-biomass) * 2.5 ] ] ] ; Determinar número de barcos (si no hay peces, igual se pueden mostrar) let num-barcos-deseado 0 ifelse historical-mode? [ set num-barcos-deseado round (3 + (overfishing-multiplier - 1) * 12) ] [ set num-barcos-deseado round (5 + overfishing-multiplier * 10) ] set num-barcos-deseado max list 2 min list 40 num-barcos-deseado let barcos-actuales count barcos if barcos-actuales < num-barcos-deseado [ create-barcos (num-barcos-deseado - barcos-actuales) [ set shape "boat" set color 35 set size 1.5 setxy random-xcor random-ycor ] ] if barcos-actuales > num-barcos-deseado [ ask n-of (barcos-actuales - num-barcos-deseado) barcos [ die ] ] end to setup-plot set-current-plot "Biomasa total" clear-plot set-current-plot "Captura anual" clear-plot end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; SETUP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to setup clear-all dibujar-oceano ; El switch de la interfaz ya tiene el valor de historical-mode? (true o false) ; No lo seteamos aquí para no sobreescribir el switch. ; Si quieres que empiece siempre en true, descomenta la línea: ; set historical-mode? true load-catch-data "capturas_atun.csv" let poblaciones max list 1 num-populations create-turtles poblaciones [ set shape "fish" set color 105 ; azul brillante set size 2 setxy random-xcor random-ycor set biomass (K / poblaciones) * (0.8 + random-float 0.4) set K-local (K / poblaciones) * (0.9 + random-float 0.2) if K-local <= 0 [ set K-local 0.000001 ] set r-local r * (0.9 + random-float 0.2) ] create-barcos 5 [ set shape "boat" set color 35 set size 1.5 setxy random-xcor random-ycor ] reset-ticks set current-index 0 setup-plot actualizar-visuales end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; GO ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to go if current-index >= length years-list [ stop ] let current-year item current-index years-list let historical-catch item current-index catches-list let m_t 0 let total-biomass sum [biomass] of turtles ifelse historical-mode? [ ifelse total-biomass > 0 [ set m_t (historical-catch * overfishing-multiplier) / total-biomass ] [ set m_t 0 ] ] [ set m_t constant-mortality * overfishing-multiplier ] ; Actualizar biomasa de cada pez ask turtles [ let N biomass let safe-K K-local if safe-K <= 0 [ set safe-K 0.000001 ] let dNdt r-local * N * (1 - N / safe-K) - m_t * N set biomass N + dNdt if biomass < 0 [ set biomass 0 ] ] ; ELIMINAR PECES EXTINTOS (biomasa <= 0.01) ask turtles with [biomass <= 0.01] [ die ] ; Recalcular biomasa total set total-biomass sum [biomass] of turtles let actual-catch 0 if total-biomass > 0 [ set actual-catch min (list (m_t * total-biomass) total-biomass) ] ; Actualizar gráficas (aunque biomasa sea 0) set-current-plot "Biomasa total" plotxy current-year total-biomass set-current-plot "Captura anual" plotxy current-year actual-catch ; MOVIMIENTO DE PECES (solo si hay) ask turtles [ rt random 30 lt random 30 fd 1 ] ; Actualizar tamaños y barcos (ya protegido) actualizar-visuales ; MOVIMIENTO DE BARCOS ask barcos [ rt random 30 lt random 30 fd 0.5 ] set current-index current-index + 1 tick end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; CONTROL DE SOBREPESCA (opcional si usas botones) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to start-overfishing set historical-mode? false user-message "Modo sobrepesca constante activado" end to back-to-historical set historical-mode? true user-message "Regresando a capturas históricas" end
There is only one version of this model, created 14 days ago by Daniel David Pabon Caicedo.
Attached files
| File | Type | Description | Last updated | |
|---|---|---|---|---|
| capturas_atun.csv | data | data file to run the model | 14 days ago, by Daniel David Pabon Caicedo | Download |
| Yellowfin tuna dynamics model with real catch data.png | preview | Preview for 'Yellowfin tuna dynamics model with real catch data' | 14 days ago, by Daniel David Pabon Caicedo | Download |
This model does not have any ancestors.
This model does not have any descendants.
Download this model