from otree.api import * c = cu doc = '' class C(BaseConstants): NAME_IN_URL = 'DecisionMakingGame' PLAYERS_PER_GROUP = 3 NUM_ROUNDS = 5 ENDOWMENT = cu(100) LAMBDA = 10 ALPHA = 5 IP2 = 2 IP6 = 6 IP10 = 10 class Subsession(BaseSubsession): pass class Group(BaseGroup): total_contribution = models.CurrencyField() def set_payoffs(group: Group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p3 = group.get_player_by_id(3) group.total_contribution = sum([p.contribution for p in group.get_players()]) individual_share1 = C.LAMBDA*abs(group.total_contribution - C.IP2) individual_share2 = C.LAMBDA*abs(group.total_contribution - C.IP6) individual_share3 = C.LAMBDA*abs(group.total_contribution - C.IP10) p1.payoff = C.ENDOWMENT - C.ALPHA*p1.contribution - individual_share1 p2.payoff = C.ENDOWMENT - C.ALPHA*p2.contribution - individual_share2 p3.payoff = C.ENDOWMENT - C.ALPHA*p3.contribution - individual_share3 class Player(BasePlayer): contribution = models.CurrencyField(label='How many units do you want to produce?', max=40, min=0) class Contribute(Page): form_model = 'player' form_fields = ['contribution'] class ResultsWaitPage(WaitPage): after_all_players_arrive = set_payoffs class Results(Page): form_model = 'player' page_sequence = [Contribute, ResultsWaitPage, Results]