# DyPy: A Python Library for Simulating Matrix-Form Games

Anjalika Nande111Corresponding author. Email<EMAIL_ADDRESS>Department of Physics, Harvard University  Andrew Ferdowsian  Department of
Economics, Princeton University  Eric Lubin  Department of Computer Science,
Massachusetts Institute of Technology  Erez Yoeli  Sloan School of Management,
Massachusetts Institute of Technology  Martin Nowak  Departments of
Mathematics and Organismic and Evolutionary Biology, Harvard University

###### Abstract

Evolutionary Game Theory (EGT) simulations are used to model populations
undergoing biological and cultural evolution in a range of fields, from
biology to economics to linguistics. In this paper we present DyPy, an open
source Python package that can perform evolutionary simulations for any matrix
form game for three common evolutionary dynamics: Moran, Wright-Fisher and
Replicator. We discuss the basic components of this package and illustrate how
it can be used to run a variety of simulations. Our package allows a user to
run such simulations fairly easily without much prior Python knowledge. We
hope that this will be a great asset to researchers in a number of different
fields.

Key-words: evolutionary game theory, python, matrix-form games, group
selection, frequency biased imitation

## Introduction

Evolutionary Game Theory (EGT) is used to model populations undergoing
Darwinian or cultural evolution; it has been used by researchers in biology,
economics, sociology, anthropology, linguistics, and philosophy to explore
topics such as multicellularity, human cooperation, and the evolution of
grammar (Smith and Price, 1973; Smith, 1982; Matsui, 1996; Traulsen et al.,
2010; Nowak, 2006a; Jaeger, 2008; Bruin, 2005; Friedman, 1998; Johnson et al.,
2003). While researchers can usually solve the evolutionary dynamics of simple
games analytically, for many games, analytic solutions are difficult or
impossible. In such cases, researchers typically rely on numerical simulations
to explore a game’s dynamics (for a review, see Nowak, 2006a).

In this paper we present DyPy, an open source Python package that can be used
to easily run a wide range of useful EGT simulations which have up until now
required duplicative and time-and-energy intensive coding on the part of
researchers. The package provides functionality needed for most simple EGT
simulations like permitting users to analyze any matrix-form games, regardless
of the number of players and strategies, and regardless of whether the game is
symmetric. Users can choose from three of the most commonly-used evolutionary
dynamics: Moran, Wright-Fisher and Replicator. They can specify whether the
population is subject only to individual-level selection, or whether there is
also group-level selection. And, they can account for frequency biased
imitation. Users can analyze a single run of the evolutionary dynamic, or many
runs. They can also vary model parameters along a range to explore the impact
of the choice of parameter values on the dynamics of their game. The results
of any simulation can be saved as a dataset containing the frequency of
strategies over time and their payoffs. These results can also be presented
visually using a number of graphing functions. Most simulations require just
20-100 lines of code, and can be written with little prior programming
experience. DyPy has been parallelized and optimized to ensure simulations run
fast. To the best of our knowledge, DyPy is unique in its scope and ease of
implementation.

## DyPy Availability

DyPy is an open source Python software library that is hosted on Github at
https://github.com/anjalika-nande/dynamics_sim. It runs on Python 3.0 or
higher. Detailed documentation for each command in the library, sample code
for exemplary simulations and a Wiki is provided in the Github repository.
Improvements through pull requests and suggestions for additional
functionality are encouraged.

## DyPy Output

The result of each simulation is a data set consisting of the frequencies of
strategies over time along with their associated payoffs. For ease of
interpretation, these results can be presented visually using a number of
different graphing options. These range from a 2D plot of the results of a
single simulation to 3D wire and contour plots that are the result of varying
two parameters over many iterations of a simulation (see Supporting
Information for details about the 3D plotting options). All of these graphs
can be saved in any file format supported by matplotlib, the default is .png.

## Defining a Game

There are two main components to an EGT simulation: the game that is being
played and the dynamics through which strategies evolve. DyPy allows the user
to create any desired game by subclassing the Game class and defining the
payoff matrix appropriately. While creating the game, the user can also define
states (i.e. the distribution of players playing each strategy) of
interest–usually this is done to analyze possible equilibria of the game,
which have been identified analytically.

