The IBM2 model
Appearance
Summary
Screenshot
Download Model
Download the .scn, .sel and .lse files by clicking on the following link: File:ProducerConsumer.zip
Model Code Exploration
In the following sections we will examine all of the model files for this model. Note that instead of downloading the zip file above, you could just copy the text in the boxes below into a text editor and save it with the appropriate name (Section title). Opening the resulting .scn file in the SELES simulator would run this model.
Consume.scn
Seles Scenario Model.sel SimPriority Low Priority
Model.sel
Seles Model
Time Units: Step kiloStep 1000 1000
Landscape Events:
Producer.lse DEBUG
Consumer.lse DEBUG
Spatial Variables:
LSState[3]
Legends:
LSStateTypes = {0:Uncolonised, 1:Producer, 2:Consumer}
Global Variables:
pInitialProducer = 0.01
pInitialConsumer = 0.01
pSpreadProducer = 0.1
pSpreadConsumer = 0.2
pDeathProducer = 0.01
pDeathConsumer = 0.05
Output Frequency: 1
consumer.lse
// Process based definition for consumber behaviour in producer/consumer model
LSAGENT: Consumer
DEFINITIONS
LAYER: LSState
GLOBAL CONSTANT: Uncolonised, Producer, Consumer
GLOBAL VARIABLE: pInitialConsumer, pSpreadConsumer, pDeathConsumer //, SpreadRateConsumer
AGENT VARIABLE: isParent
ENDDEF
// Just immigrate once
IMMIGRATIONTIME = 0
NUMAGENTS = NUMCELLS * pInitialConsumer
// Initialize in an empty cell
PROBINIT
PROBINIT = LSState EQ Uncolonised
LSState = Consumer
isParent = TRUE
ENDPI
TRANSITIONS
// Decide if this cell survives
Dies = UNIFORM(0,1) < pDeathConsumer
// If the consumer is dying
IF Dies
LSState = Uncolonised
ENDFN
TRANSITIONS = !Dies
ENDTR
POPULATIONTIME = 1
MOVELOCATION
d = IF isParent THEN 0 ELSE 1
REGION CENTRED(d, 1, WRAPPED)
ENDML
MOVEPROB
// Parent can stay, move to an unoccupied neigbhour or move to a producer
// Children must move onto a producer
MOVEPROB = IF isParent THEN (Location EQ SOURCE Location) OR (LSState NEQ Consumer)
ELSE LSState EQ Producer
IF isParent
SOURCE LSState = Uncolonised
ENDFN
isParent = TRUE
LSState = Consumer
ENDMP
NUMOFFSPRING
n = 0
OVER REGION CENTRED(1,1,WRAPPED)
DECISION LSState EQ Uncolonised
n = n + (UNIFORM(0,1) < pSpreadConsumer)
ENDFN
NUMOFFSPRING = n
isParent = FALSE
ENDNO
producer.lse
// Agent based definiton of producer behaviour in producer/consumer model
LSAGENT: Producer
DEFINITIONS
LAYER: LSState
GLOBAL CONSTANT: Uncolonised, Producer, Consumer
GLOBAL VARIABLE: pInitialProducer, pSpreadProducer, pDeathProducer
AGENT VARIABLE: isParent
ENDDEF
// Just immigrate once
IMMIGRATIONTIME = 0
NUMAGENTS = NUMCELLS * pInitialProducer
// Initialize in an empty cell
PROBINIT
PROBINIT = LSState EQ Uncolonised
LSState = Producer
isParent = TRUE
ENDPI
TRANSITIONS
// Decide if this cell survives
Dies = (UNIFORM(0,1) < pDeathProducer) OR (LSState NEQ Producer)
// If the producer is dying
IF Dies
LSState = Uncolonised
ENDFN
TRANSITIONS = (!Dies)
ENDTR
POPULATIONTIME = 1
MOVELOCATION
d = IF isParent THEN 0 ELSE 1
REGION CENTRED(d, 1, WRAPPED)
ENDML
MOVEPROB
// Parent can stay or move to an unoccupied neighbour
// Children must move onto an unnoccupied neighbour
MOVEPROB = (Location EQ SOURCE Location) OR (LSState EQ Uncolonised)
IF isParent
SOURCE LSState = Uncolonised
ENDFN
isParent = TRUE
LSState = Producer
ENDMP
NUMOFFSPRING
n = 0
OVER REGION CENTRED(1,1,WRAPPED)
DECISION LSState EQ Uncolonised
n = n + (UNIFORM(0,1) < pSpreadProducer)
ENDFN
NUMOFFSPRING = n
isParent = FALSE
ENDNO
Suggested Experiments
To explore this cellular automata model further, try the following:
