Multi-Agent Religion Simulation

From the article "Accidental Atheists? Agent-Based Explanations for the Persistence of Religious Regionalism"

Journal for the Scientific Study of Religion (2007)

Abstract    Movies    Paper  Model  Citation

 By Laurence Iannaccone and Michael Makowsky 
Department of Economics and the Center for the Economic Study of Religion
George Mason University


This paper presents a new, multi-agent approach to the study of religious commitment. Starting with a variant on Schelling’s classic model of mobility and segregation, we develop a multi-agent religion simulation (MARS) that captures a wide range of insights from standard theories of religious choice, social influence, and preference formation. Compared to traditional, statistical methods of analyzing religious change, MARS better describes the actual process by which people make religious choices and better explains the persistence of religious regionalism.  In a mobile and pluralistic society, stable regional patterns require a balanced combination of adaptation to one’s current social environment and attachment to one’s personal identity. 



The initial conditions are shown in the smaller first image. Click on one of the three subsequent images to view/download the full 2000 turn movie.



 related to figures 2a-2d in the paper 


 Heavy Conformity                                        Resistance                                    Moderate Conformity

Sect Stability

related to figures 3a-3d in the paper 



                      Imprinting                                    Imprinting + Selective Search            Imprinting, Search, and Community Pull



The full version of the paper is available here.


Laurence R. Iannaccone and Michael D. Makowsky (2007) 
Accidental Atheists? Agent-Based Explanations for the Persistence of Religious Regionalism 
Journal for the Scientific Study of Religion 46 (1), 1–16.


The applet requires Java 1.4.1 or higher. It will not run on Windows 95 or Mac OS 8 or 9. Mac users must have OS X 10.2.6 or higher and use a browser that supports Java 1.4. (Safari works, IE does not. Mac OS X comes with Safari. Open Safari and set it as your default web browser under Safari/Preferences/General.) On other operating systems, you may obtain the latest Java plugin from Sun's Java site.

Instructions can be found below the applet window. For a quick start to running thought experiments from the paper, go here.


created with NetLogo

view/download model file: MARS.nlogo

MARS 1s: Multi-Agent Religion Simulation 


MARS is a social science simulation of religious migration and conformity created within the Netlogo programmable modeling environment. Agents and the environment they exist within are programmed constructs whose attributes and the rules they operate by are a combination of programmed algorithms, endogenous variables, and exogenous parameters. 

The focus of this guide is to help the user understand the model and what it simulates, and to create his or her own experiments by adjusting the observer controlled parameters and employing the full range of tools available. 

All are encouraged to read the story behind the model, the basics of the observer interface, and the section on getting started. The tools and techniques described in the advanced section are just that - useful to researchers with specific goals, but not necessary for most experiments. 


Agents exist within a two dimensional space (lattice) not unlike a checkerboard, Divided into a number of regions set by the observer (1 – 4). Agents move randomly, exogenously driven by the program to chosen patches, and upon arrival choose whether or not to maintain their religion (color) based on their original religion (when created), current religion (the one they had before moving), the religions of each of their new neighbors (community). The choice process amounts to evaluating a utility function for each possible choice of religion, and weighting original by the "origin" parameter, current religion by the "inertia" parameter, and the influence of neighbor religions by the "community" parameters. 

Additionally, in more advanced models, agents have a choice to make regarding their congregation attendance, and quantity represented by shading. Attendance is our chosen variable for representation of agent religiosity, as it is the most accepted metric of religiosity and it has a clear cut community dynamic. Similar to religion selection, Attendance decisions are a utility evaluation based on original attendance, current attendance, and community attendance. 


Using the Scenarios. 

Key sequence: Click Scenario, then click on either "Basic" "Conform" or "Resist" 
You may then either click Run/Pause to run it indefinitely, or Options-->Skip-ahead-n and then choose the exact number of moves for the simulation to run. 

Note: to replicate runs from the paper, the Recall button must be clicked twice after selecting a scenario to begin from the exact starting assortment. 


What kind of agents do you want? 

This is for most experiments at the core of what you are trying to accomplish. There are two questions to be asked in the process: 

1) How many different types (religions) of agents do you want? 
2) In what relative ratios do you want them to populate your model? 

These preferences are both met by adjusting the parameter slider adjacent to each color button. If you would like some portion of your agents to be red, simply set the R_num¬ slider to a number greater than zero. Do this for each type you wish to be present. The ratio that will be realized in the initial conditions of your model will simply be that type’s (color’s) assigned number as a fraction of the sum pf all the _num¬ slider settings. 

Where do they go? 

Designing your environment and populating it with agents is an obviously important, and relatively straightforward task. 

1) Choose your number of regions by moving the slider. You may have between one and four regions. 
2) Click Start/End. Notice that if you chose multiple regions that lines of gray patches divide the lattice. 
3) Choose a population density. You have between 1 and 100 percent density. 
4) Click Populate. Each time you click populate a region will fill with agents to your prescribed density. If you have three regions you will have to click populate, then wait for it to fill three successive times 

Note: If after all regions are filled you click populate an additional time the lattice spaces unoccupied will be filled by the density percentage chosen ( ex if there are 10 unoccupied spaces and you click populate with 60% density, 6 of the remaining spaces will be filled). 

Once these basic parameters have been set you may run the model by clicking Run/Pause. Clicking again will pause the model, and it can be restarted by clicking it yet again. 

How much do they move? 

Agents operating within the model once it is running will be exogenously forced to move on a percentage of their turns. The move-rate¬ slider sets this percentage. 

What are their attributes? 

Finally, you wish to design your agents. For each type used within your model you have the option of assigning a set of relative values regarding the religion and attendance related attributes. 

This is accomplished by adjusting a series of sliders that dictate the relative strength and weaknesses of your agents in six different categories. 

- [j_ type] equals the utility associated with choosing to maintain (or return to) one’s type-of-origin. If zero, then the agent displays no attachment to his religious upbringing. 
- [k_ self] equals the utility associated with not changing one’s current type. If zero, then the agent displays no internalized “inertia” across periods. 
- [i_ pull] equals the “social” utility that the agent receives from neighbors who share his type. If zero, then neighbors of type-i exert no “pull” on their co-religionists. This effect is weighted by the number of type-i neighbors relative to the number of potential (not actual) neighbors. 



- Re. "Store" and "Recall" buttons: Stored state "1" corresponds to state never seen, nor used. It's what would happen *if* each turtle adjusted as it was dropped on board. Nice to know, but not worth computing and saving in general? Delete from "add turtles" procedure and add as a special option? Slows "populate". At the very least, should reverse displayed numbering states "0" and "1", and then suppress display of state "0" except via special command.