To illustrate how this is done and to showcase the library’s functionality, we
reproduce some of the well-known results from literature related to the
evolution of cooperation throughout this paper. We start by defining the
Prisoners’ Dilemma.

Prisoners’ Dilemma

Cooperation is seen in biological systems at all scales; from the formation of
multicellularity to large scale human cooperation (Michod and Roze, 2001;
Nowak, 2006b). However, cooperation which involves a personal cost for the
benefit of others can always be exploited by defectors. This phenomenon is
captured by the well-known two-player game, the Prisoners’ Dilemma (Axelrod,
1980; Smith, 1982; Nowak, 2006a). The payoff matrix associated with the game
is,

$\bordermatrix{~{}&C&D\cr C&R&S\cr D&T&P\cr}$ (1)

where $T>R>P>S$.

Games like this are typically solved by finding the Nash equilibria of the
game, which are strategy profiles such that no player can benefit by
unilaterally deviating. The only Nash equilibrium of this game is for both
players to defect, even though if both cooperated, they would receive a higher
payoff.

In evolutionary game theory, there is an entire population of players, who, in
each round, are assigned to play a game against each other–the details of how
they are assigned to do so depend on the particular dynamic. The most basic
equilibrium concept in EGT is the Evolutionary Stable Strategy (ESS). A
strategy is an ESS if, when everyone in the population plays this strategy, a
mutant who plays another strategy will receive lower payoffs and die out. ESS
corresponds closely to the Nash equilibrium (indeed, all ESS must be Nash
equilibria, but not vice versa). Just as the only Nash Equilibrium of the
Prisoners’ Dilemma is $(D,D)$, the only ESS of the Prisoners’ Dilemma is for
everyone in the population to play $D$ (Smith, 1982).

We will now use DyPy to simulate a population of players playing the
Prisoners’ Dilemma to see that natural selection favors defection. To do this,
we first set up the game. This involves specifying the strategies, equilibria
and the payoff matrix associated with it. The following 16 lines of code are
used to prepare the game:

        from games.game import SymmetricNPlayerGame

        # Class that defines the Prisoners’ Dilemma game.
        class PrisonersDilemma(SymmetricNPlayerGame):
            DEFAULT_PARAMS = dict(R=3,S=0,T=5,P=1,bias_strength=0)
            # List of strategies
            STRATEGY_LABELS = (‘Cooperate’, ‘Defect’)
            # List of equilibria
            EQUILIBRIA_LABELS=(‘Cooperation’, ‘Defection’)

            def __init__(self,R,S,T,P,bias_strength):
                # Define the payoff matrix
                payoff_matrix = ((R,S),(T,P))
                super(PrisonersDilemma, self).__init__(payoff_matrix,1,bias_strength)

            @classmethod
            # Function that defines the equilibria
            def classify(cls, params, state, tolerance):

                threshold = 1 - tolerance
                if state[0][0] > threshold:
                    return 0 # Cooperate
                elif state[0][1] > threshold:
                    return 1 # Defect
                else:
                    return super(PrisonersDilemma, cls).classify(params, state, tolerance)

The Prisoners’ Dilemma is a symmetric game, that is, all the players have the
same strategies and payoffs. So we use the SymmetricNPlayerGame subclass of
the Game class.

The class method, ‘classify’ is used to identify states of interest, in this
case, the state in which all players cooperate, and the state in which all
players defect. The classify command identifies whether the population is “at”
these states at the end of a round. Technically, it tests whether ‘1 -
tolerance’ of the population is at the state, where the ‘tolerance’ parameter
is chosen by the user (see the SI for a more complicated example that uses the
parameters of the game to arrive at the desired tolerances). If the system is
in a state other than the ones defined by the user, the classify command
assigns the state as ‘Unclassified’. These states need not be associated with
pure strategies only and can include steady states consisting of mixed
strategies.

## Types of Simulations

Once the game is created, the user can choose between either stochastic
(Moran, Wright-Fisher) or deterministic (Replicator) dynamics. The
GameDynamicsWrapper and VariedGame classes take care of combining the chosen
game and dynamics and run the desired simulation for a given number of
generations and population size. The user can also specify a ‘start_state’
which gives the initial strategy frequencies (see SI for details). It defaults
to a random list of initial frequencies with the population divided
approximately equally amongst all the strategies. Table 1 describes some of
the important classes in DyPy. We provide some commonly used simulation
methods in the package which are enumerated below along with examples.

Class |  Description
---|---
Game |  Encapsulates the idea of the game that is to be simulated. The user can create a subclass of this class and define the game by specifying the payoff matrix, number of players and strategies along with the equilibria of interest.
Dynamics |  Dynamics govern the update rules from one generation to the next. We provide three commonly used dynamics: Moran, Wright-Fisher and Replicator. The user can also define their own.
GameDynamicsWrapper |  A helper class that wraps a dynamics class and a game class. It provides helper methods for simulation with a fixed set of game and dynamics parameters.
VariedGame |  A helper class that wraps a dynamics class and a game class. It provides helper methods for simulation while varying one or more parameters.
Table 1: Brief description of important DyPy classes

### A single simulation of the game’s dynamic

The ‘simulate’ method can be used when the user wishes to analyze the dynamics
of strategies in a single EGT simulation for a specified number of generations
(number of updating steps in the entire population). In both stochastic
dynamics, the user can also specify a mutation rate, $\mu$ (see SI for more
details). The result is a graph of the dynamics of each players’ strategies
over time. For example, we simulate the Prisoners’ Dilemma game using Moran
dynamics in the absence of mutations. The output is a graph, Figure 1A. We see
that the dynamics converge to defection which is the Nash equilibrium. Example
code:

    from wrapper import GameDynamicsWrapper
    from dynamics.moran import Moran
    s = GameDynamicsWrapper(PrisonersDilemma,Moran,dynamics_kwargs={‘mu’:0})
    s.simulate(num_gens=2000,pop_size=100,graph=dict(area=True,options=[‘smallfont’]))

We provide an example of using the deterministic Replicator dynamic in the
Supplementary Information.

Figure 1: Simulation results for a population playing the Prisoners’ Dilemma
using the three main methods in DyPy. A) Evolution of strategies via the Moran
process for 2000 generations. B) Evolution of strategies via the Moran process
for 2000 generations averaged over 100 iterations. C) The equilibrium
proportion of strategies on varying the payoff $T$ in the Prisoners’ Dilemma
under Moran dynamics. Each simulation was run for 4000 generations averaged
over 100 iterations per value of $T$ $(1,2,\dots,10)$. We used a population
size of 100 for all the simulations with the payoffs in the Prisoners’ Dilemma
set to $R=3$, $S=0$, $T=5$ and $P=1$.

### Multiple iterations of a simulation of the game’s dynamic

On many occasions we want to run a simulation multiple times in order to check
the robustness of the results in the presence of variations in the initial
conditions and/or due to the inherent stochasticity of the dynamics. The game
may also have multiple equilibria, in which case the user might be interested
in the fraction of generations that the population spends in each. For these
reasons, we provide the method ‘simulate_many’ where multiple iterations of
the simulation are run and the frequency of each resulting equilibrium is
returned. If the system is not within ‘tolerance’ of a state defined using the
classify command, the simulation returns ‘Unclassified’. When multiple
simulations are performed, they are automatically parallelized across all
available cores.

We now use ‘simulate_many’, and the stochastic Moran dynamic, to show that a
population playing the Prisoners’ Dilemma stabilizes at defection even in the
presence of stochasticity.

    from wrapper import GameDynamicsWrapper
    from dynamics.moran import Moran
    s = GameDynamicsWrapper(PrisonersDilemma,Moran)
    s.simulate_many(num_iterations=100, num_gens=2000,pop_size=100,\
    graph=dict(area=True, options=[‘smallfont’]))

This command returns a text output with the frequency of each equilibrium,

    {‘Defection’:1.0}

The simulation never returns ‘Unclassified’ and defection equilibrium is
reached reliably during each iteration. It also returns a graph (Figure 1B)
which is an average over the iterations of the dynamics of each players’
strategies over time. In the SI we provide an example where ‘simulate_many’ is
used for a game (Repeated Prisoners’ Dilemma) that exhibits multiple stable
equilibria.

### Approximating the fixation probability

The ‘frac_invasions’ method computes the fraction of iterations where a
strategy introduced in a population, dominates other strategies, after a
specified number of generations. The user can define the amount of prevalence
needed for a strategy to be considered ‘dominating’ via the ‘tolerance’
parameter.

We include this method because it can be used to approximate the fixation
probability for a strategy. In a game with two strategies A and B, the
fixation probability of A is the probability that it fixes in the population
when introduced in a population of only B players. This concept is used
extensively in the field of population genetics, for example, to study how a
particular allele may fix in the population (Patwa and Wahl, 2008; de Oliveira
and Campos, 2004; Lambert, 2006).

The fixation probability for a strategy can be approximated by setting the
tolerance $=0$ and running the simulation for an appropriate number of
generations. This is to ensure that the simulation is run long enough such
that the strategy has either fixed in the population or the population has
reached some other equilibrium. A thorough investigation of the analytical,
numerical and simulation methods to compute the fixation probability is given
in Hindersin et al. (2019). The techniques described can be used to decide the
length of the simulation. The following few lines of code can be used to
approximate the fixation probability for ‘Defect’ in the Prisoners’ Dilemma
with tolerance set to $0$,

    from wrapper import GameDynamicsWrapper
    from dynamics.moran import Moran
    s = GameDynamicsWrapper(PrisonersDilemma,Moran)
    s.frac_invasions(num_iterations = 1000, num_gens = 2000, \
    pop_size = 100, strategy_indx = 1) # Index of strategy ‘Defect’

This returns a text output of the form :

    ‘Fraction of runs where the required strategy dominated the population = 0.79’

The fixation probabilities of the strategies in the Prisoners’ Dilemma can be
analytically computed (Hindersin et al. (2019)). For the payoffs and selection
strength used in our simulation, the fixation probability for ‘Defect’ is 0.8
which is in close agreement with the approximation obtained via the
simulation.

### Effect of varying parameters

We provide the ‘vary’ method to analyze the effect of varying one or more
parameters associated with the dynamics or with the game. For each value of
the parameter(s) being varied, multiple iterations of the simulation are run
and the final frequency of each resulting equilibrium is recorded. The output
is a graph of these final frequencies as a function of the varied
parameter(s). As an example we vary the payoff value $T$ $(1,2,\dots,10)$ from
the Prisoners’ Dilemma Game.

    from wrapper import VariedGame
    from dynamics.moran import Moran
    s = VariedGame(PrisonersDilemma, Moran)
    s.vary(game_kwargs={‘T’:[0,10,10]},num_gens=4000,\
    num_iterations=100,graph=dict(area=True,options=[‘smallfont’]))

The output, Figure 1C shows the equilibrium proportion of strategies on
varying $T$ with fixed $R=3$. The game is a Prisoners’ Dilemma when $T>R$ and
hence, we see the dynamics converging to defection once this is true.

In addition to EGT simulations in well-mixed populations with payoff-based
learning we also include the possibility to simulate effects of frequency
biased imitation and group selection.

## Frequency Biased Imitation

One of the motivations for using evolutionary dynamics is that humans learn or
imitate, and that, crucially, they preferentially learn or imitate successful
strategies (M.Chudek et al., 2012; P.L.Harris and K.H.Corriveau, 2011;
G.Stenberg, 2009; B.Galef, 2008; K.Laland, 2011), just as in biological
evolution, natural selection favors successful strategies. Thus, the dynamics
we’ve focused on so far (Replicator, Wright-Fisher, and Moran) can be used to
describe learning and imitation in the same way they were used to describe
biological evolution.

However, humans are sometimes known to imitate common strategies, somewhat
independently of whether they are successful (R.Boyd and P.J.Richerson, 1985;
Chudek et al., 2015). This is known as frequency biased imitation. If the
frequency bias is important, relative to the success bias, this can change how
a dynamic will behave, and where it will stabilize.

