SOFTWARE ENGINEERING CONSIDERATIONS FOR INDIVIDUAL-BASED MODELS

Software design is much more important for individual-based models (IBMs) than it is for conventional models,for three reasons. First,the results of an IBM are the emergent properties of a system of interacting agents that exist only in the software; unlike analytical model results,an IBMs outcomes can be reproduced only by exactly reproduc- ing its software implementation. Second,outcomes of an IBM are expected to be complex and novel,making software er- rors difficult to identify. Third,an IBM needs 'systems soft- ware' that manages populations of multiple kinds of agents, often has nonlinear and multi-threaded process control and simulates a wide range of physical and biological processes. General software guidelines for complex models are especially important for IBMs. (1) Have code critically reviewed by several people. (2) Follow prudent release management prac- tices,keeping careful control over the software as changes are implemented. (3) Develop multiple representations of the model and its software; diagrams and written descriptions of code aid design and understanding. (4) Use appropriate and widespread software tools which provide numerous major ben- efits; coding 'from scratch' is rarely appropriate. (5) Test the software continually,following a planned,multi-level,exper- imental strategy. (6) Provide tools for thorough,pervasive validation and verification. (7) Pay attention to how pseudo- random numbers are generated and used. Additional guide- lines for IBMs include: (a) design the model's organization before starting to write code,(b) provide the ability to ob- serve all parts of the model from the beginning,(c) make an extensive effort to understand how the model executes how