from otree.api import * import random # dog for emotional support doc = """ |\_/| | @ @ Woof! | <> _ | _/\------____ ((| |)) | `--' | ____|_ ___| |___.' /_/_____/____/_______| """ class C(BaseConstants): NAME_IN_URL = 'inequality_aversion_luck' # experiment needs two person groups PLAYERS_PER_GROUP = 2 NUM_ROUNDS = 1 # make a budget so can change it later if we have to class Subsession(BaseSubsession): pass def creating_session(subsession: Subsession): subsession.group_randomly() class Group(BaseGroup): pass class Player(BasePlayer): payoff1 = models.FloatField() payoff2 = models.FloatField() r1 = models.FloatField() r2 = models.FloatField() r3 = models.FloatField() r4 = models.FloatField() r5 = models.FloatField() r6 = models.FloatField() a = models.FloatField() b = models.FloatField() choice1_1 = models.PositiveIntegerField(choices=[[1, 'A'],[2, 'B']], widget=widgets.RadioSelectHorizontal) choice1_2 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice1_3 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice1_4 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice1_5 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice1_6 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice1_7 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice1_8 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice1_9 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice1_10 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice1_11 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice1_12 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice2_1 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice2_2 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice2_3 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice2_4 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice2_5 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice2_6 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice2_7 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice2_8 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice2_9 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice2_10 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice2_11 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) choice2_12 = models.PositiveIntegerField(choices=[[1, 'A'], [2, 'B']], widget=widgets.RadioSelectHorizontal) class Instruction(Page): pass class choice_list1(Page): form_model = 'player' form_fields = ['choice1_1', 'choice1_2', 'choice1_3', 'choice1_4', 'choice1_5', 'choice1_6', 'choice1_7', 'choice1_8', 'choice1_9', 'choice1_10', 'choice1_11', 'choice1_12'] @staticmethod def is_displayed(player: Player): return player.id_in_group == player.id_in_group class choice_list2(Page): form_model = 'player' form_fields = ['choice2_1', 'choice2_2', 'choice2_3', 'choice2_4', 'choice2_5', 'choice2_6', 'choice2_7', 'choice2_8', 'choice2_9', 'choice2_10', 'choice2_11', 'choice2_12'] @staticmethod def is_displayed(player: Player): return player.id_in_group == player.id_in_group class MyWaitPage1(WaitPage): @staticmethod def app_after_this_page(player: Player, upcoming_apps): player.r1 = random.random() player.r2 = random.random() player.r3 = random.random() player.r4 = random.random() player.r5 = random.random() player.r6 = random.random() player.a = int(random.random() * 12) + 1 player.b = int(random.random() * 12) + 1 class MyWaitPage(WaitPage): @staticmethod def app_after_this_page(player: Player, upcoming_apps): group = player.group p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) if p1.r1 >= p2.r1: p2.a = p1.a p2.b = p1.b elif p1.r1 < p2.r1: p1.a = p2.a p1.b = p2.b if player.r1 >= player.r2: if player.a == 1: if p1.field_maybe_none('choice1_1') == 1: p1.payoff1 = 5.0 p2.payoff1 = 5.0 elif p1.field_maybe_none('choice1_1') == 2: p1.payoff1 = 2.0 p2.payoff1 = 2.0 elif player.a == 2: if p1.field_maybe_none('choice1_2') == 1: p1.payoff1 = 4.42 p2.payoff1 = 5.58 elif p1.field_maybe_none('choice1_2') == 2: p1.payoff1 = 2.0 p2.payoff1 = 2.0 elif player.a == 3: if p1.field_maybe_none('choice1_3') == 1: p1.payoff1 = 4.36 p2.payoff1 = 5.64 elif p1.field_maybe_none('choice1_3') == 2: p1.payoff1 = 2.0 p2.payoff1 = 2.0 elif player.a == 4: if p1.field_maybe_none('choice1_4') == 1: p1.payoff1 = 4.29 p2.payoff1 = 5.71 elif p1.field_maybe_none('choice1_4') == 2: p1.payoff1 = 2.0 p2.payoff1 = 2.0 elif player.a == 5: if p1.field_maybe_none('choice1_5') == 1: p1.payoff1 = 4.19 p2.payoff1 = 5.81 elif p1.field_maybe_none('choice1_5') == 2: p1.payoff1 = 2.0 p2.payoff1 = 2.0 elif player.a == 6: if p1.field_maybe_none('choice1_6') == 1: p1.payoff1 = 4.07 p2.payoff1 = 5.93 elif p1.field_maybe_none('choice1_6') == 2: p1.payoff1 = 2.0 p2.payoff1 = 2.0 elif player.a == 7: if p1.field_maybe_none('choice1_7') == 1: p1.payoff1 = 3.86 p2.payoff1 = 6.14 elif p1.field_maybe_none('choice1_7') == 2: p1.payoff1 = 2.0 p2.payoff1 = 2.0 elif player.a == 8: if p1.field_maybe_none('choice1_8') == 1: p1.payoff1 = 3.68 p2.payoff1 = 6.32 elif p1.field_maybe_none('choice1_8') == 2: p1.payoff1 = 2.0 p2.payoff1 = 2.0 elif player.a == 9: if p1.field_maybe_none('choice1_9') == 1: p1.payoff1 = 3.33 p2.payoff1 = 6.67 elif p1.field_maybe_none('choice1_9') == 2: p1.payoff1 = 2.0 p2.payoff1 = 2.0 elif player.a == 10: if p1.field_maybe_none('choice1_10') == 1: p1.payoff1 = 2.72 p2.payoff1 = 7.28 elif p1.field_maybe_none('choice1_10') == 2: p1.payoff1 = 2.0 p2.payoff1 = 2.0 elif player.a == 11: if p1.field_maybe_none('choice1_11') == 1: p1.payoff1 = 1.43 p2.payoff1 = 8.57 elif p1.field_maybe_none('choice1_11') == 2: p1.payoff1 = 2.0 p2.payoff1 = 2.0 elif player.a == 12: if p1.field_maybe_none('choice1_12') == 1: p1.payoff1 = 0.10 p2.payoff1 = 9.90 elif p1.field_maybe_none('choice1_12') == 2: p1.payoff1 = 2.0 p2.payoff1 = 2.0 elif player.r1 < player.r2: if player.a == 1: if p2.field_maybe_none('choice1_1') == 1: p2.payoff1 = 5.0 p1.payoff1 = 5.0 elif p2.field_maybe_none('choice1_1') == 2: p2.payoff1 = 2.0 p1.payoff1 = 2.0 elif player.a == 2: if p2.field_maybe_none('choice1_2') == 1: p2.payoff1 = 4.42 p1.payoff1 = 5.58 elif p2.field_maybe_none('choice1_2') == 2: p2.payoff1 = 2.0 p1.payoff1 = 2.0 elif player.a == 3: if p2.field_maybe_none('choice1_3') == 1: p2.payoff1 = 4.36 p1.payoff1 = 5.64 elif p2.field_maybe_none('choice1_3') == 2: p2.payoff1 = 2.0 p1.payoff1 = 2.0 elif player.a == 4: if p2.field_maybe_none('choice1_4') == 1: p2.payoff1 = 4.29 p1.payoff1 = 5.71 elif p2.field_maybe_none('choice1_4') == 2: p2.payoff1 = 2.0 p1.payoff1 = 2.0 elif player.a == 5: if p2.field_maybe_none('choice1_5') == 1: p2.payoff1 = 4.19 p1.payoff1 = 5.81 elif p2.field_maybe_none('choice1_5') == 2: p2.payoff1 = 2.0 p1.payoff1 = 2.0 elif player.a == 6: if p2.field_maybe_none('choice1_6') == 1: p2.payoff1 = 4.07 p1.payoff1 = 5.93 elif p2.field_maybe_none('choice1_6') == 2: p2.payoff1 = 2.0 p1.payoff1 = 2.0 elif player.a == 7: if p2.field_maybe_none('choice1_7') == 1: p2.payoff1 = 3.86 p1.payoff1 = 6.14 elif p2.field_maybe_none('choice1_7') == 2: p2.payoff1 = 2.0 p1.payoff1 = 2.0 elif player.a == 8: if p2.field_maybe_none('choice1_8') == 1: p2.payoff1 = 3.68 p1.payoff1 = 6.32 elif p2.field_maybe_none('choice1_8') == 2: p2.payoff1 = 2.0 p1.payoff1 = 2.0 elif player.a == 9: if p2.field_maybe_none('choice1_9') == 1: p2.payoff1 = 4.19 p1.payoff1 = 5.81 elif p2.field_maybe_none('choice1_9') == 2: p2.payoff1 = 2.0 p1.payoff1 = 2.0 elif player.a == 10: if p2.field_maybe_none('choice1_10') == 1: p2.payoff1 = 2.72 p1.payoff1 = 7.28 elif p2.field_maybe_none('choice1_10') == 2: p2.payoff1 = 2.0 p1.payoff1 = 2.0 elif player.a == 11: if p2.field_maybe_none('choice1_11') == 1: p2.payoff1 = 1.43 p1.payoff1 = 8.57 elif p2.field_maybe_none('choice1_11') == 2: p2.payoff1 = 2.0 p1.payoff1 = 2.0 elif player.a == 12: if p2.field_maybe_none('choice1_12') == 1: p2.payoff1 = 0.10 p1.payoff1 = 9.90 elif p2.field_maybe_none('choice1_12') == 2: p2.payoff1 = 2.0 p1.payoff1 = 2.0 if player.r3 >= player.r4: if player.b == 1: if p1.field_maybe_none('choice2_1') == 1: p1.payoff2 = 10.0 p2.payoff2 = 0.0 elif p1.field_maybe_none('choice2_1') == 2: p1.payoff2 = 0.0 p2.payoff2 = 0.0 elif player.b == 2: if p1.field_maybe_none('choice2_2') == 1: p1.payoff2 = 10.0 p2.payoff2 = 0.0 elif p1.field_maybe_none('choice2_2') == 2: p1.payoff2 = 1.0 p2.payoff2 = 1.0 elif player.b == 3: if p1.field_maybe_none('choice2_3') == 1: p1.payoff2 = 10.0 p2.payoff2 = 0.0 elif p1.field_maybe_none('choice2_3') == 2: p1.payoff2 = 2.0 p2.payoff2 = 2.0 elif player.b == 4: if p1.field_maybe_none('choice2_4') == 1: p1.payoff2 = 10.0 p2.payoff2 = 0.0 elif p1.field_maybe_none('choice2_4') == 2: p1.payoff2 = 3.0 p2.payoff2 = 3.0 elif player.b == 5: if p1.field_maybe_none('choice2_5') == 1: p1.payoff2 = 10.0 p2.payoff2 = 0.0 elif p1.field_maybe_none('choice2_5') == 2: p1.payoff2 = 4.0 p2.payoff2 = 4.0 elif player.b == 6: if p1.field_maybe_none('choice2_6') == 1: p1.payoff2 = 10.0 p2.payoff2 = 0.0 elif p1.field_maybe_none('choice2_6') == 2: p1.payoff2 = 5.0 p2.payoff2 = 5.0 elif player.b == 7: if p1.field_maybe_none('choice2_7') == 1: p1.payoff2 = 10.0 p2.payoff2 = 0.0 elif p1.field_maybe_none('choice2_7') == 2: p1.payoff2 = 6.0 p2.payoff2 = 6.0 elif player.b == 8: if p1.field_maybe_none('choice2_8') == 1: p1.payoff2 = 10.0 p2.payoff2 = 0.0 elif p1.field_maybe_none('choice2_8') == 2: p1.payoff2 = 7.0 p2.payoff2 = 7.0 elif player.b == 9: if p1.field_maybe_none('choice2_9') == 1: p1.payoff2 = 10.0 p2.payoff2 = 0.0 elif p1.field_maybe_none('choice2_9') == 2: p1.payoff2 = 8.0 p2.payoff2 = 8.0 elif player.b == 10: if p1.field_maybe_none('choice2_10') == 1: p1.payoff2 = 10.0 p2.payoff2 = 0.0 elif p1.field_maybe_none('choice2_10') == 2: p1.payoff2 = 9.0 p2.payoff2 = 9.0 elif player.b == 11: if p1.field_maybe_none('choice2_11') == 1: p1.payoff2 = 10.0 p2.payoff2 = 0.0 elif p1.field_maybe_none('choice2_11') == 2: p1.payoff2 = 10.0 p2.payoff2 = 10.0 elif player.b == 12: if p1.field_maybe_none('choice2_12') == 1: p1.payoff2 = 10.0 p2.payoff2 = 0.0 elif p1.field_maybe_none('choice2_12') == 2: p1.payoff2 = 11.0 p2.payoff2 = 11.0 elif player.r3 < player.r4: if player.b == 1: if p2.field_maybe_none('choice2_1') == 1: p2.payoff2 = 10.0 p1.payoff2 = 0.0 elif p2.field_maybe_none('choice2_1') == 2: p2.payoff2 = 0.0 p1.payoff2 = 0.0 elif player.b == 2: if p2.field_maybe_none('choice2_2') == 1: p2.payoff2 = 10.0 p1.payoff2 = 0.0 elif p2.field_maybe_none('choice2_2') == 2: p2.payoff2 = 1.0 p1.payoff2 = 1.0 elif player.b == 3: if p2.field_maybe_none('choice2_3') == 1: p2.payoff2 = 10.0 p1.payoff2 = 0.0 elif p2.field_maybe_none('choice2_3') == 2: p2.payoff2 = 2.0 p1.payoff2 = 2.0 elif player.b == 4: if p2.field_maybe_none('choice2_4') == 1: p2.payoff2 = 10.0 p1.payoff2 = 0.0 elif p2.field_maybe_none('choice2_4') == 2: p2.payoff2 = 3.0 p1.payoff2 = 3.0 elif player.b == 5: if p2.field_maybe_none('choice2_5') == 1: p2.payoff2 = 10.0 p1.payoff2 = 0.0 elif p2.field_maybe_none('choice2_5') == 2: p2.payoff2 = 4.0 p1.payoff2 = 4.0 elif player.b == 6: if p2.field_maybe_none('choice2_6') == 1: p2.payoff2 = 10.0 p1.payoff2 = 0.0 elif p2.field_maybe_none('choice2_6') == 2: p2.payoff2 = 5.0 p1.payoff2 = 5.0 elif player.b == 7: if p2.field_maybe_none('choice2_7') == 1: p2.payoff2 = 10.0 p1.payoff2 = 0.0 elif p2.field_maybe_none('choice2_7') == 2: p2.payoff2 = 6.0 p1.payoff2 = 6.0 elif player.b == 8: if p2.field_maybe_none('choice2_8') == 1: p2.payoff2 = 10.0 p1.payoff2 = 0.0 elif p2.field_maybe_none('choice2_8') == 2: p2.payoff2 = 7.0 p1.payoff2 = 7.0 elif player.b == 9: if p2.field_maybe_none('choice2_9') == 1: p2.payoff2 = 10.0 p1.payoff2 = 0.0 elif p2.field_maybe_none('choice2_9') == 2: p2.payoff2 = 8.0 p1.payoff2 = 8.0 elif player.b == 10: if p2.field_maybe_none('choice2_10') == 1: p2.payoff2 = 10.0 p1.payoff2 = 0.0 elif p2.field_maybe_none('choice2_10') == 2: p2.payoff2 = 9.0 p1.payoff2 = 9.0 elif player.b == 11: if p2.field_maybe_none('choice2_11') == 1: p2.payoff2 = 10.0 p1.payoff2 = 0.0 elif p2.field_maybe_none('choice2_11') == 2: p2.payoff2 = 10.0 p1.payoff2 = 10.0 elif player.b == 12: if p2.field_maybe_none('choice2_12') == 1: p2.payoff2 = 10.0 p1.payoff2 = 0.0 elif p2.field_maybe_none('choice2_12') == 2: p2.payoff2 = 11.0 p1.payoff2 = 11.0 if player.r5 >= player.r6: player.payoff = p1.payoff1 player.participant.payoff_inequality = player.payoff elif player.r5 < player.r6: player.payoff = p1.payoff2 player.participant.payoff_inequality = player.payoff class Determine_payoff2(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): return player.id_in_group == player.id_in_group page_sequence = [Instruction, MyWaitPage1, choice_list1, MyWaitPage1, choice_list2, MyWaitPage, Determine_payoff2]