jgregoriods / expand

Agent-based model of demic expansions in South America during the late Holocene.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ExPaND

Simulating demic expansion of farmers in tropical South America

Jonas Gregorio de Souza
ORCiD

This is an agent-based model for simulating the demic expansion of tropical forest farmers in late Holocene South America. Over the last 5000 years, archaeological cultures like the Saladoid-Barrancoid and Tupiguarani expanded over different parts of Amazon and beyond, spreading the practice of polyculture agroforestry. Can these archaeological expansions be modelled as demic waves of advance similar to what has been proposed for the Neolithic in Eurasia? Model results are assessed by comparing simulated arrival times with radiocarbon dates. Similar models, where human expansions are determined by population growth, fission and relocation, have been developed for the spread of farming in Europe (Fort et al. 2012; Isern et al. 2017). The same concept is adopted here, with the rules of the model informed by the ethnography of tropical forest farmers. For a complete description of the model, see Souza et al. (2020).

Installation

Clone or download the repository. There are some dependencies that need to be installed:

pip3 install -r requirements.txt

Model architecture

Expansions result from the interaction between population growth, village fission and village relocation. Each village has a territory within a catchment radius and a maximum population density (K*). The population grows at a rate of 2.5% per year. If the population is above the maximum density, more cells (10 x 10 km) are added to its territory. When the village population is above a certain threshold and there are free cells outside of its catchment, it fissions, giving birth to a new village. If a village has been in its location beyond a maximum permanence time, it also looks for free cells outside its catchment to move. Finally, villages have the option to leapfrog: if there are no free cells in the immediate neighbourhood, they can jump over longer distances.

The model starts with a village whose population is at the fission threshold, so that it immediately fissions and starts the expansion.

When fissioning or moving, villages choose the best cell according to a suitability layer. Here, a layer env.asc is provided in the /layers folder for illustrative purposes. The layer was created using MaxEnt. In the code, a parameter tolerance is passed to the agents, determining the minimum value for a cell to be settled. In this version, the value 0.3 was used, based on the max training sensitivity and specificity threshold of the MaxEnt results.

Running the model

You must define a start date (BP) and a dictionary with the parameters: the coordinates (lonlat) of the first village, the maximum population density (persons 100 km-2), fission threshold, catchment radius (km), leap distance (km) and maximum permanence time (years).

For now, let's set the start date to 4600 BP and the initial coordinates to -65.77 7.82 (approximate coordinates of La Gruta, which potentially contains some of the earliest Saladoid-Barrancoid ceramics).

>>> from model import Model

>>> start_date = 4600
>>> params = {
    'coords': (-65.77, 7.82),
    'k': 30,
    'fission_threshold': 70,
    'catchment': 10,
    'leap_distance': 150,
    'permanence': 15,
    'tolerance': 0.3
}
>>> model = Model(start_date, params)
>>> model.run(4100, show_prog=True)
100%|██████████████████████████████████████| 4100/4100 [00:08<00:00, 507.48it/s]

The results of the model can be evaluated by comparing simulated arrival times with radiocarbon dates in different regions. The calibrated dates you want to use for comparison must be placed in the folder /dates. Files must be in .csv format with two columns, one for each date, with a first row containing XY coordinates for the dated site in lonlat format and the remaining rows containing years BP and the respective probability densities.

The result is a score from 0 to 1 obtained by averaging the intercepted normalised probability at each dated site (or 0 if the simulated arrival time is outside of the calibrated distribution).

>>> score = model.eval()
>>> print('score:', round(score, 2))
score: 0.57

You can save the results to be used in other software. This creates two files in the /results folder: one starting with sim... containing the simulated arrival times and the other starting with dates... containing the intercepted probability densities.

>>> model.write()

You can also run from the command line by using the following arguments:

python3 run.py --start=4600 --x=-65.77 --y=7.82 --k=30 --fiss=70 --catch=10 --leap=150 --perm=15 --tol=0.3 --iter=4100 --write --eval --show-bar

References

Fort, Joaquim, Toni Pujol, and Marc Vander Linden. 2012. “Modelling the Neolithic Transition in the Near East and Europe.” American Antiquity 77 (2): 203–19.

Isern, Neus, João Zilhão, Joaquim Fort, and Albert J Ammerman. 2017. “Modeling the Role of Voyaging in the Coastal Spread of the Early Neolithic in the West Mediterranean.” Proceedings of the National Academy of Sciences 114 (5): 897 LP – 902.

Souza, J.G., Alcaina-Mateos, J., Madella, M. 2020. "Archaeological expansions in tropical South America during the late Holocene: Assessing the role of demic diffusion". PLOS ONE 15(4): e0232367.

About

Agent-based model of demic expansions in South America during the late Holocene.

License:GNU General Public License v3.0


Languages

Language:Python 100.0%