SCL implements a single timestep by processing each agent list in turn, issuing a step message to each agent on that list. The order in which the different agent lists (or classes) are processed is fixed. Within each agent list, processing is done in the list's ``natural'' order. For those agent classes where agents get dynamically created and dropped (i.e. all classes other than K), the ordering of the corresponding agent list will thus suffer some degree of automatic permutation or shuffling as the simulation proceeds; however, this will be fairly slow.
As a general rule, in this kind of simulation, it would be preferable to randomise the order in which agents are updated on every timestep. This would give a greater assurance that accidental artifacts will not arise due to a particular update order. As can be seen, SCL v0.04 falls somewhat short of this ideal. However, given that there is some randomising of the update order (albeit relatively slow and unsystematic), and, more importantly, that the update order is not systematically correlated with the spatial positions of the agents, it is probably satisfactory. It could be improved by explicitly executing a random permutation on each agent list on each timestep. There is no built-in support for this in the current Swarm libraries; however, it would not be all that difficult to implement, and should have only a moderate effect on performance of the model.
With the wisdom of hindsight (!), SCL could arguably be implemented perfectly satisfactorily on the basis of randomly sampling agents for update (similar to a monte carlo technique), rather than having a guaranteed update of every agent on every (``macro'') timestep. This would eliminate any artifacts of update order. As an added bonus, since there would no longer be a ForEach: method scanning an agent list, some of the agent management problems might also be bypassed.
Copyright © 1997 All Rights Reserved.
Timestamp: Tue Dec 31 19:40:38 GMT 1996