Jump to content

The IBM model: Difference between revisions

From SELESwiki
No edit summary
No edit summary
 
Line 25: Line 25:
   Producer.lse DEBUG
   Producer.lse DEBUG
   Consumer.lse DEBUG
   Consumer.lse DEBUG
  Spatial Variables:
  Spatial Variables:
   LSState[3]
   LSState[3]
  Legends:
  Legends:
   LSStateTypes = {0:Uncolonised, 1:Producer, 2:Consumer}
   LSStateTypes = {0:Uncolonised, 1:Producer, 2:Consumer}
  Global Variables:
  Global Variables:
   pInitialProducer = 0.01
   pInitialProducer = 0.01
Line 40: Line 37:
   pDeathConsumer = 0.05
   pDeathConsumer = 0.05
  Output Frequency: 1
  Output Frequency: 1


===consumer.lse===
===consumer.lse===
Line 63: Line 59:
   // Decide if this cell survives
   // Decide if this cell survives
   Dies = UNIFORM(0,1) < pDeathConsumer
   Dies = UNIFORM(0,1) < pDeathConsumer
   // If the consumer is dying
   // If the consumer is dying
   IF Dies
   IF Dies
Line 88: Line 83:
       n = n + (UNIFORM(0,1) < pSpreadConsumer)
       n = n + (UNIFORM(0,1) < pSpreadConsumer)
   ENDFN
   ENDFN
   NUMOFFSPRING = n
   NUMOFFSPRING = n
   isSedentary = FALSE
   isSedentary = FALSE

Latest revision as of 21:15, 15 November 2006

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: isSedentary
ENDDEF
// Just immigrate once
IMMIGRATIONTIME = 0
NUMAGENTS = NUMCELLS * pInitialConsumer
// Initialize in an empty cell
PROBINIT
  PROBINIT = LSState EQ Uncolonised
  LSState = Consumer
  isSedentary = 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 isSedentary THEN 0 ELSE 1
  REGION CENTRED(d, d, WRAPPED)
ENDML
MOVEPROB
  // Parent stays in place and offspring must move to producer neighbour
 MOVEPROB = IF isSedentary THEN 1
            ELSE LSState EQ Producer
 isSedentary = 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
  isSedentary = 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: isSedentary
ENDDEF
// Just immigrate once
IMMIGRATIONTIME = 0
NUMAGENTS = NUMCELLS * pInitialProducer 
// Initialize in an empty cell
PROBINIT
  PROBINIT = LSState EQ Uncolonised
  LSState = Producer
  isSedentary = 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 isSedentary THEN 0 ELSE 1
  REGION CENTRED(d, d, WRAPPED)
ENDML
MOVEPROB
  // Parent stays in place and offspring must move to unoccupied neighbour
 MOVEPROB = IF isSedentary THEN 1
            ELSE LSState EQ Uncolonised
 isSedentary = 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
  isSedentary = FALSE
ENDNO

Suggested Experiments

To explore this cellular automata model further, try the following: