From 0516657045d0d394e102c3e32391b5807cb75344 Mon Sep 17 00:00:00 2001 From: pjentsch <pjentsch@uwaterloo.ca> Date: Thu, 15 Apr 2021 00:49:36 -0400 Subject: [PATCH] initial opinion dynamics, just need to do app notifications now.. --- CovidAlertVaccinationModel/src/ABM/model.jl | 48 +++++++++++++++++---- CovidAlertVaccinationModel/src/data.jl | 2 +- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/CovidAlertVaccinationModel/src/ABM/model.jl b/CovidAlertVaccinationModel/src/ABM/model.jl index d960101..3445351 100644 --- a/CovidAlertVaccinationModel/src/ABM/model.jl +++ b/CovidAlertVaccinationModel/src/ABM/model.jl @@ -16,11 +16,32 @@ function contact_weight(p, contact_time) return 1 - (1-p)^contact_time end -function vac_switch_probability() - return 0.1 +function EN_payoff() + return 0.0 end -function agents_step!(t,u_next,u,population_list,network_list,params,covid_alert_times,app_user_index) +function vac_switch_probability(u, population_list,vac, params,total_infected,soc_nbrs) + @unpack Ï€_base, η, κ, ω, Ï, ω_en,Ï_en,γ,β = params + if vac + soc_nbrs_vac = [0,0,0] + for nbr in soc_nbrs + if u.is_vaccinator[nbr] + soc_nbrs_vac[Int(population_list[nbr])] += 1 + end + end + return Φ(Ï€_base + κ * (sum(soc_nbrs_vac)/length(soc_nbrs)) + dot(Ï,soc_nbrs_vac) + 0,β) + else + soc_nbrs_nonvac = 0 + for nbr in soc_nbrs + if u.is_vaccinator[nbr] + soc_nbrs_nonvac += 1 + end + end + return Φ(κ * soc_nbrs_nonvac/length(soc_nbrs),β) + end +end + +function agents_step!(t,u_next,u,population_list,soc_network,network_list,params,covid_alert_times,app_user_index) @unpack p, recovery_rate, immunization_loss_prob = params u_next.status .= u.status @@ -36,7 +57,7 @@ function agents_step!(t,u_next,u,population_list,network_list,params,covid_alert end for i in 1:length(population_list) - if rand(RNG)<vac_switch_probability() + if rand(RNG)<vac_switch_probability(u, population_list,u.is_vaccinator[i],params,count(==(Infected),u),neighbors(soc_network.g,i)) u_next.is_vaccinator[i] = !u.is_vaccinator[i] end end @@ -120,7 +141,7 @@ function solve!(params,steps,agent_model; record = false) sample_mixing_graph!(network,population_list, contact_time_distribution_matrix) #get new contact weights end #advance agent states based on the new network - agents_step!(t,solution[t+1],solution[t],population_list,network_list,params,covid_alert_times,app_user_index) + agents_step!(t,solution[t+1],solution[t],population_list,home_static_edges,network_list,params,covid_alert_times,app_user_index) end return solution, network_lists end @@ -128,11 +149,22 @@ function get_parameters() params = ( p = 0.05, recovery_rate = 0.1, - vaccines_per_day = 0.0, #percentage of population vaccinated per day - vaccination_start_day = 60, - immunization_loss_prob = 0.01 + immunization_loss_prob = 0.01, + Ï€_base = 0.1, + η = 0.0, + κ = 0.0, + ω = 0.0, + Ï = [0.0,0.0,0.0], + ω_en = 0.0, + Ï_en = 0.0, + γ = 0.0, + β = 0.1 ) return params end +function Φ(payoff,β) + return 1 / (exp(-1*β*payoff)) +end + diff --git a/CovidAlertVaccinationModel/src/data.jl b/CovidAlertVaccinationModel/src/data.jl index 5012b9f..9540d82 100644 --- a/CovidAlertVaccinationModel/src/data.jl +++ b/CovidAlertVaccinationModel/src/data.jl @@ -101,7 +101,7 @@ function load_mixing_matrices() end function load_contact_time_distributions() - dat = deserialize(joinpath(PACKAGE_FOLDER,"data/intervals_model_particle/hh.dat")) + dat = deserialize(joinpath(PACKAGE_FOLDER,"intervals_model_output/simulation_output/hh.dat")) return dat end """ -- GitLab