from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, Page, WaitPage ) cu = c doc = "\nEach player decides if to free ride or to volunteer from which all will\nbenefit.\nSee: Diekmann, A. (1985). Volunteer's dilemma. Journal of Conflict\nResolution, 605-610.\n" class Constants(BaseConstants): name_in_url = 'volunteer_dilemma' players_per_group = 3 num_rounds = 1 num_other_players = 2 general_benefit = c(100) volunteer_cost = c(40) instructions_template = 'volunteer_dilemma/instructions.html' class Subsession(BaseSubsession): pass def set_payoffs(group): players = group.get_players() group.num_volunteers = sum([p.volunteer for p in players]) if group.num_volunteers > 0: baseline_amount = Constants.general_benefit else: baseline_amount = c(0) for p in players: p.payoff = baseline_amount if p.volunteer: p.payoff -= Constants.volunteer_cost class Group(BaseGroup): num_volunteers = models.IntegerField() set_payoffs = set_payoffs class Player(BasePlayer): volunteer = models.BooleanField(doc='Whether player volunteers', label='Do you wish to volunteer')