from otree.api import * import random doc = """ "Experiment" """ class Constants(BaseConstants): name_in_url = 'Ranking_Experiment' players_per_group = 2 column_role = 'column' row_role = 'row' num_rounds = 1 choices = [(random.randrange(0, 15), random.randrange(0, 15)) for i in range(16)] #choices = [] #for i in range(1, 5): #for j in range(1, 5): #choices.append((i, j)) ranks=[i+1 for i in range(0,16)] random.shuffle(choices) choicesg1 = [(2,2),(4,1),(1,4),(3,3)] random.shuffle(choicesg1) ranksg = [i + 1 for i in range(0, 4)] ranknames = [] for i in range(0,16): ranknames.append('Rank {}'.format(i+1)) rankvariables = [] for i in range(0,16): rankvariables.append('r{}'.format(i+1)) randomrank1 = random.sample(range(16), 2) randomrank2 = random.sample(range(16), 2) #randomrank_display=randomrank+1 class Subsession(BaseSubsession): def creating_session(self): for p in self.get_players(): p.random_id = p.id_in_group class Group(BaseGroup): pass class Player(BasePlayer): random_id = models.IntegerField() ranking = models.StringField() granking1 = models.StringField() #FUNCTIONS #def creating_session(self): #for p in self.get_players(): # p.participant.vars['r1']=tup(getattr(p, 'ranking'))[0] def tup(x): x=x.replace('(', '') x=x.replace(')', '') x = x.split(',') return [(int(x[2*i]),int(x[2*i+1])) for i in range(0,16)] def tup_other(x): x=x.replace('(', '') x=x.replace(')', '') x = x.split(',') return [(int(x[2*i+1]),int(x[2*i])) for i in range(0,16)] def tup2(x): x=x.replace('(', '') x=x.replace(')', '') x = x.split(',') return [(int(x[2*i]),int(x[2*i+1])) for i in range(0,4)] def set_payoffs(group): for p in group.get_players(): p.payoff = tup(p.ranking)[min(random_tup_return(p.id_in_group)[0],random_tup_return(p.id_in_group)[1])][0]+tup_other(other_player(p).ranking)[ min(random_tup_return(other_player(p).id_in_group)[0], random_tup_return(other_player(p).id_in_group)[1])][0] #tup(p.ranking)[Constants.randomrank][0]+tup(other_player(p).ranking)[Constants.randomrank][1] def other_player(player: Player): return player.get_others_in_group()[0] def random_tup(group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p1.random_tup=Constants.randomrank1 p2.random_tup=Constants.randomrank2 def random_tup_return(x): if x == 1: return Constants.randomrank1 else: return Constants.randomrank2 def custom_export(players): # header row yield ['first_participant_var'] for p in players: p.participant.vars['r1'] = tup(getattr(p, 'ranking'))[0] yield [p.participant.vars.get('r1', None)] class Instructions(Page): form_model = 'player' form_fields = ['ranking'] class Stage1(Page): form_model = 'player' form_fields = ['ranking'] class ResultsWaitPage(WaitPage): after_all_players_arrive = set_payoffs class Results(Page): @staticmethod def vars_for_template(player: Player): return { 'r1': tup(player.ranking)[0], 'r2': tup(player.ranking)[1], 'r3': tup(player.ranking)[2], 'r4': tup(player.ranking)[3], 'r5': tup(player.ranking)[4], 'r6': tup(player.ranking)[5], 'r7': tup(player.ranking)[6], 'r8': tup(player.ranking)[7], 'r9': tup(player.ranking)[8], 'r10': tup(player.ranking)[9], 'r11': tup(player.ranking)[10], 'r12': tup(player.ranking)[11], 'r13': tup(player.ranking)[12], 'r14': tup(player.ranking)[13], 'r15': tup(player.ranking)[14], 'r16': tup(player.ranking)[15], 'or1': tup_other(other_player(player).ranking)[0], 'or2': tup_other(other_player(player).ranking)[1], 'or3': tup_other(other_player(player).ranking)[2], 'or4': tup_other(other_player(player).ranking)[3], 'or5': tup_other(other_player(player).ranking)[4], 'or6': tup_other(other_player(player).ranking)[5], 'or7': tup_other(other_player(player).ranking)[6], 'or8': tup_other(other_player(player).ranking)[7], 'or9': tup_other(other_player(player).ranking)[8], 'or10': tup_other(other_player(player).ranking)[9], 'or11': tup_other(other_player(player).ranking)[10], 'or12': tup_other(other_player(player).ranking)[11], 'or13': tup_other(other_player(player).ranking)[12], 'or14': tup_other(other_player(player).ranking)[13], 'or15': tup_other(other_player(player).ranking)[14], 'or16': tup_other(other_player(player).ranking)[15], 'ranks_own': random_tup_return(player.id_in_group), 'ranks_own_higher': min(random_tup_return(player.id_in_group)), 'ranks_own_higher16': min(random_tup_return(player.id_in_group))+16, 'ranks_other': random_tup_return(other_player(player).id_in_group), 'ranks_other_higher': min(random_tup_return(other_player(player).id_in_group))+32, 'ranks_other_higher16': min(random_tup_return(other_player(player).id_in_group))+48, 'tuples_own1': tup(player.ranking)[random_tup_return(player.id_in_group)[0]], 'tuples_own2': tup(player.ranking)[random_tup_return(player.id_in_group)[1]], 'tuples_own_higher':tup(player.ranking)[min(random_tup_return(player.id_in_group)[0],random_tup_return(player.id_in_group)[1])], 'tuples_own_pay': tup(player.ranking)[min(random_tup_return(player.id_in_group)[0],random_tup_return(player.id_in_group)[1])][0], 'tuples_other1': tup_other(other_player(player).ranking)[random_tup_return(other_player(player).id_in_group)[0]], 'tuples_other2': tup_other(other_player(player).ranking)[random_tup_return(other_player(player).id_in_group)[1]], 'tuples_other_higher': tup_other(other_player(player).ranking)[ min(random_tup_return(other_player(player).id_in_group)[0], random_tup_return(other_player(player).id_in_group)[1])], 'tuples_other_pay': tup_other(other_player(player).ranking)[ min(random_tup_return(other_player(player).id_in_group)[0], random_tup_return(other_player(player).id_in_group)[1])][0], } class test(Page): pass page_sequence = [Instructions,ResultsWaitPage,Results]