Title: Spatial Dynamical Modeling with TerraME
1Spatial Dynamical Modeling with TerraME
- Tiago Carneiro
- Gilberto Câmara
- Pedro Andrade
Licence Creative Commons ???? By Attribution
???? Non Commercial ???? Share
Alike http//creativecommons.org/licenses/by-nc-sa
/2.5/
2Modelling human-environment interactions
What models are needed to describe human actions?
3Clocks, clouds or ants?
Clouds statistical distributions
Clocks deterministic equations
Ants emerging behaviour
4Dynamic Spatial Models
f (It)
f (It1)
f (It2)
f ( Itn )
F
F
. .
A dynamical spatial model is a computational
representation of a real-world process where a
location on the earths surface changes in
response to variations on external and internal
dynamics on the landscape (Peter Burrough)
5Nature-society modelling with TerraME
Nature Physical equations Describe processes
Society Decisions on how to Use Earths
resources
6Nature-society modelling with TerraME
Nature Cellular space
Society Agents
Nature Physical equations Describe processes
Society Decisions on how to Use Earths
resources
7Modelling collective spatial actions
Space
Agent
Agent Space
Benenson and Torrens, Geographic Automata
Systems, IJGIS, 2005 (but many questions
remain...)
8Computational Modelling with Cell Spaces
9TerraME - overview
Model data in cell spaces
Read/write data from a database
10Cellular Data Base Resolution
11Spatial structure
Large farmer (25 cells)
Small farmer (2 cells)
500 m (all)
12Behavior is non-homogeneous in space and time
13Statistics and agents
ya0 a1x1 a2x2 ... aixi E
Multi-scale modelling
14Tools for observing simulations
15TerraME functionality
16TerraLib spatio-temporal database as a basis for
innovation
G. Câmara et al.TerraLib An open-source GIS
library for large-scale environmental and
socio-economic applications. In B. Hall, M.
Leahy (eds.), Open Source Approaches to Spatial
Data Handling. Berlin, Springer, 2008.
Modelling (TerraME)
Visualization (TerraView)
Spatio-temporal Database (TerraLib)
Data Mining(GeoDMA)
Statistics (aRT)
17TerraME Software Architecture
Model 1
Model 2
Model 3
Model 4
TerraML Language
TerraMLCompiler
TerraML Virtual Machine
TerraLib
18Where is Lua?
- Inside Brazil
- Petrobras, the Brazilian Oil Company
- Embratel (the main telecommunication company in
Brazil) - many other companies
- Outside Brazil
- Lua is used in hundreds of projects, both
commercial and academic - CGILua still in restricted use
- until recently all documentation was in
Portuguese
TerraME Programming Language Extension of Lua
Lua is the language of choice for computer games
Ierusalimschy et al, 1996
source the Lua team
19Lua
- Roberto Ierusalimschy
- PUC-Rio, Brazil
20What is Lua?
- Yet Another Scripting Language
- an extension language
- implemented as a library in ANSI C
21Why Lua?
- Simple and flexible
- Simple things simple, complex things possible
- Small, Efficient, Portable
- Whole library written in ANSI C, compiles the
same source code in all platforms - Typical uses MS-DOS, Windows (3.1, 95, NT), Unix
(Linux, Solaris, IRIX, AIX, ULTRIX), Next, OS/2,
Mac
22How is Lua?
function fat (n) if n 0 then return 1
else return nfat(n-1) end end
- Pascal-like Syntax.
- Interpreter executes sequence of statements.
- function definitions are also statements (see
later) - Six types numbers, tables, functions, strings,
userdata, nil
23Variables and Values
- Case sensitive
- semicolon may optionally follow any statement
- a 1
- b a2
- print(a)
- print(b)
24Comments
- double hyphen (--) until the end of the line.
- block comments start with -- and run until
- print("hello") -- my comment
- -- print("hello)
- --
- print(10) -- no action (comment)
- --
25My first Lua program
- C 2 -- rain/t
- K 0.4 -- flow coefficient
- q 0
- -- RULES
- for time 0, 20, 1 do
- -- soil water
- q q C - Kq
- end
- print(q "..q)
26Types
27Type nil
- Different from everything else
- Default variable type
- Also acts as false (boolean)
28Type boolean
- Comparison value
- if (rain true) then ....
29boolean
- false/true
- nil and false are false, everything else is true
- zero and the empty string are true
- operators and, or, and not
- print(true and false)
- print(true and (false or true))
- print(false or (true and false) or (true and
true))
30number
- the only type for numeric values
- double-precision floating-point number
- arithmetic operators , , , /
- exponent () and modulus ()
- boolean operators (lt, gt, lt, gt, , and )
- A 6 2.2 4e3
- a A 2
- b A 7
- print(a gt b)
- print(b 2)
31Parentheses
- Always optional (except in the case of function
call) - When in doubt, use parentheses
- a-i lt b/21 lt--gt (a (-i)) lt ((b/2)1)
- 5x28 lt--gt 5 ( (x2)8 )
- a lt y and y lt z lt--gt (a lt y) and (y lt z)
- xyz lt--gt (x(yz))
32Type string
- Immutable
- No size limit (read large files as strings)
- No termination value (\0)
- Powerful Pattern-matching in standard library
- myname Werner Kuhn
33if statement
- An if statement tests condition and executes its
then-part or its else-part (optional) accordingly - a 6 b 5
- if a lt b then
- print("a lt b")
- elseif a lt b 5 then
- print("b lt a lt b5")
- else
- print("a gt b5")
- end
34for statement
- for var exp1, exp2, exp3 do
- something
- end
- Execute something for each value of var from exp1
to exp2, using exp3 as the step to increment var.
This third expression is optional (default is 1). - for i 1, 10 do
- print(i)
- end
- for i 1, 10, 2 do
- print(i)
- end
35Tables
- Implement associative arrays
- any value (including functions and other tables)
can be used both for indices and values
t -- creates an empty table t1
"hello" t.x print -- t.x is sugar for
tx t.x(t1) -- prints hello t.next
t -- circular list
36table
- Tables can be indexed not only with numbers, but
also with strings or any other value of the
language, except nil - loc
- cover "forest",
- distRoad 0.3,
- distUrban 2
-
- print(loc"cover")
- print(loc.cover)
- loc.distRoad loc.distRoad2
- loc.distTotal loc.distRoad loc.distUrban
- loc.deforestationPot 1/loc.distTotal
37Tables within tables
- loc cover "forest",
- dist road 0.3, urban 2
-
- print(loc.dist.road)
- loc.dist.total loc.dist.road loc.dist.urban
- print(loc.dist.total)
38Constructors Create and init tables
- Record style
- pointx10,y20
- print(point.y) --gt 20
- List style
- days"Sun","Mon","Tue","Wed, Sat"
- print(days3) --gt Tue
- Mixed style
- pointsx0,y0, point, n2
- print(pointspoints.n.y) --gt 20
39Constructors
calls function article
article author"F.P.Brooks", title"The
Mythical Man-Month", year1975,
news text "New version 2.0", date
"21/05/1997", text "New example", date
"21/05/1997", text "New version
2.1",date "17/06/1997",
40function
- A function can carry out a specific task
(commonly called procedure) or compute and return
values. - A function is a first-class value in Lua.
- Functions can be stored in variables and in
tables, can be passed as arguments, and can be
returned by other functions, giving great
flexibility to the language. - myprint print
- print nil
- myprint(2)
- print myprint
41Functions in Lua
- function fat (n)
- if n 0 then
- return 1
- else
- return nfat(n-1)
- end
- end
42Higher-order Functions
- Functions can also be parameters to other
functions. This kind of function is what we call
a higher-order function. - ??function foreach(tab, func)
- for position, value in pairs(tab) do
- func(value, position)
- end
- end
- x 7, 3, 2, 6, 4
- foreach(x, function(element)
- print(element)
- end)
- foreach(x, function(value, position)
- print(position, value)
- end)
43Functions in Lua
- Example cloning a table t
clone foreach(t, function (i,e)
cloneie end)
44Functions and Tables
w redraw function () ... end, pick
function (x,y) ... end,
if w.pick(x,y) then w.redraw() end
45Tables with functions
- Tables may have their own functions.
- loc
- cover "forest",
- distRoad 0.3,
- distUrban 2,
- deforestPot function(myloc)
- return 1/(myloc.distRoad myloc.distUrban)
- end
-
- print(loc.deforestPot(loc))
- print(locdeforestPot())
46Tables with functions
- We can declare a class in Lua by creating a
function that takes a table constructor as
argument. - function MyLocation(locdata)
- locdata.covertype "forest"
- locdata.deforPot function(self)
- return 1/(self.distRoad self.distUrban)
- end
- return locdata
- end
- loc MyLocation(distRoad 0.3, distUrban 2)
- loc MyLocationdistRoad 0.3, distUrban 2
- print(loc.covertype)
- print(locdeforPot())
47Tables x Objects
- Tables are dynamically created objects.
list
old list ...
48Objects
- First-class functions tables almost OO
- Tables can have functions as fields
- Sugar for method definition and call
- Implicit parameter self
49My second Lua program
- C 2 -- rain/t
- K 0.4 -- flow coefficient
- q 0 --
- function rain (t)
- if (t lt 10) then
- return 4 4math.cos(math.pit/10)
- else
- return 4 4math.cos(math.pi(t-10)/10)
- end
- end
- --
- for time 0, 20, 1 do
- -- soil water
- q q rain(time) - Kq
- end
- -- report
- print(q "..q)
50Standard libraries
- Basic
- String
- Table
- Math
- IO
- OS
- Debug
- Coroutine
51TerraME Vision
- Nature represented by a cellular space
- Society represented by agents
- Several interacting entities share the same
spatiotemporal structure.
52rain
rain
rain
Itacolomi do Itambé Peak
Lobos Range
My third Lua program Define a two-dimensional
grid Make it rain on the grid Let water flow
downwards
N
53TerraME Runtime Environment
54TerraME allows nested scales
55Nested scales are necessary for human-environment
models
Diverse space partitions can have different
scales
56Cellular Space
- A geographical area of interest, divided into a
grid. - Each cell in the grid has one or more attributes.
- Stored and retrieved from a TerraLib database
57Loading Data
- -- Loads the TerraLib cellular space
- csCabecaDeBoi CellularSpace
-
- dbType "ADO",
- host localhost",
- database "c\\cabecaDeBoi.mdb",
- user "",
- password "",
- layer "cellsLobo90x90",
- theme "cells",
- select height", soilWater", capInf"
-
- csCabecaDeBoiload()
- csCabecaDeBoiloadMooreNeighbourhood
58Creating temporary cellular spaces
- game CellularSpace
- xdim N,
- ydim N
-
59Referencing cells
- A CellularSpace has a special attribute called
cells. It is a one-dimensional table of
references for each Cell in the CellularSpace - -- c is the seventh cell in the cellular space
- c csCabecaDeBoi.cells 7
- -- Updating the attribute infcap from the
seventh cell - c.infcap 10
- print (csCabecaDeBoi.cells7.infCap)
60Database management
- -- loads a cellular space
- csAmazoniaload()
- csAmazonialoadNeighbourhood("Moore")
- -- save (time, themeName, attrTableName) --
- for time 1, 10,1 do
- csAmazoniasave(time, sim", "water")
- end
61The Cell type
- A Cell value has two special attributes latency
and past. - The latency attribute registers the period of
time since the last change in a cell attribute
value. - The past attribute is a copy of all cell
attribute values in the instant of the last
change. - if(cell.cover "abandon" and cell.latency gt
10) then cell.cover "secFor" - end
- cell.water cell.past.water 2
62Traversing a Cell Space
- forEachCell(cs, function())
- Applies the chosen function to each cell of the
cellular space. This function enables using
different rules in a cellular space. - forEachCell(csQ,
- function(cell)
- cell.Water cell.past.Water 2
- return true
- end
- )
63Isotropic neighbourhoods in cell spaces
Von Neumann Neighborhood
Moore Neighborhood
64Traversing a Neighbourhood
- csqloadNeighbourhood(Moore)
- forEachCell(csQ,
- function(cell)
- count 0
- forEachNeighbour(cell, 0,
- function(cell, neigh)
- if (neigh.past.value 1 and
- neigh cell) then
- count count 1
- end
- end
- ) -- for each neighbor
65Synchronizing a cell space
rule
count 0
for i, cell ipairs( csValeDoAnary ) do end
if ( cell.past.sim_cover 1 ) then
cell.sim_cover 0 count count 1
end cell.synchronize( )
?
print(Number of deforested cells .. count)
66Synchronizing a cell space
rule
TerraME keeps two copies of a cellular space in
memory one stores the past values of the cell
attributes, and another stores the current
(present) values of the cell attributes. The
model equations must read (the right side of the
equation rules) the past copy, and must write
(the left side of the equation rules) the values
to the present copy of the cellular space. At
the correct moment, it will be necessary to
synchronize the two copies of the cellular space,
copying the current attribute values to the past
copy of the cellular space
67Synchronization
- Always read from the past
- Always write to the present
- .
- csQsyncronize()
-
68Trajectories spatial patterns of change
- modeller defined functions which map indexes
(atributtes) to geo-objects (cells).
it Trajectory myCellSpace,
function(cell) return cell.cover
"forest end, function( c1, c2
) return c1.dist_roads lt c2.dist_roads
end
69Which objects are nearest to each other?
70Using Generalized Proximity Matrices (GPM)
Consolidated area
Emergent area
71TerraME neighborhoods are graphs
Euclidean space
Open network
Closed network
Aguiar et al., 2003
72Create or load neighborhoods
- -- Create a Moore neighborhood
- createMooreNeighborhood( myCellSpace, neighName
) - -- Create a 3x3 neighborhood
- create3x3Neighborhood(myCellSpace, filterF() ,
weightF(), name ) - -- Create a MxN neighborhood
- createMxNNeighborhood( M, N, myCellSpace,filterF()
, weightF(), name ) - -- Load neighborhood from TerraLib database
- myCellSpace loadTerraLibGPM(myGPM")
- -- Load neighborhood from TerraLib GAL files
- myCellSpaceloadGALNeighborhood("c\\myNeigh.gal")
73Building neighborhoods between cell spaces
- spatialCoupling( M, N, cs1,cs2, filterF, weightF,
name ) - filterF(cell, neigh) ? Boolean
- wheighF(cell, neigh) ? Real
74Example neighborhood to simulate rain
- -- Creates a 3x3 Neighborhood based on the cell
"slope" - -- only lower neighbors are considered
- create3x3Neighborhood(
- csQ,
- function(cell,neigh)
- return neigh.altimetry lt cell.altimetry
- end,
- function(cell, neigh)
- return (cell.altimetry - neigh.altimetry)/
- (cell.altimetry neigh.altimetry)
- end,
- "slope"
- )
75TerraME integration with GIS (TerraView)
76Conversion from GIS data to cell spaces
Real world
Vector geospatial data
Cell space
77The mixed pixel problem
How can you transform from vectors to cell
attributes?
78Fill the attributes of the cell spaces
For each data type to be transformed, there are
appropriate operations
79Using FillCell plugin to build Cell Spaces
- 1. Install the FillCell plugin Copy the file
"celulas.dll" to the directory - "C \ Program Files \ TerraView3.2.0
\ plugins". - 2. Build the cell space with the desired
resolution
80Filling Cells from vector data
Numerical areas (polygons, cells) Categorical areas (polygons, cells) Lines and points
Min, max, average, sum, standard dev ?
Majority class (by number or by area) ?
Percentage of each class, Percentage of majority class, area of majority class ?
Average/Sum intersection-weighted ?
Presence, minimum distance, count ?
81rain
rain
rain
Itacolomi do Itambé Peak
Lobos Range
N
82Picture direction
Itacolomido Itambé Peak
Lobos Range
83Demo Rain Drainage Model
- Database c\\TerraME\\Database\\CabecadeBoi.mdb
- Model c\\TerraME\\Modelos\\demo4_chuva_geoBD.lua
- Model c\\TerraME\\Modelos\\demo7_chuva_geoBD.lua
84Simulation Result (36 min.)
85Demo Fire propagation
- Database c\\TerraME\\Database\\db_emas.mdb
- Model c\\TerraME\\Modelos\\demo6_FireSpreadModel
.lua
CA 1 CA 2 CA 3 CA 4 CA 5
CA 1 0.100 0.250 0.261 0.273 0.285
CA 2 0.113 0.253 0.264 0.276 0.288
CA 3 0.116 0.256 0.267 0.279 0.291
CA 4 0.119 0.259 0.270 0.282 0.294
CA 5 0.122 0.262 0.273 0.285 0.297
86Demo Amazon deforestation
- Database c\\TerraME\\Database\\amazonia.mdb
- Model c\\TerraME\\Modelos\\demo3_desflorestament
o_save.lua
87References
- Carneiro, T., 2006. Nested-CA a foundation for
multiscale modeling of land use and land change.,
in PhD Thesis in Computer Science. National
Institute of Space Research São José dos Campos,
Brazil. - Carneiro, T. Câmara, G., 2007. A Gentle
Introduction to TerraME. INPE Report, 2007. - Ierusalimschy, R. 2006. Programming in Lua (2nd
edition). Rio de Janeiro, Lua.Org.