For these reasons, DyPy makes it possible to include frequency biased
imitation when analyzing the dynamics of a game. We incorporate frequency
biased imitation by adding to the average payoff from playing a strategy, a
user-specified function of the strategy’s frequency:
$u_{i}^{FBI}(\sigma,\sigma^{\prime}_{1},\dots,\sigma^{\prime}_{N})=u_{i}(\sigma,\sigma^{\prime}_{1},\dots,\sigma^{\prime}_{N})(1-\gamma)+\phi(\sigma)\gamma$
where $u_{i}(\sigma,\sigma^{\prime}_{1},\dots,\sigma^{\prime}_{N})$ is player
$i$’s average payoff from playing $\sigma$ in a population when playing
opponents with the strategy set
$\left\\{\sigma^{\prime}_{1},\dots,\sigma^{\prime}_{N}\right\\}$, $\gamma$ is
the relative strength of individual versus frequency biased (conformist)
imitation and $\phi(\sigma)$ is the user-specified function of $\sigma$’s
frequency. This function defaults to the commonly used function (W.Nakahashi,
2007),

$\phi(\sigma)=\left(\frac{x_{\sigma}^{a}}{\sum_{j=1}^{M}x_{j}^{a}}\right)\times
s$ (2)

where $x_{\sigma}$ is the frequency of strategy $\sigma$, the sum is over the
frequencies of all $M$ strategies that player $i$ can employ, $s$ is a scaling
factor and $a$ is the ‘conformist’ parameter as defined by Nakahashi
(W.Nakahashi, 2007). $a=1$ is the default in the package. In the code we refer
to s as the ‘bias_scale’ and $\gamma$ as the ‘bias_strength’. This formalism
is a more general version of that used in (Molleman et al., 2013), where the
effect of conformity is thought of as a coordination game.

Conformism in Prisoners’ Dilemma

Conformism is a social learning strategy where players learn strategies by
imitating the majority (R.Boyd and P.J.Richerson, 1985). Adding the effects of
conformism to payoff-based learning considered so far can help stabilize
cooperation under certain conditions. We can simulate this system for a
Prisoners’ Dilemma Game via the VariedGame class and vary the strength of
conformism to reproduce the results from (Molleman et al., 2013). See SI for
all the parameters used in the simulation.

    from wrapper import VariedGame
    from dynamics.wright_fisher import WrightFisher
    s = VariedGame(PrisonersDilemma,WrightFisher)
    s.vary(game_kwargs={‘bias_strength’:[0,1,10]},num_gens=100,num_iterations=100,\
    parallelize=True,graph=dict(area=True,options=[‘smallfont’]))

In Figure 2A, as the strength of conformism increases, cooperation arises in
the population. When the learning is entirely conformist ($\gamma=1$), the
population converges to cooperation or defection solely depending upon the
initial state and so we see both strategies fixing $\sim 50\%$ of the time.

Figure 2: Equilibrium proportion of strategies in the presence of frequency
biased imitation and group selection. Left: The proportion of times an
equilibrium arises in the population while varying the strength of conformism
in a Prisoners’ Dilemma game under Wright-Fisher dynamics. $\gamma$
(bias_strength) is varied from 0 (no conformism) to 1 (fully conformist
learning). Each simulation was run for 100 generations, averaged over 100
iterations per value of $\gamma$. Right: The proportion of times an
equilibrium arises in the population playing the Prisoners’ Dilemma (Wright-
Fisher dynamics) on varying the number of groups and group size keeping the
total population fixed. The number of groups was varied from 1 to 25. At each
group number, the simulation was run for 100 generations, each averaged over a
100 iterations. The ‘rate’ of group selection was 0.2. The population size was
set to 100 for both simulations.

## Group Selection

Group selection is the idea that sometimes evolution occurs via natural
selection acting at the level of a group in addition to the individual level
(Luo, 2014) which leads to favoring traits (strategies) that are advantageous
to the group as a whole. In the presence of such multilevel (group and
individual) selection, a games’ dynamics may no longer converge to the Nash
equilibrium. For example, (Traulsen and Nowak, 2006) showed that cooperation
is favored over defection under certain conditions in the presence of group
selection. With this in mind, we include tools to simulate such multilevel
selection dynamics in DyPy.

