from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random author = 'Markus Eyting' doc = """ This is a one-period public goods game with 3 players, measures cooperation. """ class Constants(BaseConstants): name_in_url = 'public_goods' players_per_group = None num_rounds = 1 groupsize = 3 num_others = groupsize - 1 # """Amount allocated to each player""" endowment = c(10) efficiency_factor = 1.2 examplepayoff = endowment * efficiency_factor trainingcontribution1 = 10 trainingcontribution2 = 10 trainingcontribution3 = 0 trainingcontribution4 = 5 trainingmember1a = 10 trainingmember1b = 0 trainingmember1c = 0 trainingmember1d = 4 trainingmember2a = 10 trainingmember2b = 0 trainingmember2c = 10 trainingmember2d = 6 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass """ total_contribution = models.CurrencyField() individual_share = models.CurrencyField() def set_payoffs(self): self.total_contribution = sum([p.contribution for p in self.get_players()]) self.individual_share = self.total_contribution * Constants.efficiency_factor / Constants.players_per_group for p in self.get_players(): p.payoff = (Constants.endowment - p.contribution) + self.individual_share """ class Player(BasePlayer): contribution = models.CurrencyField(min=0, max=Constants.endowment, doc="The amount contributed by the player") training1 = models.CurrencyField(min=0, label="""""", doc="The amount contributed by the player in trainingsscenario 1") training2 = models.CurrencyField(min=0, label="""""", doc="The amount contributed by the player in trainingsscenario 2") training3 = models.CurrencyField(min=0, label="""""", doc="The amount contributed by the player in trainingsscenario 3") training4 = models.CurrencyField(min=0, label="""""", doc="The amount contributed by the player in trainingsscenario 4")