from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Bot, Currency as c, currency_range ) author = 'Hanna Freudenreich' doc = """ An implementation of the intergroup prisoners' dilemma maximizing difference game (IPD-MD) (Halevy et al. 2008) for oTree. """ class Constants(BaseConstants): name_in_url = 'my_IPDMD_old' players_per_group = 6 num_rounds = 1 endowment = c(10) show_up = c(15) multiplier = 0.5 class Subsession(BaseSubsession): pass class Group(BaseGroup): def role(self): if self.id_in_group <= 3: return 'subgroup1' else: return 'subgroup2' #subgroup1_within = models.CurrencyField(initial=0) #subgroup1_between = models.CurrencyField(initial=0) #subgroup2_within = models.CurrencyField(initial=0) #subgroup2_between = models.CurrencyField(initial=0) #def set_payoffs(self): # for player in self.get_players(): # if player.role() == 'subgroup1': # self.subgroup1_within += player.contribution_within # self.subgroup1_between += player.contribution_between # elif player.role() == 'subgroup2': # self.subgroup2_within += player.contribution_within # self.subgroup2_between += player.contribution_between #for player in self.get_players(): # if player.role() == 'subgroup1': # player.payoff = Constants.endowment - player.contribution_within - player.contribution_between + Constants.multiplier * (self.subgroup1_within + self.subgroup1_between - self.subgroup2_between) # elif player.role() == 'subgroup2': # player.payoff = Constants.endowment - player.contribution_within - player.contribution_between + Constants.multiplier * (self.subgroup2_within + self.subgroup2_between - self.subgroup1_between) class Player(BasePlayer): contribution_within = models.CurrencyField(min=0, max=Constants.endowment, label="") contribution_between = models.CurrencyField(min=0, max=Constants.endowment, label="") keep = models.CurrencyField( min=0, max=Constants.endowment , label="") ex_sum_a = models.CurrencyField(min=0, max=50, label="") ex_sum_b = models.CurrencyField(min=0, max=50, label="") ex_back_a = models.CurrencyField(min=0, max=50, label="") ex_back_b = models.CurrencyField(min=0, max=50, label="") ex_back_a1 = models.CurrencyField(min=0, max=50, label="") ex_back_b1 = models.CurrencyField(min=0, max=50, label="") ex_sum = models.CurrencyField(min=0, max=50, label="") ex_sum_a1 = models.CurrencyField(min=0, max=50, label="") ex_sum_b1 = models.CurrencyField(min=0, max=50, label="") ex_minus = models.CurrencyField(min=0, max=50, label="") ex_final = models.CurrencyField( min=0, max=50, label="" ) ex_minus1 = models.CurrencyField( min=0, max=50, label= "") exp_own_a = models.CurrencyField(min=0, max=Constants.endowment, label='') #label="Was denken Sie: wieviel hat jedes Mitglied Ihrer Gruppe im Durchschnitt in Topf A eingezahlt?") exp_own_b = models.CurrencyField(min=0, max=Constants.endowment, label='') #label="Was denken Sie: wieviel hat jedes Mitglied Ihrer Gruppe im Durchschnitt in Topf B eingezahlt?") exp_other_a = models.CurrencyField( min=0, max=Constants.endowment, label='')#label="Was denken Sie: wieviel hat jedes Mitglied der anderen Gruppe im Durchschnitt in Topf A eingezahlt?" ) exp_other_b = models.CurrencyField( min=0, max=Constants.endowment, label='')#label="Was denken Sie: wieviel hat jedes Mitglied der anderen Gruppe im Durchschnitt in Topf B eingezahlt?" )