We use the formalism of group selection (Luo, 2014) that consists of a fixed
number of groups $m$ each consisting of a fixed population of size $n$. At
each time-step, the system can undergo either group or individual-level
selection via a Moran or Wright-Fisher process. The antagonism between the two
levels of selection is incorporated via a ‘rate’ which is the probability that
group selection occurs at each time-step. At the individual-level,
reproduction occurs proportional to the individual fitness whereas, groups
reproduce proportional to their average fitness. Specifically, in the Moran
process during each round of replication, one individual (group) from the
entire population is chosen for reproduction proportional to their fitness. On
the other hand, all individuals (groups) reproduce proportional to their
fitness during each round of replication in the Wright-Fisher process. The
population (group) number is kept fixed by randomly selecting individuals
(groups) to die whenever reproduction occurs.

Group Selection in Prisoners’ Dilemma

Group selection is another mechanism by which cooperation might be stabilized
in the population. Cooperation can be favored in a population with multi-level
selection (Luo, 2014; Traulsen and Nowak, 2006) where competition between
groups leads to cooperative behaviour under certain conditions. It has been
observed that smaller group sizes and large number of groups favor cooperators
(Traulsen and Nowak, 2006; Traulsen et al., 2008). We can simulate this in our
package by using the VariedGame class and the Prisoners’ Dilemma game. This
simulation varies the number of groups in the population keeping the total
population size fixed. We simulate it over multiple iterations for a fixed
group number.

    from wrapper import VariedGame
    from dynamics.wright_fisher import WrightFisher
    s = VariedGame(PrisonersDilemma, WrightFisher,dynamics_kwargs={‘rate’:0.2})
    s.vary(dynamics_kwargs={‘number_groups’:[1,25,10]},num_gens=100,\
    num_iterations=100,graph=dict(area=True,options=[‘smallfont’]))

The output is a graph (Figure 2B) showing the proportion of times a steady
state is attained in the simulation. As the number of groups increases and the
group sizes decrease, we see cooperation arising in the population.

## Rock-Paper-Scissors

So far we have analyzed dynamics in the Prisoners’ Dilemma where, in
equilibrium, all players play $D$. We now present, in brief, the dynamics of
the Rock-Paper-Scissors (RPS) game, for which the only equilibrium is mixed
with one-third of players to play rock, one-third to play paper, and one-third
to play scissors. An analysis of the game’s dynamics reveals something
interesting that the equilibrium analysis could not: the population often
cycles for some time, or even forever, depending on the relative size of the
payoffs for winning vs. losing a round of the game (Hoffman et al., 2015). We
illustrate this in Figure 3 using a stochastic process including mutations,
and the ‘simulate’ and ‘simulate_many’ methods (see SI for the code and
parameters used).

Figure 3: Evolution of strategies for a population (n=500) playing the Rock-
Paper-Scissors game using the Wright-Fisher dynamic. (A) Results of a single
run of the simulation for 100 generations. (b) An average over 500 iterations
of the simulation in the presence of a $3\%$ mutation rate. ‘simulate_many’
also returns the text output, {‘Nash’: 1.0} (see SI for how this is defined),
implying that the Nash equilibrium was reached at the end of each iteration.

## Discussion

This paper presents DyPy, a Python library for facilitating a variety of
useful EGT simulations, alongside a few simple examples to illustrate the
library’s functionality. We hope DyPy will prove to be an asset for
experienced and novice researchers alike, as well as for teachers. We plan to
continue to maintain and expand DyPy’s functionality, for instance, by adding
additional dynamics such as reinforcement learning and Fudenberg and Imhof
(2006)’s imitation process with rare mutations, as well as permitting
structured populations. We encourage users to contact us with suggestions for
additional functionality, and also encourage pull requests on GitHub so that
users can help with the development of the library.

## Author Contributions

DyPy was conceived by EY and EL. It was originally written by EL in Python 2
which was updated to Python 3 along with additional functionality by AF. AN
extended the package to include frequency biased imitation, group selection
and additional functionalities. AN led the writing of the manuscript under the
guidance of EY and MN. All authors contributed to the draft and gave their
approval for publication.

## Acknowledgments

We would like to thank Alexander Heyde, Christian Hilbe and Laura Schmid for
helpful discussions and edits regarding the manuscript. This work was funded
partly by NIH DP5OD019851 (Anjalika Nande).

