from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import numpy as np author = 'Your name here' doc = """ Stag Hunt Game """ class Constants(BaseConstants): name_in_url = 'phase_1' players_per_group = 2 num_rounds = 1 class Subsession(BaseSubsession): g1_ee = models.IntegerField(initial=-1) g2_ee = models.IntegerField(initial=-1) g3_ee = models.IntegerField(initial=-1) g4_ee = models.IntegerField(initial=-1) g5_ee = models.IntegerField(initial=-1) g6_ee = models.IntegerField(initial=-1) g7_ee = models.IntegerField(initial=-1) g8_ee = models.IntegerField(initial=-1) g9_ee = models.IntegerField(initial=-1) g10_ee = models.IntegerField(initial=-1) g11_ee = models.IntegerField(initial=-1) g12_ee = models.IntegerField(initial=-1) g13_ee = models.IntegerField(initial=-1) g14_ee = models.IntegerField(initial=-1) g15_ee = models.IntegerField(initial=-1) g16_ee = models.IntegerField(initial=-1) g1_es = models.IntegerField(initial=-1) g2_es = models.IntegerField(initial=-1) g3_es = models.IntegerField(initial=-1) g4_es = models.IntegerField(initial=-1) g5_es = models.IntegerField(initial=-1) g6_es = models.IntegerField(initial=-1) g7_es = models.IntegerField(initial=-1) g8_es = models.IntegerField(initial=-1) g9_es = models.IntegerField(initial=-1) g10_es = models.IntegerField(initial=-1) g11_es = models.IntegerField(initial=-1) g12_es = models.IntegerField(initial=-1) g13_es = models.IntegerField(initial=-1) g14_es = models.IntegerField(initial=-1) g15_es = models.IntegerField(initial=-1) g16_es = models.IntegerField(initial=-1) g1_se = models.IntegerField(initial=-1) g2_se = models.IntegerField(initial=-1) g3_se = models.IntegerField(initial=-1) g4_se = models.IntegerField(initial=-1) g5_se = models.IntegerField(initial=-1) g6_se = models.IntegerField(initial=-1) g7_se = models.IntegerField(initial=-1) g8_se = models.IntegerField(initial=-1) g9_se = models.IntegerField(initial=-1) g10_se = models.IntegerField(initial=-1) g11_se = models.IntegerField(initial=-1) g12_se = models.IntegerField(initial=-1) g13_se = models.IntegerField(initial=-1) g14_se = models.IntegerField(initial=-1) g15_se = models.IntegerField(initial=-1) g16_se = models.IntegerField(initial=-1) g1_ss = models.IntegerField(initial=-1) g2_ss = models.IntegerField(initial=-1) g3_ss = models.IntegerField(initial=-1) g4_ss = models.IntegerField(initial=-1) g5_ss = models.IntegerField(initial=-1) g6_ss = models.IntegerField(initial=-1) g7_ss = models.IntegerField(initial=-1) g8_ss = models.IntegerField(initial=-1) g9_ss = models.IntegerField(initial=-1) g10_ss = models.IntegerField(initial=-1) g11_ss = models.IntegerField(initial=-1) g12_ss = models.IntegerField(initial=-1) g13_ss = models.IntegerField(initial=-1) g14_ss = models.IntegerField(initial=-1) g15_ss = models.IntegerField(initial=-1) g16_ss = models.IntegerField(initial=-1) def creating_session(self): self.session.vars['stag_games'] = {} for i in range(1, self.session.config['num_stag'] + 1): self.session.vars['stag_games'][str(i)] = [ self.session.config['sh_' + str(i) + '_ee'], self.session.config['sh_' + str(i) + '_es'], self.session.config['sh_' + str(i) + '_se'], self.session.config['sh_' + str(i) + '_ss'] ] self.g1_ee = self.session.config['sh_1_ee'] self.g2_ee = self.session.config['sh_2_ee'] self.g3_ee = self.session.config['sh_3_ee'] self.g4_ee = self.session.config['sh_4_ee'] self.g5_ee = self.session.config['sh_5_ee'] self.g6_ee = self.session.config['sh_6_ee'] self.g7_ee = self.session.config['sh_7_ee'] self.g8_ee = self.session.config['sh_8_ee'] self.g9_ee = self.session.config['sh_9_ee'] self.g10_ee = self.session.config['sh_10_ee'] self.g11_ee = self.session.config['sh_11_ee'] self.g12_ee = self.session.config['sh_12_ee'] self.g13_ee = self.session.config['sh_13_ee'] self.g14_ee = self.session.config['sh_14_ee'] self.g15_ee = self.session.config['sh_15_ee'] self.g16_ee = self.session.config['sh_16_ee'] self.g1_es = self.session.config['sh_1_es'] self.g2_es = self.session.config['sh_2_es'] self.g3_es = self.session.config['sh_3_es'] self.g4_es = self.session.config['sh_4_es'] self.g5_es = self.session.config['sh_5_es'] self.g6_es = self.session.config['sh_6_es'] self.g7_es = self.session.config['sh_7_es'] self.g8_es = self.session.config['sh_8_es'] self.g9_es = self.session.config['sh_9_es'] self.g10_es = self.session.config['sh_10_es'] self.g11_es = self.session.config['sh_11_es'] self.g12_es = self.session.config['sh_12_es'] self.g13_es = self.session.config['sh_13_es'] self.g14_es = self.session.config['sh_14_es'] self.g15_es = self.session.config['sh_15_es'] self.g16_es = self.session.config['sh_16_es'] self.g1_se = self.session.config['sh_1_se'] self.g2_se = self.session.config['sh_2_se'] self.g3_se = self.session.config['sh_3_se'] self.g4_se = self.session.config['sh_4_se'] self.g5_se = self.session.config['sh_5_se'] self.g6_se = self.session.config['sh_6_se'] self.g7_se = self.session.config['sh_7_se'] self.g8_se = self.session.config['sh_8_se'] self.g9_se = self.session.config['sh_9_se'] self.g10_se = self.session.config['sh_10_se'] self.g11_se = self.session.config['sh_11_se'] self.g12_se = self.session.config['sh_12_se'] self.g13_se = self.session.config['sh_13_se'] self.g14_se = self.session.config['sh_14_se'] self.g15_se = self.session.config['sh_15_se'] self.g16_se = self.session.config['sh_16_se'] self.g1_ss = self.session.config['sh_1_ss'] self.g2_ss = self.session.config['sh_2_ss'] self.g3_ss = self.session.config['sh_3_ss'] self.g4_ss = self.session.config['sh_4_ss'] self.g5_ss = self.session.config['sh_5_ss'] self.g6_ss = self.session.config['sh_6_ss'] self.g7_ss = self.session.config['sh_7_ss'] self.g8_ss = self.session.config['sh_8_ss'] self.g9_ss = self.session.config['sh_9_ss'] self.g10_ss = self.session.config['sh_10_ss'] self.g11_ss = self.session.config['sh_11_ss'] self.g12_ss = self.session.config['sh_12_ss'] self.g13_ss = self.session.config['sh_13_ss'] self.g14_ss = self.session.config['sh_14_ss'] self.g15_ss = self.session.config['sh_15_ss'] self.g16_ss = self.session.config['sh_16_ss'] for g in self.get_groups(): g.payment_game = np.random.choice(list(range(1, self.session.config['num_stag'] + 1))) num_games = self.session.config['num_stag'] for p in self.get_players(): game_index = list(range(1, num_games + 1)) game_index = list(np.random.permutation(game_index)) p.participant.vars['game_index'] = game_index game_index = list(map(str, game_index)) p.game_list = '-'.join(game_index) class Group(BaseGroup): payment_game = models.IntegerField(initial=-1) class Player(BasePlayer): payment_game = models.IntegerField(initial=-1) payment_action = models.IntegerField(initial=-1) payment_action_other = models.IntegerField(initial=-1) game_list = models.StringField(initial='') payment_ee = models.IntegerField(initial=-1) payment_es = models.IntegerField(initial=-1) payment_se = models.IntegerField(initial=-1) payment_ss = models.IntegerField(initial=-1) g1_action = models.IntegerField(initial=-1) g2_action = models.IntegerField(initial=-1) g3_action = models.IntegerField(initial=-1) g4_action = models.IntegerField(initial=-1) g5_action = models.IntegerField(initial=-1) g6_action = models.IntegerField(initial=-1) g7_action = models.IntegerField(initial=-1) g8_action = models.IntegerField(initial=-1) g9_action = models.IntegerField(initial=-1) g10_action = models.IntegerField(initial=-1) g11_action = models.IntegerField(initial=-1) g12_action = models.IntegerField(initial=-1) g13_action = models.IntegerField(initial=-1) g14_action = models.IntegerField(initial=-1) g15_action = models.IntegerField(initial=-1) g16_action = models.IntegerField(initial=-1) points = models.IntegerField(initial=-1) def set_points(self): game = self.group.payment_game self.payment_game = game self.payment_action = getattr(self, 'g' + str(game) + '_action') self.payment_action_other = getattr(self.get_others_in_group()[0], 'g' + str(game) + '_action') actions = [getattr(p, 'g' + str(game) + '_action') for p in self.group.get_players()] self.participant.vars['payment_stag_game'] = [ self.session.config['sh_' + str(game) + '_ee'], self.session.config['sh_' + str(game) + '_es'], self.session.config['sh_' + str(game) + '_se'], self.session.config['sh_' + str(game) + '_ss'] ] self.payment_ee = self.session.config['sh_' + str(game) + '_ee'] self.payment_es = self.session.config['sh_' + str(game) + '_es'] self.payment_se = self.session.config['sh_' + str(game) + '_se'] self.payment_ss = self.session.config['sh_' + str(game) + '_ss'] sum_action = sum(actions) if sum_action == 2: self.points = self.session.vars['stag_games'][str(game)][0] if sum_action == 0: self.points = self.session.vars['stag_games'][str(game)][3] if sum_action == 1: if getattr(self, 'g' + str(game) + '_action') == 1: self.points = self.session.vars['stag_games'][str(game)][1] else: self.points = self.session.vars['stag_games'][str(game)][2] self.participant.vars['sh_points'] = self.points self.participant.vars['payment_action'] = self.payment_action self.participant.vars['payment_action_other'] = self.payment_action_other self.payoff = self.points * self.session.config['sh_conversion']