fixed updating model parameters with GLMakie
parent
2906c96aa4
commit
5b6891bdd8
|
@ -5,6 +5,7 @@ using Agents, Random, GLMakie
|
||||||
Predation
|
Predation
|
||||||
end
|
end
|
||||||
mutable struct AnimalDefinition
|
mutable struct AnimalDefinition
|
||||||
|
n::Int32
|
||||||
symbol::Char
|
symbol::Char
|
||||||
color::GLMakie.ColorTypes.RGBA{Float32}
|
color::GLMakie.ColorTypes.RGBA{Float32}
|
||||||
energy_threshold::Float64
|
energy_threshold::Float64
|
||||||
|
@ -19,10 +20,6 @@ reproduction_prop(a) = abmproperties(model)[Symbol(a.def.type*"_"*"reproduction_
|
||||||
Δenergy(a) = abmproperties(model)[Symbol(a.def.type*"_"*"Δenergy")]
|
Δenergy(a) = abmproperties(model)[Symbol(a.def.type*"_"*"Δenergy")]
|
||||||
perception(a) = abmproperties(model)[Symbol(a.def.type*"_"*"perception")]
|
perception(a) = abmproperties(model)[Symbol(a.def.type*"_"*"perception")]
|
||||||
energy_threshold(a) = abmproperties(model)[Symbol(a.def.type*"_"*"energy_threshold")]
|
energy_threshold(a) = abmproperties(model)[Symbol(a.def.type*"_"*"energy_threshold")]
|
||||||
struct StartDefinition
|
|
||||||
n::Int32
|
|
||||||
def::AnimalDefinition
|
|
||||||
end
|
|
||||||
#might be better to use @multiagent and @subagent with predator prey as subtypes. Allows to dispatch different functions per kind and change execution order with schedulers.bykind
|
#might be better to use @multiagent and @subagent with predator prey as subtypes. Allows to dispatch different functions per kind and change execution order with schedulers.bykind
|
||||||
@agent struct Animal(GridAgent{2})
|
@agent struct Animal(GridAgent{2})
|
||||||
energy::Float64
|
energy::Float64
|
||||||
|
@ -178,19 +175,13 @@ end
|
||||||
|
|
||||||
function initialize_model(;
|
function initialize_model(;
|
||||||
events = [],
|
events = [],
|
||||||
start_defs = [
|
animal_defs = [
|
||||||
StartDefinition(100,AnimalDefinition('●',RGBAf(1.0, 1.0, 1.0, 0.8),20, 0.3, 6, 1, "Sheep", ["Wolf"], ["Grass"])),
|
AnimalDefinition(100,'●',RGBAf(1.0, 1.0, 1.0, 0.8),20, 0.3, 6, 1, "Sheep", ["Wolf"], ["Grass"]),
|
||||||
StartDefinition(20,AnimalDefinition('▲',RGBAf(0.2, 0.2, 0.3, 0.8),20, 0.07, 20, 1, "Wolf", [], ["Sheep"]))
|
AnimalDefinition(20,'▲',RGBAf(0.2, 0.2, 0.3, 0.8),20, 0.07, 20, 1, "Wolf", [], ["Sheep"])
|
||||||
],
|
],
|
||||||
dims = (20, 20),
|
dims = (20, 20),
|
||||||
regrowth_time = 30,
|
regrowth_time = 30,
|
||||||
Δenergy_sheep = 4,
|
|
||||||
Δenergy_wolf = 20,
|
|
||||||
Δenergy_grass = 5,
|
Δenergy_grass = 5,
|
||||||
sheep_reproduce = 0.04,
|
|
||||||
wolf_reproduce = 0.05,
|
|
||||||
sheep_perception = 0,
|
|
||||||
wolf_perception = 0,
|
|
||||||
seed = 23182,
|
seed = 23182,
|
||||||
)
|
)
|
||||||
rng = MersenneTwister(seed)
|
rng = MersenneTwister(seed)
|
||||||
|
@ -199,11 +190,6 @@ function initialize_model(;
|
||||||
## and the time to regrow. Also have static parameter `regrowth_time`.
|
## and the time to regrow. Also have static parameter `regrowth_time`.
|
||||||
## Notice how the properties are a `NamedTuple` to ensure type stability.
|
## Notice how the properties are a `NamedTuple` to ensure type stability.
|
||||||
## define as dictionary(mutable) instead of tuples(immutable) as per https://github.com/JuliaDynamics/Agents.jl/issues/727
|
## define as dictionary(mutable) instead of tuples(immutable) as per https://github.com/JuliaDynamics/Agents.jl/issues/727
|
||||||
## maybe instead of AnimalDefinition we build the properties dict dynamically and use model properties during the simulation
|
|
||||||
animal_defs = Vector{AnimalDefinition}()
|
|
||||||
for start_def in start_defs
|
|
||||||
push!(animal_defs,start_def.def)
|
|
||||||
end
|
|
||||||
animal_properties = generate_animal_parameters(animal_defs)
|
animal_properties = generate_animal_parameters(animal_defs)
|
||||||
model_properties = Dict(
|
model_properties = Dict(
|
||||||
:events => events,
|
:events => events,
|
||||||
|
@ -217,10 +203,10 @@ function initialize_model(;
|
||||||
agent_step! = animal_step!, model_step! = model_step!,
|
agent_step! = animal_step!, model_step! = model_step!,
|
||||||
properties, rng, scheduler = Schedulers.Randomly(), warn = false, agents_first = false
|
properties, rng, scheduler = Schedulers.Randomly(), warn = false, agents_first = false
|
||||||
)
|
)
|
||||||
for start_def in start_defs
|
for def in animal_defs
|
||||||
for _ in 1:start_def.n
|
for _ in 1:def.n
|
||||||
energy = rand(abmrng(model), 1:(start_def.def.Δenergy*2)) - 1
|
energy = rand(abmrng(model), 1:(def.Δenergy*2)) - 1
|
||||||
add_agent!(Animal, model, energy, start_def.def, nothing, [], [], [], [])
|
add_agent!(Animal, model, energy, def, nothing, [], [], [], [])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
## Add grass with random initial growth
|
## Add grass with random initial growth
|
||||||
|
|
|
@ -60,7 +60,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 17,
|
"execution_count": 8,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
|
@ -71,20 +71,18 @@
|
||||||
"events = RecurringEvent[]\n",
|
"events = RecurringEvent[]\n",
|
||||||
"#push!(events, RecurringEvent(\"Drought\", 80, 30, 30, 50, 120, 1))\n",
|
"#push!(events, RecurringEvent(\"Drought\", 80, 30, 30, 50, 120, 1))\n",
|
||||||
"#push!(events, RecurringEvent(\"Flood\", 50, 30, 70, 80, 120, 1))\n",
|
"#push!(events, RecurringEvent(\"Flood\", 50, 30, 70, 80, 120, 1))\n",
|
||||||
"push!(events, RecurringEvent(\"PreyReproduceSeasonal\", 0.5, 0.1, 1, 4, 12, 1))\n",
|
"#push!(events, RecurringEvent(\"PreyReproduceSeasonal\", 0.5, 0.1, 1, 4, 12, 1))\n",
|
||||||
"push!(events, RecurringEvent(\"PredatorReproduceSeasonal\", 0.1, 0.07, 4, 6, 12, 1))\n",
|
"#push!(events, RecurringEvent(\"PredatorReproduceSeasonal\", 0.1, 0.07, 4, 6, 12, 1))\n",
|
||||||
"sheep_def = AnimalDefinition('●',RGBAf(1.0, 1.0, 1.0, 0.8),20, 0.3, 20, 3, \"Sheep\", [\"Wolf\",\"Bear\"], [\"Grass\"])\n",
|
"animal_defs = [\n",
|
||||||
"wolf_def = AnimalDefinition('▲',RGBAf(0.2, 0.2, 0.3, 0.8),20, 0.07, 20, 1, \"Wolf\", [], [\"Sheep\"])\n",
|
"AnimalDefinition(30,'●',RGBAf(1.0, 1.0, 1.0, 0.8),20, 0.3, 20, 3, \"Sheep\", [\"Wolf\",\"Bear\"], [\"Grass\"])\n",
|
||||||
"bear_def = AnimalDefinition('■',RGBAf(1.0, 0.8, 0.5, 0.8),20, 0.07, 20, 1, \"Bear\", [], [\"Sheep\"])\n",
|
"AnimalDefinition(3,'▲',RGBAf(0.2, 0.2, 0.3, 0.8),20, 0.07, 20, 1, \"Wolf\", [], [\"Sheep\"])\n",
|
||||||
"parameter_ranges = generate_animal_parameter_ranges([sheep_def,wolf_def,bear_def])\n",
|
"#AnimalDefinition('■',RGBAf(1.0, 0.8, 0.5, 0.8),20, 0.07, 20, 1, \"Bear\", [], [\"Sheep\"])\n",
|
||||||
|
"]\n",
|
||||||
|
"parameter_ranges = generate_animal_parameter_ranges(animal_defs)\n",
|
||||||
"\n",
|
"\n",
|
||||||
"stable_params = (;\n",
|
"stable_params = (;\n",
|
||||||
" events = events,\n",
|
" events = events,\n",
|
||||||
" start_defs = [\n",
|
" animal_defs = animal_defs,\n",
|
||||||
" StartDefinition(30,sheep_def),\n",
|
|
||||||
" StartDefinition(3,wolf_def),\n",
|
|
||||||
" #StartDefinition(3,bear_def)\n",
|
|
||||||
" ],\n",
|
|
||||||
" dims = (30, 30),\n",
|
" dims = (30, 30),\n",
|
||||||
" regrowth_time = 30,\n",
|
" regrowth_time = 30,\n",
|
||||||
" Δenergy_grass = 6,\n",
|
" Δenergy_grass = 6,\n",
|
||||||
|
|
Loading…
Reference in New Issue