## References

  * Axelrod (1980) Robert Axelrod.  Effective choice in the prisoner’s dilemma.  _The Journal of Conflict Resolution_ , 24(1):3–25, 1980.  ISSN 00220027, 15528766.  URL http://www.jstor.org/stable/173932.
  * B.Galef (2008) E.Whiskin B.Galef.  Use of social information by sodium- and protein-deficient rates: test of a prediction (boyd and richerson 1988).  _Animal behaviour_ , 75:627–630, 2008.
  * Bruin (2005) Boudewijn de Bruin.  Game theory in philosophy.  _Topoi_ , 24(2):197–208, Sep 2005.  ISSN 1572-8749.  doi: 10.1007/s11245-005-5055-3.  URL https://doi.org/10.1007/s11245-005-5055-3.
  * Chudek et al. (2015) M Chudek, M Muthukrishna, and J Henrich.  Cultural evolution.  _In the Handbook of Evolutionary Psychology, 2nd Edition_ , 2015.
  * de Oliveira and Campos (2004) Viviane M. de Oliveira and Paulo R.A. Campos.  Dynamics of fixation of advantageous mutations.  _Physica A: Statistical Mechanics and its Applications_ , 337(3):546 – 554, 2004.  ISSN 0378-4371.  doi: https://doi.org/10.1016/j.physa.2004.02.007.  URL http://www.sciencedirect.com/science/article/pii/S0378437104002080.
  * Friedman (1998) Daniel Friedman.  On economic applications of evolutionary game theory.  _Journal of Evolutionary Economics_ , 8(1):15–43, Mar 1998.  ISSN 1432-1386.  doi: 10.1007/s001910050054.  URL https://doi.org/10.1007/s001910050054.
  * Fudenberg and Imhof (2006) Drew Fudenberg and Lorens A Imhof.  Imitation processes with small mutations.  _Journal of Economic Theory_ , 131(1):251–262, 2006.
  * G.Stenberg (2009) G.Stenberg.  Selectivity in infant social referencing.  _Infancy_ , 14:457–473, 2009.
  * Hindersin et al. (2019) Laura Hindersin, Bin Wu, Arne Traulsen, and Julian García.  Computation and simulation of evolutionary game dynamics in finite populations.  _Scientific Reports_ , 9(1):6946, May 2019.  ISSN 2045-2322.  doi: 10.1038/s41598-019-43102-z.  URL https://doi.org/10.1038/s41598-019-43102-z.
  * Hoffman et al. (2015) Moshe Hoffman, Sigrid Suetens, Uri Gneezy, and Martin A Nowak.  An experimental investigation of evolutionary dynamics in the rock-paper-scissors game.  _Scientific reports_ , 5:8817, 2015.
  * Jaeger (2008) Gerhard Jaeger.  Applications of game theory in linguistics.  _Language and Linguistics Compass_ , 2(3):406–421, 2008.  doi: 10.1111/j.1749-818X.2008.00053.x.  URL https://onlinelibrary.wiley.com/doi/abs/10.1111/j.1749-818X.2008.00053.x.
  * Johnson et al. (2003) Dominic D. P. Johnson, Pavel Stopka, and Stephen Knights.  The puzzle of human cooperation.  _Nature_ , 421(6926):911–912, 2003.  doi: 10.1038/421911b.  URL https://doi.org/10.1038/421911b.
  * K.Laland (2011) M.Webster K.Laland, N.Atton.  From fish to fashion: experimental and theoretical insights into the evolution of culture.  _Philosophical Transactions of the Royal Society B: Biological Sciences_ , 366:958–968, 2011.
  * Lambert (2006) Amaury Lambert.  Probability of fixation under weak selection: A branching process unifying approach.  _Theoretical Population Biology_ , 69(4):419 – 441, 2006.  ISSN 0040-5809.  doi: https://doi.org/10.1016/j.tpb.2006.01.002.  URL http://www.sciencedirect.com/science/article/pii/S0040580906000116.
  * Luo (2014) Shishi Luo.  A unifying framework reveals key properties of multilevel selection.  _Journal of Theoretical Biology_ , 341:41 – 52, 2014.  ISSN 0022-5193.  doi: https://doi.org/10.1016/j.jtbi.2013.09.024.  URL http://www.sciencedirect.com/science/article/pii/S0022519313004542.
  * Matsui (1996) Akihiko Matsui.  On cultural evolution: Social norms, rational behavior, and evolutionary game theory.  _Journal of the Japanese and International Economies_ , 10(3):262 – 294, 1996.  ISSN 0889-1583.  doi: https://doi.org/10.1006/jjie.1996.0015.  URL http://www.sciencedirect.com/science/article/pii/S0889158396900155.
  * M.Chudek et al. (2012) M.Chudek, S.Heller, S.Birch, and J.Heinrich.  Prestige-biased cultural learning: bystander’s differential attention to potential models influences children’s learning.  _Evolution and Human Behavior_ , 33:46–56, 2012.
  * Michod and Roze (2001) Richard E. Michod and Denis Roze.  Cooperation and conflict in the evolution of multicellularity.  _Heredity_ , 86(1):1–7, 2001.  doi: 10.1046/j.1365-2540.2001.00808.x.  URL https://onlinelibrary.wiley.com/doi/abs/10.1046/j.1365-2540.2001.00808.x.
  * Molleman et al. (2013) L Molleman, I Pen, and FJ Weissing.  Effects of conformism on the cultural evolution of social behaviour.  _PLoS ONE_ , 8(7):e68153, 2013.  doi: 10.1371/journal.pone.0068153.
  * Nowak (2006a) Martin Nowak.  _Evolutionary Dynamics_.  Harvard University Press, 2006a.
  * Nowak (2006b) Martin A. Nowak.  Five rules for the evolution of cooperation.  _Science_ , 314(5805):1560–1563, 2006b.  ISSN 0036-8075.  doi: 10.1126/science.1133755.  URL https://science.sciencemag.org/content/314/5805/1560.
  * Patwa and Wahl (2008) Z Patwa and L.M Wahl.  The fixation probability of beneficial mutations.  _Journal of The Royal Society Interface_ , 5(28):1279–1289, 2008.  doi: 10.1098/rsif.2008.0248.  URL https://royalsocietypublishing.org/doi/abs/10.1098/rsif.2008.0248.
  * P.L.Harris and K.H.Corriveau (2011) P.L.Harris and K.H.Corriveau.  Young children’s selective trust in informants.  _Philosophical Transactions of the Royal Society B: Biological Sciences_ , 366:1179–1187, 2011.
  * R.Boyd and P.J.Richerson (1985) R.Boyd and P.J.Richerson.  Culture and the evolutionary process.  _University of Chicago Press_ , 1985.
  * Smith and Price (1973) J. Maynard Smith and G. R. Price.  The logic of animal conflict.  _Nature_ , 246(5427):15–18, 1973.  doi: 10.1038/246015a0.  URL https://doi.org/10.1038/246015a0.
  * Smith (1982) John Maynard Smith.  _Evolution and the Theory of Games_.  Cambridge University Press, 1982.  doi: 10.1017/CBO9780511806292.
  * Traulsen and Nowak (2006) Arne Traulsen and Martin A. Nowak.  Evolution of cooperation by multilevel selection.  _Proceedings of the National Academy of Sciences_ , 103(29):10952–10955, 2006.  doi: 10.1073/pnas.0602530103.  URL https://www.pnas.org/content/103/29/10952.
  * Traulsen et al. (2008) Arne Traulsen, Noam Shoresh, and Martin A. Nowak.  Analytical results for individual and group selection of any intensity.  _Bulletin of Mathematical Biology_ , 70(5):1410, Apr 2008.  ISSN 1522-9602.  doi: 10.1007/s11538-008-9305-6.  URL https://doi.org/10.1007/s11538-008-9305-6.
  * Traulsen et al. (2010) Arne Traulsen, Dirk Semmann, Ralf D. Sommerfeld, Hans-Jürgen Krambeck, and Manfred Milinski.  Human strategy updating in evolutionary games.  _Proceedings of the National Academy of Sciences_ , 107(7):2962–2966, 2010.  ISSN 0027-8424.  doi: 10.1073/pnas.0912515107.  URL https://www.pnas.org/content/107/7/2962.
  * W.Nakahashi (2007) W.Nakahashi.  The evolution of conformist transmission in social learning when the environment fluctuates.  PhD thesis, 2007.