Choose a fitness function
There are 3 fitness functions provided in the ludics.fitness_functions
package. Each fitness function takes a state and returns a fitness value for
each player in the state.
Public Goods Games
For a public goods game, the state must contain only 0s (defectors) and 1s (contributors).
Homogeneous public goods game
All players contribute the same amount alpha. The total pool is multiplied
by r and split equally.
>>> import ludics.fitness_functions
>>> import numpy as np
>>> state = np.array([1, 0, 0, 1])
>>> r = 2
>>> alpha = 3
>>> ludics.fitness_functions.homogeneous_pgg_fitness_function(
... state=state,
... alpha=alpha,
... r=r,
... )
array([0., 3., 3., 0.])
Heterogeneous public goods game
Players contribute different amounts given by contribution_vector, where
player \(i\) contributes contribution_vector[i].
>>> import ludics.fitness_functions
>>> import numpy as np
>>> state = np.array([1, 1, 0, 1])
>>> r = 2
>>> contribution_vector = np.array([1, 2, 3, 4])
>>> ludics.fitness_functions.heterogeneous_contribution_pgg_fitness_function(
... state=state,
... r=r,
... contribution_vector=contribution_vector,
... )
array([ 2.5, 1.5, 3.5, -0.5])
Symbolic fitness functions
ludics.fitness_functions provides a general symbolic fitness function for
2-player populations, covering all four states:
np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
It takes no additional arguments:
>>> import ludics.fitness_functions
>>> import numpy as np
>>> state = np.array([0, 1])
>>> ludics.fitness_functions.general_four_state_fitness_function(state)
array([f_1(b), f_2(b)], dtype=object)