from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import random import itertools author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'exchange' players_per_group = None num_rounds = 1 instructions_template = 'exchange/instructions.html' # #========================================= # #PD payoffs for high condition # #========================================= # # payoff if 1 player defects and the other cooperates""", # betrayer_payoff_high = c(400) # betrayed_payoff_high = c(0) # # payoff if both players cooperate or both defect # both_cooperate_payoff_high = c(200) # both_defect_payoff_high = c(100) # #========================================= # #PD payoffs for low conditoin # #========================================= # # payoff if 1 player defects and the other cooperates""", # betrayer_payoff_low = c(300) # betrayed_payoff_low = c(0) # # payoff if both players cooperate or both defect # both_cooperate_payoff_low = c(200) # both_defect_payoff_low = c(100) class Subsession(BaseSubsession): def creating_session(self): for player in subsession.get_players(): player.time_pressure = random.choice([True, False]) print('set time_pressure to', player.time_pressure) class Group(BaseGroup): def set_payoffs(self): for p in self.get_players(): p.set_payoff() class Player(BasePlayer): # #the treatments for the three manipulations # treatment_exchange1 = models.StringField() # treatment_exchange2 = models.StringField() # treatment_exchange3 = models.StringField() treatments = models.StringField() #the choices an agent can make in the exchange decision_exchange = models.IntegerField() #the choices an agent can make in the PD decision_PD = models.StringField( choices=[['Cooperate', 'Cooperate'], ['Defect', 'Defect']], doc="""This player's decision""", widget=widgets.RadioSelect, ) def other_player(self): return self.get_others_in_group()[0] def set_payoff(self): #players' treatment treatment = self.treatment #initializing payoffs both_cooperate_payoff = 0 betrayed_payoff = 0 betrayer_payoff = 0 both_defect_payoff = 0 #if PD is in high temptation condition if treatment == "high_temptation": both_cooperate_payoff = Constants.both_cooperate_payoff_high betrayed_payoff = Constants.betrayed_payoff_high betrayer_payoff = Constants.betrayer_payoff_high both_defect_payoff = Constants.both_defect_payoff_high #if PD is in low temptation conditoin else: both_cooperate_payoff = Constants.both_cooperate_payoff_low betrayed_payoff = Constants.betrayed_payoff_low betrayer_payoff = Constants.betrayer_payoff_low both_defect_payoff = Constants.both_defect_payoff_low #payoffs based on decisions of both payoff_matrix = dict( Cooperate=dict( Cooperate=both_cooperate_payoff, Defect=betrayed_payoff, ), Defect=dict( Cooperate=betrayer_payoff, Defect=both_defect_payoff ), ) self.payoff = payoff_matrix[self.decision_PD][self.other_player().decision_PD]