Spatio Agent-Based Simulation with Julia

Domentration: Catched Fire in forest

  • green(1): unburnt trees,
  • red(2) : burning trees,
  • darkred(3) : burnt tree.

Load Packages

using Agents, Random
using InteractiveDynamics
using CairoMakie

@agent Automata GridAgent{2} begin end

Set Parameter

  • Empty = 0,
  • Green = 1,
  • Burning = 2,
  • Burnt = 3,
  • Set fire from the center lines randomly
gridlength_x = 200
gridlength_y = 100
function forest_fire(; density = 0.7, griddims = (gridlength_x , gridlength_y ))
    space = GridSpace(griddims; periodic = false, metric = :euclidean)
    forest = ABM(Automata, space; properties = (trees = zeros(Int, griddims),))
    for I in CartesianIndices(forest.trees)
        if rand(forest.rng) < density
            forest.trees[I] = I[1] == 1 ? 2 : 1
        end
    end
    return forest
end
forest = forest_fire()

Define Rules catching Fire

  • Find trees that are burning (coded as red(2))
  • If a neighbor is Green(coded as green(1)), set it on fire (coded as red(2))
  • any burning tree (coded as red(2)) is burnt out (coded as darkred(3))
function tree_step!(forest)
    for I in findall(isequal(2), forest.trees)
        for idx in nearby_positions(I.I, forest)
            if forest.trees[idx...] == 1
                forest.trees[idx...] = 2
            end
        forest.trees[I] = 3
    end
end

Running the model

stepnumber = 10 
Agents.step!(forest, dummystep, tree_step!, stepnumber)
count(t == 3 for t in forest.trees)