Reviewed by
Jennifer Badham
University of Surrey
I was therefore keen to read the new textbook by Uri Wilensky, the author of NetLogo, and William Rand, both of whom are experienced teachers with ABM and NetLogo. The book is intended for a “high-level undergraduate or entry-level graduate audience” (p. xii) as either a primary text in an interdisciplinary course on complex systems, or a supplementary text in disciplinary courses where ABM is being introduced as a research methodology.
The book is explicitly not a user guide for NetLogo. However, it teaches readers how to use NetLogo and uses examples from the NetLogo Model Library to motivate more general discussion of ABM theory and issues. NetLogo is so tightly integrated into the book that there are parts of the text that require the reader to run NetLogo and there are other parts where I needed to open the relevant example model to understand the text. All models discussed are available in the IABM section of the Model Library.
The Preface and Chapter 0 orient the reader to the book structure and ABM, using the Predator-Prey and Forest Fire models to discuss the type of understanding that can be achieved with exploratory modelling. Chapter 1 continues this theme, using the Ants model to illustrate the emergence of macro-behaviour from simulation of easily understood mechanisms at the individual level.
Chapters 2 and 3 have the reader starting to code in NetLogo. Chapter 2 provides step by step instructions to build three simple models (Life, Heroes and Cowards, and a simple economic transaction process). Chapter 3 presents four simple models (Forest Fire, Diffusion-Limited Aggregation, Segregation, and El Farol) and analyses the key parts of the code, then provides the complete modifications necessary to examine several potentially interesting ‘what if?’ type questions.
Chapter 4 concerns the modelling process, identifying the key phases of design, iterative construction, and examining results. The treatment of these issues is fairly superficial (as appropriate for an introductory textbook), but using the same Wolf-Sheep model throughout the chapter provides an excellent grounding. This section also emphasises the importance of taking an agent-centric view of the system to be modelled.
Chapter 5 takes a more theoretical stance on ABM. It discusses the various components of a model: Agents (including properties, behaviour, and cognition types), Environments (including spatial and network), Interactions, Interface, and Schedule. In this chapter, NetLogo snippets are used to illustrate the points rather than complete models. The theoretical perspective is continued in Chapter 6, which uses a single Spread of Diseases model to examine different ways of analysing model output, such as summary statistics or geographic patterns. Chapter 7 finishes off the theory with verification, validation and replication.
Chapter 8 introduces some of the more advanced NetLogo features – such as HubNet for participative modelling, or BehaviorSearch for optimisation, as well as extensions such as GIS and NW (network). These are not obviously suitable for a novice NetLogo user (the audience for the textbook), but a researcher who wishes to add ABM to their methodological toolkit may well wish to know that these capabilities are available.
Like many books, the strengths of An Introduction to Agent-Based Modeling are also its weaknesses in a different context. There is a strong educational voice throughout, asking questions and suggesting interesting ideas to pursue in the explorations at the end of each chapter. The reliance on NetLogo code and experimenting with models would likely motivate students and help them to understand. Unfortunately, many of the explorations appear to be related to the ideas in the chapter rather than the techniques already taught (particularly evident in the chapters 0 and 1) and could not be attempted by students based only on the text to that point. This is not signposted and a motivated student reading ahead or a self-learner would likely get confused and frustrated.
The examples, NetLogo primitives, and theoretical points or ideas that the code is intended to illustrate are interwoven, particularly in the first half of the text. This provides continuity and contributes to the engaging and personal style, but the somewhat haphazard structure can make it difficult to identify the important points. For example, understanding ‘ASK’ is essential for developing a NetLogo model, but this primitive is presented in the middle of a paragraph describing the setup of the Life model (p. 53).
This book would be a useful text for its target market; courses to introduce ABM and NetLogo for discipline based students and researchers. For a university level course, it provides a broad range of examples and stimulating ideas for student exploration, but would need to be supplemented with lecture notes that are more theoretical in content and guidance about key points and which activities to attempt when. The text could stand alone as a source for short courses, though again care would be needed with ordering the material. Finally, it could also be a rich source of ideas for teachers of high school computer science students.