discrete time scheduler
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
an example of how discrete time simulation would work using a turtle breed as events and using the task operator
HOW IT WORKS
the breed [events event] keeps track of the who-when-what of each action each action can result in a next action, then a new event should be initiated
put the speed to slow to see what is happening.
THINGS TO NOTICE
the rabbits are just in here to proof the concept. so is the pause switch
THINGS TO TRY
see if you can make a different breed (say sheep) move through
EXTENDING THE MODEL
there is a difficulty with calling observer context actions in trutle context e.g. tick ask patches []
would be good to be able to use ticks for some parts (e.g. plotting or something) while using the event-scheduling for other parts.
NETLOGO FEATURES
there is the use of taks to define the what. this has the advantage that a turtle can have multiple actions scheduled. it has the disadvantage that is a turlte dies, there can still be events scheduled for it.
it also has the disadvantage that if the context of a turtle changes, this might not be reflected in the next action taken.
so one should be clear that actions affecting eachother in the timeline, should be placed in the scheduler one-after-another, while actions not-affecting eachother in the timeline, can be place in the scheudle simultaneously.
CREDITS AND REFERENCES
geerten.hengeveld@wur.nl with thanks to James Steiner for the suggestion on tasks
Comments and Questions
globals [current_time Rabbit_hunger_time Rabbit_fear_time ]
breed [events event]
breed [rabbits rabbit]
events-own [
event_time
event_target
event_task] ;#Thanks @James, this is indeed a smart thing. now a turtle can schedule multiple future activities, independent of each othter
; eventscheduler
to event_initiate [I_time I_target I_task] ;define the when-who-what of the vent
set hidden? true
set event_time current_time + I_time
set event_target I_target
set event_task I_task
end
to event_do_event ;the execution of an event
set current_time event_time ;adjust the global time to the time at which this event takes place
ask event_target [run [event_task] of myself] ;make the event happen
die ;remove this event from the world
end
to go ;the event scheduler, take the first event and execute it
while [any? events]
[
if(PAUSE = true)[stop] ;this is to stop the while=loop.
ask min-one-of events [event_time][event_do_event] ;the core of the scheduler
]
end
;//##rabbit activity procedures## just some funny procedures
to setup
ca
set Rabbit_hunger_time 3
set Rabbit_fear_time 20
create-rabbits 25 ;create 25 rabbits, call all the activities to put them on the events list... might probably be smarter
[rabbit_eat
rabbit_lookout
rabbit_hop
]
end
to rabbit_eat
set shape "rabbit_eat"
hatch-events 1 [ event_initiate random-float rabbit_hunger_time myself task rabbit_eat]
end
to rabbit_lookout
set shape "rabbit_lookout"
hatch-events 1 [ event_initiate random-float Rabbit_fear_time myself task rabbit_lookout]
end
to rabbit_hop
set shape "rabbit_hop"
set heading random 360
fd 1
hatch-events 1 [event_initiate 1 myself task rabbit_hop]
end
There is only one version of this model, created almost 11 years ago by Geerten Hengeveld.
Attached files
No files
This model does not have any ancestors.
This model does not have any descendants.
Download this model