Assemble the underlying Markov chain

Use the generate_transition_matrix function:

>>> import ludics
>>> import ludics.fitness_functions

>>> r = 1.5
>>> alpha = 5
>>> selection_intensity = 0.2
>>> state_space = ludics.get_state_space(N=2, k=2)
>>> ludics.generate_transition_matrix(
...     state_space=state_space,
...     fitness_function=ludics.fitness_functions.public_goods_game_fitness_function,
...     compute_transition_probability=ludics.compute_moran_transition_probability,
...     selection_intensity=selection_intensity,
...     alpha=alpha,
...     r=r,
... )
array([[1.        , 0.        , 0.        , 0.        ],
       [0.36904762, 0.5       , 0.        , 0.13095238],
       [0.36904762, 0.        , 0.5       , 0.13095238],
       [0.        , 0.        , 0.        , 1.        ]])

Most fitness functions and population dynamics in ludics will require **kwargs, which must be passed into the generate_transition_matrix function.

Apply mutation

Pass the individual_to_action_mutation_probability argument:

>>> import ludics
>>> import ludics.fitness_functions
>>> import numpy as np

>>> r = 1.5
>>> alpha = 5
>>> selection_intensity = 0.2
>>> state_space = ludics.get_state_space(N=3, k=2)
>>> mutation_probabilities = np.array([
...     [0.1, 0.2],
...     [0.2, 0.15],
...     [0.15, 0.1],
... ])

>>> ludics.generate_transition_matrix(
...     state_space=state_space,
...     fitness_function=ludics.fitness_functions.public_goods_game_fitness_function,
...     compute_transition_probability=ludics.compute_moran_transition_probability,
...     selection_intensity=selection_intensity,
...     alpha=alpha,
...     r=r,
...     individual_to_action_mutation_probability=mutation_probabilities,
... )
array([[0.85      , 0.03333333, 0.05      , 0.        , 0.06666667,
        0.        , 0.        , 0.        ],
       [0.27413793, 0.56264368, 0.        , 0.07241379, 0.        ,
        0.0908046 , 0.        , 0.        ],
       [0.26091954, 0.        , 0.58908046, 0.0591954 , 0.        ,
        0.        , 0.0908046 , 0.        ],
       [0.        , 0.18137255, 0.18235294, 0.45980392, 0.        ,
        0.        , 0.        , 0.17647059],
       [0.24252874, 0.        , 0.        , 0.        , 0.62586207,
        0.0591954 , 0.07241379, 0.        ],
       [0.        , 0.15686275, 0.        , 0.        , 0.18235294,
        0.50882353, 0.        , 0.15196078],
       [0.        , 0.        , 0.15686275, 0.        , 0.18137255,
        0.        , 0.51078431, 0.15098039],
       [0.        , 0.        , 0.        , 0.03333333, 0.        ,
        0.06666667, 0.05      , 0.85      ]])