Atividade 2: Algoritmo de Gillespie implementado ao modelo de Lotka-Volterra
Definir a função do algoritmo e as taxas dos eventos:
library(ggplot2)
Warning: package 'ggplot2' was built under R version 4.3.3
#definir a função do algoritmo de Gillespie para o modelo de Lotka-Volterragil_lkv <-function(a, b, c, d, x, y, t_end) {#definir o estado inicial t <-0 results <-data.frame(Time = t, Prey = x, Predator = y)#loop principal do Algoritmo de Gillespiewhile (t < t_end && (x >0|| y >0)) {#Definir taxas de eventos nasc_presa <- a * x #taxa de nascimento das presas predacao <- b * x * y #taxa de predação (presa consumida, predador nasce) nasc_predad <- c * x * y #raxa de nascimento dos predadores morte_pred <- d * y #taxa de morte dos predadores#calcular a taxa total taxa_total <- nasc_presa + predacao + nasc_predad + morte_pred#parar, se não houver mais interações possíveisif (taxa_total ==0) break#tempo até o próximo evento (distribuição exponencial) tau <-rexp(1, taxa_total) t <- t + tau # Atualiza o tempo#escolher qual evento ocorre (probabilidade proporcional às taxas) r <-runif(1, 0, taxa_total)if (r < nasc_presa) { x <- x +1#nascimento de uma presa } elseif (r < nasc_presa + predacao) { x <- x -1#predação (presa consumida) } elseif (r < nasc_presa + predacao + nasc_predad) { y <- y +1#nascimento de um novo predador } else { y <- y -1#morte de um predador }#armazenar os valores num data frame results <-rbind(results, data.frame(Time = t, Prey = x, Predator = y)) }return(results)}
Adicionar os parâmetros e realizar a simulação:
#definir parâmetros do modeloa <-0.025#taxa de nascimento das presasb <-0.025#taxa de predaçãoc <-0.025#taxa de nascimento dos predadores d <-0.025#taxa de morte dos predadores #definir condições iniciaisx <-30#pop inicial de presasy <-100#pop inicial de predadorest_end <-50#tempo máximo da simulaçãoset.seed(124)#executar a simulaçãosim_data <-gil_lkv(a, b, c, d, x, y, t_end)#visualizar os primeiros valores da simulaçãohead(sim_data)
#grafico das populações ao longo do tempoggplot(sim_data, aes(x = Time)) +geom_line(aes(y = Prey, color ="Presas")) +geom_line(aes(y = Predator, color ="Predadores")) +labs(title ="Simulação de Lotka-Volterra com o Algoritmo de Gillespie",x ="Tempo", y ="População") +scale_color_manual(name ="Espécies", values =c("Presas"="blue", "Predadores"="red")) +theme_minimal()
#definir parâmetros do modeloa <-0.025#taxa de nascimento das presasb <-0.025#taxa de predaçãoc <-0.025#taxa de nascimento dos predadores d <-0.025#taxa de morte dos predadores #definir condições iniciaisx <-100#pop inicial de presasy <-30#pop inicial de predadorest_end <-50#tempo máximo da simulaçãoset.seed(124)#executar a simulaçãosim_data <-gil_lkv(a, b, c, d, x, y, t_end)#visualizar os primeiros valores da simulaçãohead(sim_data)
#criar gráfico da evolução das populações ao longo do tempoggplot(sim_data, aes(x = Time)) +geom_line(aes(y = Prey, color ="Presas")) +geom_line(aes(y = Predator, color ="Predadores")) +labs(title ="Simulação de Lotka-Volterra com o Algoritmo de Gillespie",x ="Tempo", y ="População") +scale_color_manual(name ="Espécies", values =c("Presas"="blue", "Predadores"="red")) +theme_minimal()
Adotando os mesmos parâmetros para as taxas e alterando apenas população inicial de presas e predadores, vemos que para 50 unidade de tempo ocorre a extinção das presas e queda acentuada da população de predadores - que ainda são mantidos devido a baixa taxa de mortalidade.
Se a baixa → pode levar a redução da população de presas;
Se b elevada → predação ocorre rápido;
Se c elevada → mais predadores consumindo presas;
Se d baixa → predadores vivem mais tempo, consomem mais presas.
#definir parâmetros do modeloa <-0.006#taxa de nascimento das presasb <-0.0025#taxa de predaçãoc <-0.001#taxa de nascimento dos predadores d <-0.07#taxa de morte dos predadores #definir condições iniciaisx <-40#pop inicial de presasy <-15#pop inicial de predadoret_end <-50#tempo máximo da simulaçãoset.seed(124)#executar a simulaçãosim_data <-gil_lkv(a, b, c, d, x, y, t_end)#visualizar os primeiros valores da simulaçãohead(sim_data)
#criar gráfico da evolução das populações ao longo do tempoggplot(sim_data, aes(x = Time)) +geom_line(aes(y = Prey, color ="Presas")) +geom_line(aes(y = Predator, color ="Predadores")) +labs(title ="Simulação de Lotka-Volterra com o Algoritmo de Gillespie",x ="Tempo", y ="População") +scale_color_manual(name ="Espécies", values =c("Presas"="blue", "Predadores"="red")) +theme_minimal()
A elevada taxa de morte dos predadores e a população inicial de presas maior que a de predadores promove a coexistência por alguns anos.
A população de presas cai e com ela a de predadores (influenciado pela baixa taxa de nascimento), levando a população de predadores próximo da extinção.
#definir parâmetros do modeloa <-0.5#taxa de nascimento das presasb <-0.02#taxa de predaçãoc <-0.008#taxa de nascimento dos predadores d <-0.5#taxa de morte dos predadores #definir condições iniciaisx <-20#pop inicial de presasy <-18#pop inicial de predadoret_end <-50set.seed(124)sim_data <-gil_lkv(a, b, c, d, x, y, t_end)head(sim_data)
#criar gráfico da evolução das populações ao longo do tempoggplot(sim_data, aes(x = Time)) +geom_line(aes(y = Prey, color ="Presas")) +geom_line(aes(y = Predator, color ="Predadores")) +labs(title ="Simulação de Lotka-Volterra com o Algoritmo de Gillespie",x ="Tempo", y ="População") +scale_color_manual(name ="Espécies", values =c("Presas"="blue", "Predadores"="red")) +theme_minimal()
A população de presas e predadores aumenta e diminui simultâneamente, devido a baixa taxa de nascimentos de predadores e taxas semelhantes de mortalidade de predadores e de nascimento de presas.
Presas e predadores são extintos depois de uma oscilação entre o tamanho de ambas as populações.
#definir parâmetros do modeloa <-0.05#taxa de nascimento das presasb <-0.02# taxa de predaçãoc <-0.008#taxa de nascimento dos predadores d <-0.5#taxa de morte dos predadores #definir condições iniciaisx <-20#pop inicial de presasy <-18#pop inicial de predadoret_end <-50set.seed(124)sim_data <-gil_lkv(a, b, c, d, x, y, t_end)head(sim_data)
#criar gráfico da evolução das populações ao longo do tempoggplot(sim_data, aes(x = Time)) +geom_line(aes(y = Prey, color ="Presas")) +geom_line(aes(y = Predator, color ="Predadores")) +labs(title ="Simulação de Lotka-Volterra com o Algoritmo de Gillespie",x ="Tempo", y ="População") +scale_color_manual(name ="Espécies", values =c("Presas"="blue", "Predadores"="red")) +theme_minimal()
Com a redução na taxa de nascimento das presas, a extinção dos predadores ocorre mais rapidamente.