--- A Model to simulate fire in the forest. -- @arg data.finalTime A number with the final simulation time. -- @arg data.dim A number with the x and y size of space. -- @arg data.empty The percentage of empty cells in the beginning of the -- simulation. It must be a value between 0 and 1, with default 0.1. -- @image fire.bmp Fire = Model{ finalTime = 100, empty = Choice{min = 0, max = 1, default = 0.1}, dim = 60, random = true, init = function(model) model.cell = Cell{ init = function(cell) if Random():number() > model.empty then cell.state = "forest" else cell.state = "empty" end end, execute = function(cell) if cell.past.state == "burning" then cell.state = "burned" elseif cell.past.state == "forest" then local burning = countNeighbors(cell, "burning") if burning > 0 then cell.state = "burning" end end end } model.cs = CellularSpace{ xdim = model.dim, instance = model.cell } model.cs:sample().state = "burning" model.cs:createNeighborhood{strategy = "vonneumann"} model.chart = Chart{ target = model.cs, select = "state", value = {"forest", "burning", "burned"}, color = {"green", "red", "brown"} } model.map = Map{ target = model.cs, select = "state", value = {"forest", "burning", "burned", "empty"}, color = {"green", "red", "brown", "white"} } model.timer = Timer{ Event{action = model.cs}, Event{action = model.chart}, Event{action = model.map} } end }