As I worked with TransmissionLab to do more interesting, structural population models, and in particular to introduce per-individual heterogeneity in rules, I realized that I’d made some serious architectural mistakes with TransmissionLab. I’d precluded easy ways of introducing per-individual heterogeneity in transmission rules, and the workarounds were ugly and led to fragile code that was hard to understand when one came back to it later. Similarly, the method of introducing population structure relied too much on code, whereas structure ought to be part of the data, in particular so it can coevolve.
This led to some prototyping outside RepastJ just to see what architecture might work, and eventually I had working unit tests for a class framework for modeling cultural transmission. This has become, naturally enough, “TransmissionFramework” version 1.0 beta. I am currently (March 2011) in the process of completing a first full simulation model (a simple Moran model with various types of rules and innovation models) as the stimulus to rounding out the framework and producing some accuracy tests.
The framework does not use RepastJ or another simulation library at all. TransmissionFramework is designed to function purely as a Java library (although it uses numerous other Java libraries as well), and does not offer a graphical user interface or point-and-click simulation. The point of TF is accuracy, configurability, and performance. To the extent possible, the framework is wired together using Java interfaces, so that implementations can be swapped out, and uses Google Guice as a “dependency injection” framework (don’t worry about what that means) to wire up implementations to the interfaces that each part of the system depends upon. This allows a simulation to hold everything else constant, but swap in a different class for handling a particular function or calculation.
It’s still a work in progress, and I’ll post when it hits full 1.0 and usable form, as well as linking a jar file and Maven2 configuration for starting a simulation project and adding the outside dependencies (like CERN Colt, JUNG2, etc).
In the meantime, TransmissionFramework lives in GitHub at:
The goal of TransmissionLab is to accurately represent theoretical models of cultural transmission (e.g., random copying, prestige-biased transmission, frequency-biased transmission) within a variety of population structures (e.g., complete graphs/well-mixed, sparse random graphs and social networks of varying topologies, spatial lattices), and using a variety of update algorithms (e.g., Moran processes, Wright-Fisher processes, various other birth-death processes). TransmissionLab seeks to also make data collection and ‘observation’ of simulated populations simple, with modules which are completely separate from the simulated population itself thus preventing observational ‘side-effects’ on the model. Analysis flows from data collection, and can be done in a variety of ways.
TransmissionLab grew directly out of the RandomCopyModel version 1.3 codebase, but underwent a complete redesign to improve modularity and extensibility. Use this model if you are interested in a more generic long-term platform for cultural transmission simulation; use the RandomCopyModel as described below if you are interested in specifically replicating Bentley et al.’s 2007 results.
The TransmissionLab codebase is available under a standard open-source license (CC-GPL), and is hosted by GitHub at:
The project website includes a publicly-available Git repository for the simulation code, and issue tracking.
In their 2007 paper titled “Regular rates of popular culture change reflect random copying,” Alex Bentley, Carl Lipo, Harold Herzog, and Matthew Hahn present a convincing hypothesis for cultural imitation of many “neutral” phenomena, such as popular music preferences, first names, and dog breed popularity. The paper is in press in the journal Evolution and Human Behavior, and available in official pre-print form from ScienceDirect. Bentley et al. studied random copying phenomena using an agent-based simulation model, written in RepastJ.
The original RandomCopyModel code (as revised by Madsen) is available upon request.