Class CDLP
- All Implemented Interfaces:
Runnable
,IBS.HasIBS
,IBS.HasIBS.DGroups
,IBS.HasIBS.DPairs
,MilestoneListener
,ODE.HasDE
,ODE.HasODE
,PDE.HasPDE
,SDE.HasSDE
,Features
,Features.Groups
,Features.Pairs
,HasHistogram
,HasHistogram.Degree
,HasHistogram.Fitness
,HasHistogram.StatisticsStationary
,HasMean
,HasMean.Fitness
,HasMean.Strategy
,HasPop2D
,HasPop2D.Fitness
,HasPop2D.Strategy
,HasPop3D
,HasPop3D.Fitness
,HasPop3D.Strategy
,HasS3
,CLOProvider
- Author:
- Christoph Hauert
-
Nested Class Summary
Nested classes/interfaces inherited from class CDL
CDL.IBSPop
Nested classes/interfaces inherited from interface Features
Features.Groups, Features.Pairs, Features.Static
Nested classes/interfaces inherited from interface HasHistogram
HasHistogram.Degree, HasHistogram.Fitness, HasHistogram.StatisticsProbability, HasHistogram.StatisticsStationary, HasHistogram.StatisticsTime, HasHistogram.Strategy
Nested classes/interfaces inherited from interface HasMean
HasMean.Fitness, HasMean.Strategy
Nested classes/interfaces inherited from interface HasPop2D
HasPop2D.Fitness, HasPop2D.Strategy
Nested classes/interfaces inherited from interface HasPop3D
HasPop3D.Fitness, HasPop3D.Strategy
Nested classes/interfaces inherited from interface IBS.HasIBS
IBS.HasIBS.CGroups, IBS.HasIBS.CPairs, IBS.HasIBS.DGroups, IBS.HasIBS.DPairs, IBS.HasIBS.MCGroups, IBS.HasIBS.MCPairs
-
Field Summary
FieldsModifier and TypeFieldDescriptionfinal CLOption
Command line option to set the cost of peer punishment.final CLOption
Command line option to set the leniency of peer punishers towards cooperators, provided the composition of the interaction group reveals them as second-order free riders.final CLOption
Command line option to set the leniency of peer punishers towards loners.final CLOption
Command line option to set the fine of peer punishment for non-contributors.(package private) double
The cost of peer punishment of non-contributors.(package private) double
The fine for peer punishment of non-contributors.(package private) double
The leniency of peer punishers towards cooperators (0
: full leninecy,1
: no leninecy).(package private) double
The leniency of peer punishers towards loners (0
: full leninecy,1
: no leninecy).static final int
The trait (and index) value of peer punishers.Fields inherited from class CDL
cloCost, cloInterest, cloLoneCooperator, cloLoneDefector, cloLoner, cloOthers, cloSolo, COOPERATE, costCoop, DEFECT, doSolo, isLinearPGG, LONER, othersOnly, payLoneCoop, payLoneDefect, payLoner, r1, rN
Fields inherited from class Discrete
cloMonoStop, monoStop, mutation, species
Fields inherited from class Module
active, cloDeathRate, cloGeometry, cloNGroup, cloNPopulation, cloPhase2DAxis, cloSpeciesUpdateRate, cloTraitColors, cloTraitDisable, cloTraitNames, competition, deathRate, defaultColor, engine, ibs, ID, interaction, logger, map2fitness, markers, model, nActive, name, nGroup, nPopulation, nTraits, opponent, playerUpdate, speciesUpdateRate, structure, traitColor, traitName, trajectoryColor, VACANT
Fields inherited from interface HasS3
CORNER_LEFT, CORNER_RIGHT, CORNER_TOP, EDGE_BOTTOM, EDGE_LEFT, EDGE_RIGHT
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
avgScores
(double[] density, int n, double[] avgscores) Calculate the average payoff/score for the frequency of traits/strategies specified in the arraydensity
for interactions in groups of sizen
.void
collectCLO
(CLOParser parser) All providers of command line options must implement this method to collect their options.Opportunity to supply custom individual based simulations.Returns a string with information about the authors of the module.double
Get the leniency towards cooperators, provided the composition of the interaction group reveals them as second-order free riders.double
Get the leniency towards loners.double
Calculates and returns the minimum payoff/score of an individual.double
getMonoGameScore
(int type) Calculate and return the payoff/score of individuals in monomorphic populations with trait/strategytype
.double
Get the cost of peer punishment of non-contributors.double
Get the peer punishment fine to non-contributors.getTitle()
Returns title of active module, e.g.void
groupScores
(int[] traitCount, double[] traitScore) Calculate the payoff/score for interactions in groups consisting of traits/strategies with respective numbers given in the arraytCount
.void
load()
Load new module and perform basic initializations.void
mixedScores
(int[] count, int n, double[] traitScores) Calculate the average payoff/score in a finite population with the number of each trait/strategy provided incount
for interaction groups of sizen
.double
pairScores
(int me, int[] traitCount, double[] traitScore) Calculate and return total (accumulated) payoff/score for pairwise interactions of the focal individual with trait/strategyme
against opponents with different traits/strategies.void
setLeniencyCoop
(double aValue) Set the leniency towards cooperators, provided the composition of the interaction group reveals them as second-order free riders.void
setLeniencyLoner
(double aValue) Set the leniency of punishment towards loners.void
setPunishCost
(double aValue) Set the cost of peer punishment of non-contributors.void
setPunishFine
(double aValue) Set the fine peer punishment for non-contributors.Methods inherited from class CDL
adjustCLO, check, getCostCoop, getDependent, getInterest, getMaxGameScore, getOthersOnly, getPayLoneCoop, getPayLoneDefect, getPayLoner, getSolo, interest, setCostCoop, setInterest, setInterest, setOthersOnly, setPayLoneCoop, setPayLoneDefect, setPayLoner, setSolo, unload
Methods inherited from class Discrete
add, getMaxMonoGameScore, getMinMonoGameScore, getMonoStop, getMutation, setMonoStop
Methods inherited from class Module
createGeometry, getActiveTraits, getCompetitionGeometry, getDeathRate, getGeometry, getIBSPopulation, getID, getInteractionGeometry, getKey, getMapToFitness, getMarkers, getMeanColors, getModelTypes, getNActive, getName, getNGroup, getNPopulation, getNRoles, getNSpecies, getNTraits, getOpponent, getPlayerUpdate, getSpecies, getSpecies, getSpeciesUpdateRate, getTraitColor, getTraitColors, getTraitName, getTraitNames, getTrajectoryColor, getVacant, init, isNeutral, processColorMap, reset, run, setActiveTraits, setDeathRate, setGeometries, setIBSPopulation, setModel, setName, setNGroup, setNPopulation, setNTraits, setOpponent, setSpeciesUpdateRate, setTraitColors, setTraitNames, setTrajectoryColor
Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface Features.Groups
getNGroup, isPairwise
Methods inherited from interface HasHistogram
getCustomLevels, getNTraits, getTraitColors
Methods inherited from interface IBS.HasIBS
createIBS
Methods inherited from interface IBS.HasIBS.DGroups
mixedScores
Methods inherited from interface MilestoneListener
modelDidInit, modelDidReset, modelLoaded, modelRelaxed, modelRunning, modelSettings, modelStopped, modelUnloaded, moduleLoaded, moduleRestored, moduleUnloaded
Methods inherited from interface ODE.HasODE
createODE
Methods inherited from interface PDE.HasPDE
createPDE
Methods inherited from interface SDE.HasSDE
createSDE
-
Field Details
-
PUNISH
public static final int PUNISHThe trait (and index) value of peer punishers.- See Also:
-
costPeerPunish
double costPeerPunishThe cost of peer punishment of non-contributors.- See Also:
-
finePeerPunish
double finePeerPunishThe fine for peer punishment of non-contributors.- See Also:
-
leniencyCoop
double leniencyCoopThe leniency of peer punishers towards cooperators (0
: full leninecy,1
: no leninecy). Punishment of cooperators applies only if they happen to find themselves in an interaction group that reveals them as second-order free riders. For example, a group including a cooperator, a peer punisher and a defector such that the peer punisher notices the failure of the cooperator to punish the defector(s). The default is full leniency. -
leniencyLoner
double leniencyLonerThe leniency of peer punishers towards loners (0
: full leninecy,1
: no leninecy). The default is full leniency. -
cloLeniencyCooperators
Command line option to set the leniency of peer punishers towards cooperators, provided the composition of the interaction group reveals them as second-order free riders. -
cloLeniencyLoners
Command line option to set the leniency of peer punishers towards loners. -
cloPunishment
Command line option to set the fine of peer punishment for non-contributors. -
cloCostPunish
Command line option to set the cost of peer punishment.
-
-
Constructor Details
-
CDLP
Create a new instance of the module for voluntary public goods games with peer punishment.- Parameters:
engine
- the manager of modules and pacemaker for running the model
-
-
Method Details
-
load
public void load()Description copied from class:Module
Load new module and perform basic initializations. -
getAuthors
Description copied from class:Module
Returns a string with information about the authors of the module.- Overrides:
getAuthors
in classCDL
- Returns:
- the names of the authors
-
getTitle
Description copied from class:Module
Returns title of active module, e.g. 2x2 games inTBT
returns "2x2 Games". -
getMinGameScore
public double getMinGameScore()Description copied from class:Module
Calculates and returns the minimum payoff/score of an individual. This value is important for converting payoffs/scores into probabilities, for scaling graphical output and some optimizations.- Overrides:
getMinGameScore
in classCDL
- Returns:
- the minimum payoff/score
- See Also:
-
getMonoGameScore
public double getMonoGameScore(int type) Calculate and return the payoff/score of individuals in monomorphic populations with trait/strategytype
.Note: Optional implementation. Returns
Double#NaN
if not defined or not implemented.Note, monomorphic populations of peer punishers have the same payoff as monomorphic populations of cooperators.
- Overrides:
getMonoGameScore
in classCDL
- Parameters:
type
- trait/strategy- Returns:
- payoff/score in monomorphic population with trait/strategy
type
-
pairScores
public double pairScores(int me, int[] traitCount, double[] traitScore) Calculate and return total (accumulated) payoff/score for pairwise interactions of the focal individual with trait/strategyme
against opponents with different traits/strategies. The respective numbers of each of thenTraits
opponent traits/strategies are provided in the arraytCount
. The payoffs/scores for each of thenTraits
opponent traits/strategies must be stored and returned in the arraytScore
.Important: must be overridden and implemented in subclasses that define game interactions between pairs of individuals (
nGroup=2
,pairwise=true
), otherwise seeIBS.HasIBS.DGroups.groupScores(int[], double[])
.Note: Leniency with cooperators (and punishing cooperators that failed to punish defectors) does not matter in pairwise interactions because this requires at least groups of three or more players. For example a cooperator, a defector and a punisher interact. In such a group composition the cooperator reveals the fact that it does not punish the defector (second-order free riding) and in turn may get punished by the punisher.
- Specified by:
pairScores
in interfaceIBS.HasIBS.DPairs
- Overrides:
pairScores
in classCDL
- Parameters:
me
- the trait index of the focal individualtraitCount
- number of opponents with each trait/strategytraitScore
- array for returning the scores of each opponent trait/strategy- Returns:
- score of focal individual
me
accumulated over all interactions
-
groupScores
public void groupScores(int[] traitCount, double[] traitScore) Description copied from interface:IBS.HasIBS.DGroups
Calculate the payoff/score for interactions in groups consisting of traits/strategies with respective numbers given in the arraytCount
. The interaction group size is given by the sum overtCount[i]
fori=0,1,...,nTraits
. The payoffs/scores for each of thenTraits
traits/strategies must be stored and returned in the arraytScore
.Important: must be overridden and implemented in subclasses that define game interactions among groups of individuals (for groups with sizes
nGroup>2
, otherwise seeIBS.HasIBS.DPairs.pairScores(int, int[], double[])
).- Specified by:
groupScores
in interfaceIBS.HasIBS.DGroups
- Overrides:
groupScores
in classCDL
- Parameters:
traitCount
- group composition given by the number of individuals with each trait/strategytraitScore
- array for returning the payoffs/scores of each trait/strategy
-
mixedScores
public void mixedScores(int[] count, int n, double[] traitScores) Calculate the average payoff/score in a finite population with the number of each trait/strategy provided incount
for interaction groups of sizen
. The payoffs/scores for each of thenTraits
traits/strategies must be stored and returned in the arraytraitScores
.Notes:
For payoff calculations:- each strategy sees one less of its own type in its environment
- the size of the environment is
nPopulation-1
- the fact that the payoff of each strategy does not depend on its own type simplifies things
IBS.check()
(seeIBSMCPopulation
for an example).Important:
Must be overridden and implemented in subclasses that define game interactions in well-mixed populations where individuals interact with everyone else. Computationally it is not feasible to cover this scenario withIBS.HasIBS.DPairs.pairScores(int, int[], double[])
orIBS.HasIBS.DGroups.groupScores(int[], double[])
, respectively.- standard non-linear PGG:
- \[ \begin{align} f_L =& c \sigma \\ f_D =& \frac{X}{M-1}\frac{N}{M-N} (B + S) + H_2(X+Y-1, 0, M-X-Y, N-1) \sigma c \\ f_C =& \frac{(r_1-1)N}{M-N} \left(1-H_2(X+Y-1, 0, M-X-Y, N-1)\right) c +\\ & \frac{N}{M-N}\left(\frac{X-2}{M-1} S - \frac{Y}{M-1} B\right) + H_2(X+Y-1, 0, M-X-Y, N-1) \sigma c \end{align} \] with \[ \begin{align} B =& \frac{M-1}{X+Y} \frac{M-N}{M}\left(r_1 - \frac{2 S}{N-1}\right) \times \left(\frac{N}{M-N} - \frac{\big(1-H_2(X+Y-1, 0, M-X-Y, N)\big)M}{N(X+Y-1)}\right) c \\ S =& \frac{(r_\text{all}-r_1)(X-1)}{(X+Y-2)} c \end{align} \] using \[ H_2(X, x, Y, y) = \frac{\binom{X}{x}\binom{Y}{y}}{\binom{X+Y}{x+y}} \]
- other's only non-linear PGG:
- \[ \begin{align} f_L =& c \sigma \\ f_D =& \frac{X}{M-1} \frac{N}{M-N} (B + S) + H_2(X+Y-1, 0, M-X-Y, N-1) \sigma c \\ f_C =& \frac{X-2}{M-1} \frac{N}{M-N} (B + S) +\frac{r_1 (N-1)}{(M-N)(X+Y)}c- \frac{N}{M-N}\left(\frac{r_1 (M-X-Y-N+1)}{N(X+Y)(X+Y-1)}+1\right)\times \\ & \left(1-H_2(X+Y-1, 0, M-X-Y, N-1)\right)c+ H_2(X+Y-1, 0, M-X-Y, N-1) \sigma c \end{align} \] with \[ \begin{align} B =& \frac{M-1}{X+Y} \frac{M-N}{M} \left(r_1 - \frac{2 S}{N-1}\right) \times \left(\frac{N}{M-N} - \frac{\big(1-H_2(X+Y-1, 0, M-X-Y, N)\big)M}{N(X+Y-1)}\right)c \\ S =& \frac{(r_\text{all}-r_1)(X-1)}{X+Y-2}\frac{N-1}{N-2}c. \end{align} \]
Proper sampling in finite populations - formulas for standard public goods interactions with private punishment: \[ \begin{align} f_C =& \sigma-\frac w{M-1}(N-1)\delta\beta\\ f_D =& B-\frac w{M-1}(N-1)\beta\\ f_C =& B-F(z)c-w(N-1)G(y)\alpha\beta\\ f_P =& B-F(z)c-\frac y{M-1}(N-1)\gamma-x(N-1)G(y)\alpha\gamma-\frac z{M-1}(N-1)\delta\gamma \end{align} \] with \[ \begin{align} B =& \frac{\binom z{N-1}}{\binom{M-1}{N-1}}\sigma+r\frac {x+w}{M-z-1}\times\\ \left(1-\frac 1{N(M-z)}\left( M-(z-N+1)\frac{\binom z{N-1}}{\binom{M-1}{N-1}}\right)\right) c\\ F(z) =& 1-\frac rN\frac{M-N}{M-z-1}+\frac{\binom z{N-1}}{\binom{M-1}{N-1}} \left(\frac rN \frac{z+1}{M-z-1}+r\frac{M-z-2}{M-z-1}-1\right)\\ G(y) =& \frac 1{M-1}-\frac 1{M-y-1}\frac{\binom{M-y-1}{N-1}}{\binom{M-1}{N-1}} \end{align} \]
- Specified by:
mixedScores
in interfaceIBS.HasIBS.DGroups
- Overrides:
mixedScores
in classCDL
- Parameters:
count
- number of individuals for each trait/strategyn
- interaction group sizetraitScores
- array for returning the payoffs/scores of each trait/strategy
-
avgScores
public void avgScores(double[] density, int n, double[] avgscores) Description copied from class:CDL
Calculate the average payoff/score for the frequency of traits/strategies specified in the arraydensity
for interactions in groups of sizen
. The average payoffs/scores for each of thenTraits
traits/strategies must be stored and returned in the arrayavgscores
.Note: needs to be thread safe for parallel processing of PDE's.
IMPORTANT: one of
should be implemented in modules that advertise the model typesODE, SDE
orPDE
.Alternatively, the method
ODE.getDerivatives(double, double[], double[], double[])
may be overridden in a subclass ofODE
, which may prevent calls toavgScores(...)
altogether.- standard non-linear PGG:
- \[ \begin{align} f_L =& c \sigma \\ f_D =& x (B + S) c + \sigma c z^{N-1} \\ f_C =& (r_1-1)\left(1-z^{N-1}\right)c-y B c + x S c + \sigma c z^{N-1} \end{align} \] with \[ \begin{align} B =& \frac1{1-z} \left(r_1 - \frac{2 S}{N-1}\right) \left(1-\frac{1-z^N}{N (1-z)}\right) \\ S =& x \frac{r_\text{all}-r_1}{1-z} \end{align} \]
- other's only non-linear PGG:
- \[ \begin{align} f_L =& c \sigma \\ f_D =& x (B + S) c + \sigma c z^{N-1} \\ f_C =& x (B + S) c - \left(1-z^{N-1}\right)c + \sigma c z^{N-1} \end{align} \] with \[ \begin{align} B =& \frac1{1-z} \left(r_1 - \frac{2 S}{N-1}\right) \left(1 - \frac{1-z^N}{N (1-z)}\right) \\ S =& x \frac{r_\text{all}-r_1}{1-z}\frac{N-1}{N-2} \end{align} \]
-
setPunishCost
public void setPunishCost(double aValue) Set the cost of peer punishment of non-contributors.- Parameters:
aValue
- the cost of cooperation.
-
getPunishCost
public double getPunishCost()Get the cost of peer punishment of non-contributors.- Returns:
- the cost of peer punishment.
-
setPunishFine
public void setPunishFine(double aValue) Set the fine peer punishment for non-contributors.- Parameters:
aValue
- the peer punishment fine.
-
getPunishFine
public double getPunishFine()Get the peer punishment fine to non-contributors.- Returns:
- the peer punishment fine.
-
setLeniencyCoop
public void setLeniencyCoop(double aValue) Set the leniency towards cooperators, provided the composition of the interaction group reveals them as second-order free riders.- Parameters:
aValue
- the leniency towards cooperators.- See Also:
-
getLeniencyCoop
public double getLeniencyCoop()Get the leniency towards cooperators, provided the composition of the interaction group reveals them as second-order free riders.- Returns:
- the leniency towards cooperators.
- See Also:
-
setLeniencyLoner
public void setLeniencyLoner(double aValue) Set the leniency of punishment towards loners.- Parameters:
aValue
- the leniency towards loners.- See Also:
-
getLeniencyLoner
public double getLeniencyLoner()Get the leniency towards loners.- Returns:
- the leniency towards loners.
- See Also:
-
collectCLO
Description copied from interface:CLOProvider
All providers of command line options must implement this method to collect their options.Each command line option is (uniquely) identified by it's name (see
CLOption.getName()
), which corresponds to the long version of the option. If an attempt is made to add an option with a name that already exists, theparser
issues a warning and ignores the option. Thus, in general, implementing subclasses should first register their options and callsuper.collectCLO(CLOParser)
at the end such that subclasses are able to override command line options specified in a parental class.Override this method in subclasses to add further command line options. Subclasses must make sure that they include a call to super.
- Specified by:
collectCLO
in interfaceCLOProvider
- Overrides:
collectCLO
in classCDL
- Parameters:
parser
- the reference to parser that manages command line options- See Also:
-
createIBSPop
Opportunity to supply custom individual based simulations.The parent class
CDL
admits kaleidoscopes. None have been identified forCDLP
- use default IBS model.- Overrides:
createIBSPop
in classCDL
- Returns:
- the custom IBSPopulation or
null
to use default.
-