Prisoner Dilemma
This game is the classical Prisoner Dilemma. The objective of the game is minimize your value. The game is played by two players, each one chooses between two options: cooperate or defect. The value of each player depends on the combination of the actions of both players.
Goal
Minimize the value of the player.
Score
The score is calculated following the score table.
Import
from IArena.games.PrisonerDilemma import PrisonerDilemmaPosition
from IArena.games.PrisonerDilemma import PrisonerDilemmaMovement
from IArena.games.PrisonerDilemma import PrisonerDilemmaRules
Movement
A movement is an int where 0 means cooperate and 1 means defect.
decision-int-0, 1- 0: Cooperate - otherwise: Defect
# Decide to cooperate
movement = PrisonerDilemmaMovement.cooperate()
# or
movement = PrisonerDilemmaMovement(PrisonerDilemmaMovement.Cooperate)
# or
movement = PrisonerDilemmaMovement(0)
# Decide to defect
movement = PrisonerDilemmaMovement.defect()
# or
movement = PrisonerDilemmaMovement(PrisonerDilemmaMovement.Defect)
# or
movement = PrisonerDilemmaMovement(1)
Position
A position has nothing to store. The rules are stored within the rules
Rules
It counts with 1 method to retrieve the score matrix:
rules.get_score_table() -> PrisonerDilemmaScoreTable
Constructor
To construct the rules, it can give the score table, or let it be created randomly:
Using a secret code already defined.
# Random score table with seed=0 rules = PrisonerDilemmaRules(seed=0) # Score table with values {Cooperate:{Cooperate: 1, Defect: 6}, Defect:{Cooperate: 2, Defect: 4}} rules = PrisonerDilemmaRules(score_table= { PrisonerDilemmaMovement.Cooperate: { PrisonerDilemmaMovement.Cooperate: 1, PrisonerDilemmaMovement.Defect: 6 }, PrisonerDilemmaMovement.Defect: { PrisonerDilemmaMovement.Cooperate: 2, PrisonerDilemmaMovement.Defect: 4 }, } )
Score Table
The score of the player is calculated depending a score matrix that is defined in the rules. The score matrix is a matrix of size 2x2 of floats like the following:
# score_table = PrisonerDilemmaScoreTable
score_table PrisonerDilemmaScoreTable(score_table=
{
PrisonerDilemmaMovement.Cooperate:
{
PrisonerDilemmaMovement.Cooperate: A,
PrisonerDilemmaMovement.Defect: B
},
PrisonerDilemmaMovement.Defect:
{
PrisonerDilemmaMovement.Cooperate: C,
PrisonerDilemmaMovement.Defect: D
},
}
)
# a = PrisonerDilemmaMovement
# b = PrisonerDilemmaMovement
x = score_table.score(player_movement=a, opponent_movement=b) # float