Urban planning is not easy: People simultaneously want to have access to transportation and not be bothered by it. This is a contradiction which is not easily resolved, in particular not in densely populated areas. Urban and transportation planning are the disciplines which deal with this contradiction.
Any software package designed to help with these questions needs to address the fact that humans are ``intelligent'', that is, they are able to adapt and to learn. The maybe most prominent example in the realm of transportation planning is called induced traffic - the fact that better streets or better train connections leads to more traffic. In consequence, transportation planning is not an exercise of how to best deal with a given and fixed demand, but it has to balance the interests of people using the transportation system with the interests of people suffering from it.
A good approach to such complex problems are multi-agent simulations. Multi-agent means that all entities of the simulation, in particular the travelers, are resolved individually, and that they have internal rules according to which they make decisions and move inside the synthetic, simulated environment. Such an approach became possible with the advent of modern computers, which process rule-based logic as fast as numerical operations. A big advantage of this agent-based, microscopic approach is that it can be, at least in principle, arbitrarily improved if it turns out to be not realistic enough in certain aspects. This is in stark contrast to aggregated methods, which eventually reach a level where small-scale effects cannot be represented. As an example, 200 cars with 200 different destinations on a road can only be represented by having these 200 different destinations listed somewhere in the system; there is no useful way to average over them. Clearly, a natural place to store this information is inside the agents.
We do however believe that, once one has accepted the microscopic or agent-based paradigm, one can start with rather simple models. The primary purpose of this book is to show that full transportation simulation packages can be coded by somewhat experienced programmers in relatively short time. Such a package does not only contain the traffic micro-simulation, which moves vehicles and travelers through the system, but also modules for route planning, for activity generation, and, most importantly, for human learning. It is not claimed that the resulting transportation simulation package is calibrated and validated and thus useful for policy questions, but it is certainly complete enough to do computational research with respect to methodological and computational questions, and it could be a starting point for a more realistic package. In particular, it is possible to replace the modules one by one by more realistic ones and still keep the structure of the whole system intact. This makes it possible to pull together the efforts of many different research or commercial groups towards a large scale realistic multi-agent transportation simulation.
This book is based on a one-semester class with 3 hours per week, which are approximately evenly distributed between lectures and guided lab work. In addition, depending on their programming skills, students put in a significant homework effort (what many of them enthusiastically to). The class covers most of this book; homework comes in particular from Part II. The book is written in a way that Part II should be self-contained, that is, a reader mostly interested in basic code development should find all relevent information in that part of the book. The other chapters provide additional material, in particular with respect to improvements, and with respect to theoretical background. The perspective throughout the book is computational, that is, theoretical developments without relevance to a computational implementation are kept to a minimum.