from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random import random import pandas as pd import itertools import numpy as np from sklearn.utils import shuffle author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'my_risk' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): # NOTE that I changed the below from Gok to Gamble for the English version risk_choice = models.CharField( choices=('Gamble 1', 'Gamble 2', 'Gamble 3', 'Gamble 4', 'Gamble 5', 'Gamble 6'), widget=widgets.RadioSelect() ) total_payoff = models.CurrencyField() risk_payout = models.IntegerField() # def set_payoffs(self): # if self.risk_choice == "Gamble 1": # self.payoff = random.choice([28, 28]) # elif self.risk_choice == "Gamble 2": # self.payoff = random.choice([24, 36]) # elif self.risk_choice == "Gamble 3": # self.payoff = random.choice([20, 44]) # elif self.risk_choice == "Gamble 4": # self.payoff = random.choice([16, 52]) # elif self.risk_choice == "Gamble 5": # self.payoff = random.choice([12, 60]) # elif self.risk_choice == "Gamble 6": # self.payoff = random.choice([2, 70]) # NOTE that I changed the below from Gok to Gamble for the English version def subject_risk_payout(self): if self.risk_choice == "Gamble 1": self.risk_payout = random.choice([28, 28]) # self.payoff = random.choice([28, 28]) elif self.risk_choice == "Gamble 2": self.risk_payout = random.choice([24, 36]) # self.payoff = random.choice([24, 36]) elif self.risk_choice == "Gamble 3": self.risk_payout = random.choice([20, 44]) # self.payoff = random.choice([20, 44]) elif self.risk_choice == "Gamble 4": self.risk_payout = random.choice([16, 52]) # self.payoff = random.choice([16, 52]) elif self.risk_choice == "Gamble 5": self.risk_payout = random.choice([12, 60]) # self.payoff = random.choice([12, 60]) elif self.risk_choice == "Gamble 6": self.risk_payout = random.choice([2, 70]) # self.payoff = random.choice([2, 70]) def save_my_choice(self): self.participant.vars['risk_choice'] = self.risk_choice self.participant.vars['risk_payout'] = self.risk_payout # self.participant.vars['risk_payout'] = 10000 def calculate_final_payout(self): self.final_payout = 0.125 * ( self.participant.vars['payout_UG'] + self.participant.vars['risk_payout'] + self.participant.vars[ 'payout_dictator'] + self.participant.vars['payout_social_priors']) if self.final_payout > 10: self.final_payout = 10 # this is commented out because I'm not sure if I should pay them for both prior estimation sessions or just 1 # + self.participant.vars['payout_nonsocial_priors'] # def round_to_pay(self): # self.round_list = range(1, self.round_number + 1) # self.payout_chosen_trial = shuffle(self.round_list) # # # self.participant.vars['payout_chosen_trial'] = self.payout_chosen_trial[0] # # # self.participant.vars['payout_chosen_trial'] = random.choice(range(1, self.round_number + 1)) # # self.trial_to_pay = self.participant.vars['payout_chosen_trial'] # # # self.participant.vars['payout_UG'] = self.group.in_round(self.trial_to_pay).payout # # self.amount_earned_on_priors_nonsocial = self.participant.vars['payout_UG'] # def whole_shebang(self): # self.my_mu_max = self.session.config['MU_MAX'] # self.ppg_mu_max = .9*self.my_mu_max # self.risk_mu_max = .1*self.my_mu_max # # self.ppg_mu_perc = self.ppg_mu_max/870 # # # self.ppg_eurocent = round(self.ppg_mu_perc*10, 2) # self.risk_mu_perc = self.risk_mu_max/70 # # # self.risk_display = round(self.participant.vars['risk_payout'] * self.risk_mu_perc, 2) # # self.total_payoff = self.participant.vars['risk_payout'] # # self.PPG = self.participant.payoff * 0.0020689655172413794 # # # self.total_payoff = self.participant.payoff * 0.00323 # # self.total_payoff = (self.participant.payoff * self.ppg_mu_perc) + (self.participant.vars['risk_payout'] * self.risk_mu_perc) # # self.total_payoff = (self.participant.payoff * self.ppg_mu_perc)