from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'cooperative_two' players_per_group = 5 num_rounds = 5 instructions_template = 'cooperative_two/instructions.html' class Subsession(BaseSubsession): def creating_session(self): for group in self.get_groups(): import random choices = [30, 40, 50] choicer = random.sample(choices, 3) group.profitrate1 = choicer[0] group.profitrate2 = choicer[1] group.profitrate3 = choicer[2] class Group(BaseGroup): profitrate1 = models.IntegerField() profitrate2 = models.IntegerField() profitrate3 = models.IntegerField() number1 = models.IntegerField() number2 = models.IntegerField() number3 = models.IntegerField() number4 = models.IntegerField() def set_payoffs(self): players = self.get_players() decisions = [p.decision for p in players] str = decisions for p in self.get_players(): if p.decision == 'A': p.payoff = self.profitrate1 * str.count('A') - p.volunteer * 100 self.number1 = str.count('A') if p.decision == 'B': p.payoff = self.profitrate2 * str.count('B') - p.volunteer * 100 self.number2 = str.count('B') if p.decision == 'C': p.payoff = self.profitrate3 * str.count('C') - p.volunteer * 100 self.number3 = str.count('C') if p.decision == 'D': p.payoff = 0 self.number4 = str.count('D') class Player(BasePlayer): volunteer = models.IntegerField( min=0, max=1 ) decision = models.StringField( choices=['A', 'B', 'C', 'D'], )