from otree.api import * c = cu doc = '' class C(BaseConstants): NAME_IN_URL = 'Exp_In_Unsa_New' PLAYERS_PER_GROUP = 6 NUM_ROUNDS = 1 SHOW_UP_FEE = 5 BEGINNING_ASSET_VALUE = 150 RANDOM_FACTOR_MAX = 50 RANDOM_FACTOR_MIN = -50 BONUS_FACTOR_MIN = 0 BONUS_FACTOR_MAX = 100 PREDICTION_BONUS = 5 BEFORE_ROLE_ASSIGNMENT_TEMPLATE = 'Exp_In_Unsa_New/before_role_assignment.html' ROLE_BUYER_TEMPLATE = 'Exp_In_Unsa_New/role_buyer.html' ROLE_OWNER_TEMPLATE = 'Exp_In_Unsa_New/role_owner.html' PR_O1_RESULT_TEMPLATE = 'Exp_In_Unsa_New/pr_o1_result.html' PR_O2_RESULT_TEMPLATE = 'Exp_In_Unsa_New/pr_o2_result.html' PR_O3_RESULT_TEMPLATE = 'Exp_In_Unsa_New/pr_o3_result.html' PR_B_RESULT_TEMPLATE = 'Exp_In_Unsa_New/pr_b_result.html' PR_O1_RESULT_2_TEMPLATE = 'Exp_In_Unsa_New/pr_o1_result_2.html' PR_O2_RESULT_2_TEMPLATE = 'Exp_In_Unsa_New/pr_o2_result_2.html' PR_O3_RESULT_2_TEMPLATE = 'Exp_In_Unsa_New/pr_o3_result_2.html' PR_B_RESULT_2_TEMPLATE = 'Exp_In_Unsa_New/pr_b_result_2.html' PR_COMPLETED_TEMPLATE = 'Exp_In_Unsa_New/pr_completed.html' R1_PRE_BIDDING_TEMPLATE = 'Exp_In_Unsa_New/r1_pre_bidding.html' R1_RESULTS_BUYER_TEMPLATE = 'Exp_In_Unsa_New/r1_results_buyer.html' R1_O1_RESULTS_TEMPLATE = 'Exp_In_Unsa_New/r1_o1_results.html' R1_O2_RESULTS_TEMPLATE = 'Exp_In_Unsa_New/r1_o2_results.html' R1_O3_RESULTS_TEMPLATE = 'Exp_In_Unsa_New/r1_o3_results.html' R2_PRE_BIDDING_TEMPLATE = 'Exp_In_Unsa_New/r2_pre_bidding.html' R2_RESULTS_BUYER_TEMPLATE = 'Exp_In_Unsa_New/r2_results_buyer.html' R2_O1_RESULTS_TEMPLATE = 'Exp_In_Unsa_New/r2_o1_results.html' R2_O2_RESULTS_TEMPLATE = 'Exp_In_Unsa_New/r2_o2_results.html' R2_O3_RESULTS_TEMPLATE = 'Exp_In_Unsa_New/r2_o3_results.html' R3_PRE_BIDDING_TEMPLATE = 'Exp_In_Unsa_New/r3_pre_bidding.html' R3_RESULTS_BUYER_TEMPLATE = 'Exp_In_Unsa_New/r3_results_buyer.html' R3_O1_RESULTS_TEMPLATE = 'Exp_In_Unsa_New/r3_o1_results.html' R3_O2_RESULTS_TEMPLATE = 'Exp_In_Unsa_New/r3_o2_results.html' R3_O3_RESULTS_TEMPLATE = 'Exp_In_Unsa_New/r3_o3_results.html' R4_PRE_BIDDING_TEMPLATE = 'Exp_In_Unsa_New/r4_pre_bidding.html' R4_RESULTS_BUYER_TEMPLATE = 'Exp_In_Unsa_New/r4_results_buyer.html' R4_O1_RESULTS_TEMPLATE = 'Exp_In_Unsa_New/r4_o1_results.html' R4_O2_RESULTS_TEMPLATE = 'Exp_In_Unsa_New/r4_o2_results.html' R4_O3_RESULTS_TEMPLATE = 'Exp_In_Unsa_New/r4_o3_results.html' R5_PRE_BIDDING_TEMPLATE = 'Exp_In_Unsa_New/r5_pre_bidding.html' R5_RESULTS_BUYER_TEMPLATE = 'Exp_In_Unsa_New/r5_results_buyer.html' R5_O1_RESULTS_TEMPLATE = 'Exp_In_Unsa_New/r5_o1_results.html' R5_O2_RESULTS_TEMPLATE = 'Exp_In_Unsa_New/r5_o2_results.html' R5_O3_RESULTS_TEMPLATE = 'Exp_In_Unsa_New/r5_o3_results.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): PR_O1_P = models.IntegerField() PR_O2_P = models.IntegerField() PR_O3_P = models.IntegerField() PR_O1_PS = models.StringField() PR_O2_PS = models.StringField() PR_O3_PS = models.StringField() PR_O1_E = models.IntegerField() PR_O2_E = models.IntegerField() PR_O3_E = models.IntegerField() PR_O1_OM = models.FloatField(initial=0) PR_O1_OL = models.FloatField(initial=0) PR_O1_UM = models.FloatField(initial=0) PR_O1_UL = models.FloatField(initial=0) PR_O2_OM = models.FloatField(initial=0) PR_O2_OL = models.FloatField(initial=0) PR_O2_UM = models.FloatField(initial=0) PR_O2_UL = models.FloatField(initial=0) PR_O3_OM = models.FloatField(initial=0) PR_O3_OL = models.FloatField(initial=0) PR_O3_UM = models.FloatField(initial=0) PR_O3_UL = models.FloatField(initial=0) PR_A1 = models.FloatField() PR_A2 = models.FloatField() PR_A3 = models.FloatField() PR_O1_OM_P = models.FloatField() PR_O2_OM_P = models.FloatField() PR_O3_OM_P = models.FloatField() PR_O1_OL_P = models.FloatField() PR_O2_OL_P = models.FloatField() PR_O3_OL_P = models.FloatField() PR_O1_UM_P = models.FloatField() PR_O2_UM_P = models.FloatField() PR_O3_UM_P = models.FloatField() PR_O1_UL_P = models.FloatField() PR_O2_UL_P = models.FloatField() PR_O3_UL_P = models.FloatField() R1_O1_P = models.IntegerField() R1_O2_P = models.IntegerField() R1_O3_P = models.IntegerField() R2_O1_P = models.IntegerField() R2_O2_P = models.IntegerField() R2_O3_P = models.IntegerField() R3_O1_P = models.IntegerField() R3_O2_P = models.IntegerField() R3_O3_P = models.IntegerField() R4_O1_P = models.IntegerField() R4_O2_P = models.IntegerField() R4_O3_P = models.IntegerField() R5_O1_P = models.IntegerField() R5_O2_P = models.IntegerField() R5_O3_P = models.IntegerField() R1_O1_PS = models.StringField() R1_O2_PS = models.StringField() R1_O3_PS = models.StringField() R2_O1_PS = models.StringField() R2_O2_PS = models.StringField() R2_O3_PS = models.StringField() R3_O1_PS = models.StringField() R3_O2_PS = models.StringField() R3_O3_PS = models.StringField() R4_O1_PS = models.StringField() R4_O2_PS = models.StringField() R4_O3_PS = models.StringField() R5_O1_PS = models.StringField() R5_O2_PS = models.StringField() R5_O3_PS = models.StringField() R1_O1_E = models.IntegerField() R1_O2_E = models.IntegerField() R1_O3_E = models.IntegerField() R2_O1_E = models.IntegerField() R2_O2_E = models.IntegerField() R2_O3_E = models.IntegerField() R3_O1_E = models.IntegerField() R3_O2_E = models.IntegerField() R3_O3_E = models.IntegerField() R4_O1_E = models.IntegerField() R4_O2_E = models.IntegerField() R4_O3_E = models.IntegerField() R5_O1_E = models.IntegerField() R5_O2_E = models.IntegerField() R5_O3_E = models.IntegerField() R1_O1_OM = models.FloatField(initial=0) R2_O1_OM = models.FloatField(initial=0) R3_O1_OM = models.FloatField(initial=0) R4_O1_OM = models.FloatField(initial=0) R5_O1_OM = models.FloatField(initial=0) R1_O1_OL = models.FloatField(initial=0) R2_O1_OL = models.FloatField(initial=0) R3_O1_OL = models.FloatField(initial=0) R4_O1_OL = models.FloatField(initial=0) R5_O1_OL = models.FloatField(initial=0) R1_O1_UM = models.FloatField(initial=0) R2_O1_UM = models.FloatField(initial=0) R3_O1_UM = models.FloatField(initial=0) R4_O1_UM = models.FloatField(initial=0) R5_O1_UM = models.FloatField(initial=0) R1_O1_UL = models.FloatField(initial=0) R2_O1_UL = models.FloatField(initial=0) R3_O1_UL = models.FloatField(initial=0) R4_O1_UL = models.FloatField(initial=0) R5_O1_UL = models.FloatField(initial=0) R1_O2_OM = models.FloatField(initial=0) R2_O2_OM = models.FloatField(initial=0) R3_O2_OM = models.FloatField(initial=0) R4_O2_OM = models.FloatField(initial=0) R5_O2_OM = models.FloatField(initial=0) R1_O2_OL = models.FloatField(initial=0) R2_O2_OL = models.FloatField(initial=0) R3_O2_OL = models.FloatField(initial=0) R4_O2_OL = models.FloatField(initial=0) R5_O2_OL = models.FloatField(initial=0) R1_O2_UM = models.FloatField(initial=0) R2_O2_UM = models.FloatField(initial=0) R3_O2_UM = models.FloatField(initial=0) R4_O2_UM = models.FloatField(initial=0) R5_O2_UM = models.FloatField(initial=0) R1_O2_UL = models.FloatField(initial=0) R2_O2_UL = models.FloatField(initial=0) R3_O2_UL = models.FloatField(initial=0) R4_O2_UL = models.FloatField(initial=0) R5_O2_UL = models.FloatField(initial=0) R1_O3_OM = models.FloatField(initial=0) R2_O3_OM = models.FloatField(initial=0) R3_O3_OM = models.FloatField(initial=0) R4_O3_OM = models.FloatField(initial=0) R5_O3_OM = models.FloatField(initial=0) R1_O3_OL = models.FloatField(initial=0) R2_O3_OL = models.FloatField(initial=0) R3_O3_OL = models.FloatField(initial=0) R4_O3_OL = models.FloatField(initial=0) R5_O3_OL = models.FloatField(initial=0) R1_O3_UM = models.FloatField(initial=0) R2_O3_UM = models.FloatField(initial=0) R3_O3_UM = models.FloatField(initial=0) R4_O3_UM = models.FloatField(initial=0) R5_O3_UM = models.FloatField(initial=0) R1_O3_UL = models.FloatField(initial=0) R2_O3_UL = models.FloatField(initial=0) R3_O3_UL = models.FloatField(initial=0) R4_O3_UL = models.FloatField(initial=0) R5_O3_UL = models.FloatField(initial=0) R1_A1 = models.FloatField() R2_A1 = models.FloatField() R3_A1 = models.FloatField() R4_A1 = models.FloatField() R5_A1 = models.FloatField() R1_A2 = models.FloatField() R2_A2 = models.FloatField() R3_A2 = models.FloatField() R4_A2 = models.FloatField() R5_A2 = models.FloatField() R1_A3 = models.FloatField() R2_A3 = models.FloatField() R3_A3 = models.FloatField() R4_A3 = models.FloatField() R5_A3 = models.FloatField() R1_A1_WIN_Bid = models.IntegerField() R2_A1_WIN_Bid = models.IntegerField() R3_A1_WIN_Bid = models.IntegerField() R4_A1_WIN_Bid = models.IntegerField() R5_A1_WIN_Bid = models.IntegerField() R1_A2_WIN_Bid = models.IntegerField() R2_A2_WIN_Bid = models.IntegerField() R3_A2_WIN_Bid = models.IntegerField() R4_A2_WIN_Bid = models.IntegerField() R5_A2_WIN_Bid = models.IntegerField() R1_A3_WIN_Bid = models.IntegerField() R2_A3_WIN_Bid = models.IntegerField() R3_A3_WIN_Bid = models.IntegerField() R4_A3_WIN_Bid = models.IntegerField() R5_A3_WIN_Bid = models.IntegerField() R1_A1_WIN_Bidder = models.StringField() R2_A1_WIN_Bidder = models.StringField() R3_A1_WIN_Bidder = models.StringField() R4_A1_WIN_Bidder = models.StringField() R5_A1_WIN_Bidder = models.StringField() R1_A2_WIN_Bidder = models.StringField() R2_A2_WIN_Bidder = models.StringField() R3_A2_WIN_Bidder = models.StringField() R4_A2_WIN_Bidder = models.StringField() R5_A2_WIN_Bidder = models.StringField() R1_A3_WIN_Bidder = models.StringField() R2_A3_WIN_Bidder = models.StringField() R3_A3_WIN_Bidder = models.StringField() R4_A3_WIN_Bidder = models.StringField() R5_A3_WIN_Bidder = models.StringField() PR_O1_OM_Per = models.FloatField(initial=0) PR_O2_OM_Per = models.FloatField(initial=0) PR_O3_OM_Per = models.FloatField(initial=0) R1_O1_OM_Per = models.FloatField(initial=0) R1_O2_OM_Per = models.FloatField(initial=0) R1_O3_OM_Per = models.FloatField(initial=0) R2_O1_OM_Per = models.FloatField(initial=0) R2_O2_OM_Per = models.FloatField(initial=0) R2_O3_OM_Per = models.FloatField(initial=0) R3_O1_OM_Per = models.FloatField(initial=0) R3_O2_OM_Per = models.FloatField(initial=0) R3_O3_OM_Per = models.FloatField(initial=0) R4_O1_OM_Per = models.FloatField(initial=0) R4_O2_OM_Per = models.FloatField(initial=0) R4_O3_OM_Per = models.FloatField(initial=0) R5_O1_OM_Per = models.FloatField(initial=0) R5_O2_OM_Per = models.FloatField(initial=0) R5_O3_OM_Per = models.FloatField(initial=0) PR_O1_OL_Per = models.FloatField(initial=0) PR_O2_OL_Per = models.FloatField(initial=0) PR_O3_OL_Per = models.FloatField(initial=0) R1_O1_OL_Per = models.FloatField(initial=0) R1_O2_OL_Per = models.FloatField(initial=0) R1_O3_OL_Per = models.FloatField(initial=0) R2_O1_OL_Per = models.FloatField(initial=0) R2_O2_OL_Per = models.FloatField(initial=0) R2_O3_OL_Per = models.FloatField(initial=0) R3_O1_OL_Per = models.FloatField(initial=0) R3_O2_OL_Per = models.FloatField(initial=0) R3_O3_OL_Per = models.FloatField(initial=0) R4_O1_OL_Per = models.FloatField(initial=0) R4_O2_OL_Per = models.FloatField(initial=0) R4_O3_OL_Per = models.FloatField(initial=0) R5_O1_OL_Per = models.FloatField(initial=0) R5_O2_OL_Per = models.FloatField(initial=0) R5_O3_OL_Per = models.FloatField(initial=0) PR_O1_UM_Per = models.FloatField(initial=0) PR_O2_UM_Per = models.FloatField(initial=0) PR_O3_UM_Per = models.FloatField(initial=0) R1_O1_UM_Per = models.FloatField(initial=0) R1_O2_UM_Per = models.FloatField(initial=0) R1_O3_UM_Per = models.FloatField(initial=0) R2_O1_UM_Per = models.FloatField(initial=0) R2_O2_UM_Per = models.FloatField(initial=0) R2_O3_UM_Per = models.FloatField(initial=0) R3_O1_UM_Per = models.FloatField(initial=0) R3_O2_UM_Per = models.FloatField(initial=0) R3_O3_UM_Per = models.FloatField(initial=0) R4_O1_UM_Per = models.FloatField(initial=0) R4_O2_UM_Per = models.FloatField(initial=0) R4_O3_UM_Per = models.FloatField(initial=0) R5_O1_UM_Per = models.FloatField(initial=0) R5_O2_UM_Per = models.FloatField(initial=0) R5_O3_UM_Per = models.FloatField(initial=0) PR_O1_UL_Per = models.FloatField(initial=0) PR_O2_UL_Per = models.FloatField(initial=0) PR_O3_UL_Per = models.FloatField(initial=0) R1_O1_UL_Per = models.FloatField(initial=0) R1_O2_UL_Per = models.FloatField(initial=0) R1_O3_UL_Per = models.FloatField(initial=0) R2_O1_UL_Per = models.FloatField(initial=0) R2_O2_UL_Per = models.FloatField(initial=0) R2_O3_UL_Per = models.FloatField(initial=0) R3_O1_UL_Per = models.FloatField(initial=0) R3_O2_UL_Per = models.FloatField(initial=0) R3_O3_UL_Per = models.FloatField(initial=0) R4_O1_UL_Per = models.FloatField(initial=0) R4_O2_UL_Per = models.FloatField(initial=0) R4_O3_UL_Per = models.FloatField(initial=0) R5_O1_UL_Per = models.FloatField(initial=0) R5_O2_UL_Per = models.FloatField(initial=0) R5_O3_UL_Per = models.FloatField(initial=0) def PR_Accuracy(group: Group): #Calculate the denominator owner_1_total = group.PR_O1_OM + group.PR_O1_OL + group.PR_O1_UM + group.PR_O1_UL owner_2_total = group.PR_O2_OM + group.PR_O2_OL + group.PR_O2_UM + group.PR_O2_UL owner_3_total = group.PR_O3_OM + group.PR_O3_OL + group.PR_O3_UM + group.PR_O3_UL if owner_1_total == 0: owner_1_total = 1 if owner_2_total == 0: owner_2_total = 1 if owner_3_total == 0: owner_3_total = 1 #Calculate the percentage owner_1_Over_MoreThan_50_percentage = (group.PR_O1_OM / owner_1_total) * 100 group.PR_O1_OM_P = round(owner_1_Over_MoreThan_50_percentage, 0) group.PR_O1_OM_Per = round(owner_1_Over_MoreThan_50_percentage, 0) owner_2_Over_MoreThan_50_percentage = (group.PR_O2_OM / owner_2_total) * 100 group.PR_O2_OM_P = round(owner_2_Over_MoreThan_50_percentage, 0) group.PR_O2_OM_Per = round(owner_2_Over_MoreThan_50_percentage, 0) owner_3_Over_MoreThan_50_percentage = (group.PR_O3_OM / owner_3_total) * 100 group.PR_O3_OM_P = round(owner_3_Over_MoreThan_50_percentage, 0) group.PR_O3_OM_Per = round(owner_3_Over_MoreThan_50_percentage, 0) owner_1_Over_LessThan_50_percentage = (group.PR_O1_OL / owner_1_total) * 100 group.PR_O1_OL_P = round(owner_1_Over_LessThan_50_percentage, 0) group.PR_O1_OL_Per = round(owner_1_Over_LessThan_50_percentage, 0) owner_2_Over_LessThan_50_percentage = (group.PR_O2_OL / owner_2_total) * 100 group.PR_O2_OL_P = round(owner_2_Over_LessThan_50_percentage, 0) group.PR_O2_OL_Per = round(owner_2_Over_LessThan_50_percentage, 0) owner_3_Over_LessThan_50_percentage = (group.PR_O3_OL / owner_3_total) * 100 group.PR_O3_OL_P = round(owner_3_Over_LessThan_50_percentage, 0) group.PR_O3_OL_Per = round(owner_3_Over_LessThan_50_percentage, 0) owner_1_Under_MoreThan_50_percentage = (group.PR_O1_UM / owner_1_total) * 100 group.PR_O1_UM_P = round(owner_1_Under_MoreThan_50_percentage, 0) group.PR_O1_UM_Per = round(owner_1_Under_MoreThan_50_percentage, 0) owner_2_Under_MoreThan_50_percentage = (group.PR_O2_UM / owner_2_total) * 100 group.PR_O2_UM_P = round(owner_2_Under_MoreThan_50_percentage, 0) group.PR_O2_UM_Per = round(owner_2_Under_MoreThan_50_percentage, 0) owner_3_Under_MoreThan_50_percentage = (group.PR_O3_UM / owner_3_total) * 100 group.PR_O3_UM_P = round(owner_3_Under_MoreThan_50_percentage, 0) group.PR_O3_UM_Per = round(owner_3_Under_MoreThan_50_percentage, 0) owner_1_Under_LessThan_50_percentage = (group.PR_O1_UL / owner_1_total) * 100 group.PR_O1_UL_P = round(owner_1_Under_LessThan_50_percentage, 0) group.PR_O1_UL_Per = round(owner_1_Under_LessThan_50_percentage, 0) owner_2_Under_LessThan_50_percentage = (group.PR_O2_UL / owner_2_total) * 100 group.PR_O2_UL_P = round(owner_2_Under_LessThan_50_percentage, 0) group.PR_O2_UL_Per = round(owner_2_Under_LessThan_50_percentage, 0) owner_3_Under_LessThan_50_percentage = (group.PR_O3_UL / owner_3_total) * 100 group.PR_O3_UL_P = round(owner_3_Under_LessThan_50_percentage, 0) group.PR_O3_UL_Per = round(owner_3_Under_LessThan_50_percentage, 0) def R1_Accuracy(group: Group): #Calculate the denominator owner_1_total = group.PR_O1_OM + group.PR_O1_OL + group.PR_O1_UM + group.PR_O1_UL + group.R1_O1_OM + group.R1_O1_OL + group.R1_O1_UM + group.R1_O1_UL owner_2_total = group.PR_O2_OM + group.PR_O2_OL + group.PR_O2_UM + group.PR_O2_UL + group.R1_O2_OM + group.R1_O2_OL + group.R1_O2_UM + group.R1_O2_UL owner_3_total = group.PR_O3_OM + group.PR_O3_OL + group.PR_O3_UM + group.PR_O3_UL + group.R1_O3_OM + group.R1_O3_OL + group.R1_O3_UM + group.R1_O3_UL if owner_1_total == 0: owner_1_total = 1 if owner_2_total == 0: owner_2_total = 1 if owner_3_total == 0: owner_3_total = 1 #Calculate the numerator owner_1_OM = group.PR_O1_OM + group.R1_O1_OM owner_1_OL = group.PR_O1_OL + group.R1_O1_OL owner_1_UM = group.PR_O1_UM + group.R1_O1_UM owner_1_UL = group.PR_O1_UL + group.R1_O1_UL owner_2_OM = group.PR_O2_OM + group.R1_O2_OM owner_2_OL = group.PR_O2_OL + group.R1_O2_OL owner_2_UM = group.PR_O2_UM + group.R1_O2_UM owner_2_UL = group.PR_O2_UL + group.R1_O2_UL owner_3_OM = group.PR_O3_OM + group.R1_O3_OM owner_3_OL = group.PR_O3_OL + group.R1_O3_OL owner_3_UM = group.PR_O3_UM + group.R1_O3_UM owner_3_UL = group.PR_O3_UL + group.R1_O3_UL #Calculate the percentage owner_1_Over_MoreThan_50_percentage = (owner_1_OM / owner_1_total) * 100 group.PR_O1_OM_P = round(owner_1_Over_MoreThan_50_percentage, 0) group.R1_O1_OM_Per = round(owner_1_Over_MoreThan_50_percentage, 0) owner_2_Over_MoreThan_50_percentage = (owner_2_OM / owner_2_total) * 100 group.PR_O2_OM_P = round(owner_2_Over_MoreThan_50_percentage, 0) group.R1_O2_OM_Per = round(owner_2_Over_MoreThan_50_percentage, 0) owner_3_Over_MoreThan_50_percentage = (owner_3_OM / owner_3_total) * 100 group.PR_O3_OM_P = round(owner_3_Over_MoreThan_50_percentage, 0) group.R1_O3_OM_Per = round(owner_3_Over_MoreThan_50_percentage, 0) owner_1_Over_LessThan_50_percentage = (owner_1_OL / owner_1_total) * 100 group.PR_O1_OL_P = round(owner_1_Over_LessThan_50_percentage, 0) group.R1_O1_OL_Per = round(owner_1_Over_LessThan_50_percentage, 0) owner_2_Over_LessThan_50_percentage = (owner_2_OL / owner_2_total) * 100 group.PR_O2_OL_P = round(owner_2_Over_LessThan_50_percentage, 0) group.R1_O2_OL_Per = round(owner_2_Over_LessThan_50_percentage, 0) owner_3_Over_LessThan_50_percentage = (owner_3_OL / owner_3_total) * 100 group.PR_O3_OL_P = round(owner_3_Over_LessThan_50_percentage, 0) group.R1_O3_OL_Per = round(owner_3_Over_LessThan_50_percentage, 0) owner_1_Under_MoreThan_50_percentage = (owner_1_UM / owner_1_total) * 100 group.PR_O1_UM_P = round(owner_1_Under_MoreThan_50_percentage, 0) group.R1_O1_UM_Per = round(owner_1_Under_MoreThan_50_percentage, 0) owner_2_Under_MoreThan_50_percentage = (owner_2_UM / owner_2_total) * 100 group.PR_O2_UM_P = round(owner_2_Under_MoreThan_50_percentage, 0) group.R1_O2_UM_Per = round(owner_2_Under_MoreThan_50_percentage, 0) owner_3_Under_MoreThan_50_percentage = (owner_3_UM / owner_3_total) * 100 group.PR_O3_UM_P = round(owner_3_Under_MoreThan_50_percentage, 0) group.R1_O3_UM_Per = round(owner_3_Under_MoreThan_50_percentage, 0) owner_1_Under_LessThan_50_percentage = (owner_1_UL / owner_1_total) * 100 group.PR_O1_UL_P = round(owner_1_Under_LessThan_50_percentage, 0) group.R1_O1_UL_Per = round(owner_1_Under_LessThan_50_percentage, 0) owner_2_Under_LessThan_50_percentage = (owner_2_UL / owner_2_total) * 100 group.PR_O2_UL_P = round(owner_2_Under_LessThan_50_percentage, 0) group.R1_O2_UL_Per = round(owner_2_Under_LessThan_50_percentage, 0) owner_3_Under_LessThan_50_percentage = (owner_3_UL / owner_3_total) * 100 group.PR_O3_UL_P = round(owner_3_Under_LessThan_50_percentage, 0) group.R1_O3_UL_Per = round(owner_3_Under_LessThan_50_percentage, 0) def R2_Accuracy(group: Group): #Calculate the denominator owner_1_total = group.PR_O1_OM + group.PR_O1_OL + group.PR_O1_UM + group.PR_O1_UL + group.R1_O1_OM + group.R1_O1_OL + group.R1_O1_UM + group.R1_O1_UL + group.R2_O1_OM + group.R2_O1_OL + group.R2_O1_UM + group.R2_O1_UL owner_2_total = group.PR_O2_OM + group.PR_O2_OL + group.PR_O2_UM + group.PR_O2_UL + group.R1_O2_OM + group.R1_O2_OL + group.R1_O2_UM + group.R1_O2_UL + group.R2_O2_OM + group.R2_O2_OL + group.R2_O2_UM + group.R2_O2_UL owner_3_total = group.PR_O3_OM + group.PR_O3_OL + group.PR_O3_UM + group.PR_O3_UL + group.R1_O3_OM + group.R1_O3_OL + group.R1_O3_UM + group.R1_O3_UL + group.R2_O3_OM + group.R2_O3_OL + group.R2_O3_UM + group.R2_O3_UL if owner_1_total == 0: owner_1_total = 1 if owner_2_total == 0: owner_2_total = 1 if owner_3_total == 0: owner_3_total = 1 #Calculate the numerator owner_1_OM = group.PR_O1_OM + group.R1_O1_OM + group.R2_O1_OM owner_1_OL = group.PR_O1_OL + group.R1_O1_OL + group.R2_O1_OL owner_1_UM = group.PR_O1_UM + group.R1_O1_UM + group.R2_O1_UM owner_1_UL = group.PR_O1_UL + group.R1_O1_UL + group.R2_O1_UL owner_2_OM = group.PR_O2_OM + group.R1_O2_OM + group.R2_O2_OM owner_2_OL = group.PR_O2_OL + group.R1_O2_OL + group.R2_O2_OL owner_2_UM = group.PR_O2_UM + group.R1_O2_UM + group.R2_O2_UM owner_2_UL = group.PR_O2_UL + group.R1_O2_UL + group.R2_O2_UL owner_3_OM = group.PR_O3_OM + group.R1_O3_OM + group.R2_O3_OM owner_3_OL = group.PR_O3_OL + group.R1_O3_OL + group.R2_O3_OL owner_3_UM = group.PR_O3_UM + group.R1_O3_UM + group.R2_O3_UM owner_3_UL = group.PR_O3_UL + group.R1_O3_UL + group.R2_O3_UL #Calculate the percentage owner_1_Over_MoreThan_50_percentage = (owner_1_OM / owner_1_total) * 100 group.PR_O1_OM_P = round(owner_1_Over_MoreThan_50_percentage, 0) group.R2_O1_OM_Per = round(owner_1_Over_MoreThan_50_percentage, 0) owner_2_Over_MoreThan_50_percentage = (owner_2_OM / owner_2_total) * 100 group.PR_O2_OM_P = round(owner_2_Over_MoreThan_50_percentage, 0) group.R2_O2_OM_Per = round(owner_2_Over_MoreThan_50_percentage, 0) owner_3_Over_MoreThan_50_percentage = (owner_3_OM / owner_3_total) * 100 group.PR_O3_OM_P = round(owner_3_Over_MoreThan_50_percentage, 0) group.R2_O3_OM_Per = round(owner_3_Over_MoreThan_50_percentage, 0) owner_1_Over_LessThan_50_percentage = (owner_1_OL / owner_1_total) * 100 group.PR_O1_OL_P = round(owner_1_Over_LessThan_50_percentage, 0) group.R2_O1_OL_Per = round(owner_1_Over_LessThan_50_percentage, 0) owner_2_Over_LessThan_50_percentage = (owner_2_OL / owner_2_total) * 100 group.PR_O2_OL_P = round(owner_2_Over_LessThan_50_percentage, 0) group.R2_O2_OL_Per = round(owner_2_Over_LessThan_50_percentage, 0) owner_3_Over_LessThan_50_percentage = (owner_3_OL / owner_3_total) * 100 group.PR_O3_OL_P = round(owner_3_Over_LessThan_50_percentage, 0) group.R2_O3_OL_Per = round(owner_3_Over_LessThan_50_percentage, 0) owner_1_Under_MoreThan_50_percentage = (owner_1_UM / owner_1_total) * 100 group.PR_O1_UM_P = round(owner_1_Under_MoreThan_50_percentage, 0) group.R2_O1_UM_Per = round(owner_1_Under_MoreThan_50_percentage, 0) owner_2_Under_MoreThan_50_percentage = (owner_2_UM / owner_2_total) * 100 group.PR_O2_UM_P = round(owner_2_Under_MoreThan_50_percentage, 0) group.R2_O2_UM_Per = round(owner_2_Under_MoreThan_50_percentage, 0) owner_3_Under_MoreThan_50_percentage = (owner_3_UM / owner_3_total) * 100 group.PR_O3_UM_P = round(owner_3_Under_MoreThan_50_percentage, 0) group.R2_O3_UM_Per = round(owner_3_Under_MoreThan_50_percentage, 0) owner_1_Under_LessThan_50_percentage = (owner_1_UL / owner_1_total) * 100 group.PR_O1_UL_P = round(owner_1_Under_LessThan_50_percentage, 0) group.R2_O1_UL_Per = round(owner_1_Under_LessThan_50_percentage, 0) owner_2_Under_LessThan_50_percentage = (owner_2_UL / owner_2_total) * 100 group.PR_O2_UL_P = round(owner_2_Under_LessThan_50_percentage, 0) group.R2_O2_UL_Per = round(owner_2_Under_LessThan_50_percentage, 0) owner_3_Under_LessThan_50_percentage = (owner_3_UL / owner_3_total) * 100 group.PR_O3_UL_P = round(owner_3_Under_LessThan_50_percentage, 0) group.R2_O3_UL_Per = round(owner_3_Under_LessThan_50_percentage, 0) def R3_Accuracy(group: Group): #Calculate the denominator owner_1_total = group.PR_O1_OM + group.PR_O1_OL + group.PR_O1_UM + group.PR_O1_UL + group.R1_O1_OM + group.R1_O1_OL + group.R1_O1_UM + group.R1_O1_UL + group.R2_O1_OM + group.R2_O1_OL + group.R2_O1_UM + group.R2_O1_UL + group.R3_O1_OM + group.R3_O1_OL + group.R3_O1_UM + group.R3_O1_UL owner_2_total = group.PR_O2_OM + group.PR_O2_OL + group.PR_O2_UM + group.PR_O2_UL + group.R1_O2_OM + group.R1_O2_OL + group.R1_O2_UM + group.R1_O2_UL + group.R2_O2_OM + group.R2_O2_OL + group.R2_O2_UM + group.R2_O2_UL + group.R3_O2_OM + group.R3_O2_OL + group.R3_O2_UM + group.R3_O2_UL owner_3_total = group.PR_O3_OM + group.PR_O3_OL + group.PR_O3_UM + group.PR_O3_UL + group.R1_O3_OM + group.R1_O3_OL + group.R1_O3_UM + group.R1_O3_UL + group.R2_O3_OM + group.R2_O3_OL + group.R2_O3_UM + group.R2_O3_UL + group.R3_O3_OM + group.R3_O3_OL + group.R3_O3_UM + group.R3_O3_UL if owner_1_total == 0: owner_1_total = 1 if owner_2_total == 0: owner_2_total = 1 if owner_3_total == 0: owner_3_total = 1 #Calculate the numerator owner_1_OM = group.PR_O1_OM + group.R1_O1_OM + group.R2_O1_OM + group.R3_O1_OM owner_1_OL = group.PR_O1_OL + group.R1_O1_OL + group.R2_O1_OL + group.R3_O1_OL owner_1_UM = group.PR_O1_UM + group.R1_O1_UM + group.R2_O1_UM + group.R3_O1_UM owner_1_UL = group.PR_O1_UL + group.R1_O1_UL + group.R2_O1_UL + group.R3_O1_UL owner_2_OM = group.PR_O2_OM + group.R1_O2_OM + group.R2_O2_OM + group.R3_O2_OM owner_2_OL = group.PR_O2_OL + group.R1_O2_OL + group.R2_O2_OL + group.R3_O2_OL owner_2_UM = group.PR_O2_UM + group.R1_O2_UM + group.R2_O2_UM + group.R3_O2_UM owner_2_UL = group.PR_O2_UL + group.R1_O2_UL + group.R2_O2_UL + group.R3_O2_UL owner_3_OM = group.PR_O3_OM + group.R1_O3_OM + group.R2_O3_OM + group.R3_O3_OM owner_3_OL = group.PR_O3_OL + group.R1_O3_OL + group.R2_O3_OL + group.R3_O3_OL owner_3_UM = group.PR_O3_UM + group.R1_O3_UM + group.R2_O3_UM + group.R3_O3_UM owner_3_UL = group.PR_O3_UL + group.R1_O3_UL + group.R2_O3_UL + group.R3_O3_UL #Calculate the percentage owner_1_Over_MoreThan_50_percentage = (owner_1_OM / owner_1_total) * 100 group.PR_O1_OM_P = round(owner_1_Over_MoreThan_50_percentage, 0) group.R3_O1_OM_Per = round(owner_1_Over_MoreThan_50_percentage, 0) owner_2_Over_MoreThan_50_percentage = (owner_2_OM / owner_2_total) * 100 group.PR_O2_OM_P = round(owner_2_Over_MoreThan_50_percentage, 0) group.R3_O2_OM_Per = round(owner_2_Over_MoreThan_50_percentage, 0) owner_3_Over_MoreThan_50_percentage = (owner_3_OM / owner_3_total) * 100 group.PR_O3_OM_P = round(owner_3_Over_MoreThan_50_percentage, 0) group.R3_O3_OM_Per = round(owner_3_Over_MoreThan_50_percentage, 0) owner_1_Over_LessThan_50_percentage = (owner_1_OL / owner_1_total) * 100 group.PR_O1_OL_P = round(owner_1_Over_LessThan_50_percentage, 0) group.R3_O1_OL_Per = round(owner_1_Over_LessThan_50_percentage, 0) owner_2_Over_LessThan_50_percentage = (owner_2_OL / owner_2_total) * 100 group.PR_O2_OL_P = round(owner_2_Over_LessThan_50_percentage, 0) group.R3_O2_OL_Per = round(owner_2_Over_LessThan_50_percentage, 0) owner_3_Over_LessThan_50_percentage = (owner_3_OL / owner_3_total) * 100 group.PR_O3_OL_P = round(owner_3_Over_LessThan_50_percentage, 0) group.R3_O3_OL_Per = round(owner_3_Over_LessThan_50_percentage, 0) owner_1_Under_MoreThan_50_percentage = (owner_1_UM / owner_1_total) * 100 group.PR_O1_UM_P = round(owner_1_Under_MoreThan_50_percentage, 0) group.R3_O1_UM_Per = round(owner_1_Under_MoreThan_50_percentage, 0) owner_2_Under_MoreThan_50_percentage = (owner_2_UM / owner_2_total) * 100 group.PR_O2_UM_P = round(owner_2_Under_MoreThan_50_percentage, 0) group.R3_O2_UM_Per = round(owner_2_Under_MoreThan_50_percentage, 0) owner_3_Under_MoreThan_50_percentage = (owner_3_UM / owner_3_total) * 100 group.PR_O3_UM_P = round(owner_3_Under_MoreThan_50_percentage, 0) group.R3_O3_UM_Per = round(owner_3_Under_MoreThan_50_percentage, 0) owner_1_Under_LessThan_50_percentage = (owner_1_UL / owner_1_total) * 100 group.PR_O1_UL_P = round(owner_1_Under_LessThan_50_percentage, 0) group.R3_O1_UL_Per = round(owner_1_Under_LessThan_50_percentage, 0) owner_2_Under_LessThan_50_percentage = (owner_2_UL / owner_2_total) * 100 group.PR_O2_UL_P = round(owner_2_Under_LessThan_50_percentage, 0) group.R3_O2_UL_Per = round(owner_2_Under_LessThan_50_percentage, 0) owner_3_Under_LessThan_50_percentage = (owner_3_UL / owner_3_total) * 100 group.PR_O3_UL_P = round(owner_3_Under_LessThan_50_percentage, 0) group.R3_O3_UL_Per = round(owner_3_Under_LessThan_50_percentage, 0) def R4_Accuracy(group: Group): #Calculate the denominator owner_1_total = group.PR_O1_OM + group.PR_O1_OL + group.PR_O1_UM + group.PR_O1_UL + group.R1_O1_OM + group.R1_O1_OL + group.R1_O1_UM + group.R1_O1_UL + group.R2_O1_OM + group.R2_O1_OL + group.R2_O1_UM + group.R2_O1_UL + group.R3_O1_OM + group.R3_O1_OL + group.R3_O1_UM + group.R3_O1_UL + group.R4_O1_OM + group.R4_O1_OL + group.R4_O1_UM + group.R4_O1_UL owner_2_total = group.PR_O2_OM + group.PR_O2_OL + group.PR_O2_UM + group.PR_O2_UL + group.R1_O2_OM + group.R1_O2_OL + group.R1_O2_UM + group.R1_O2_UL + group.R2_O2_OM + group.R2_O2_OL + group.R2_O2_UM + group.R2_O2_UL + group.R3_O2_OM + group.R3_O2_OL + group.R3_O2_UM + group.R3_O2_UL + group.R4_O2_OM + group.R4_O2_OL + group.R4_O2_UM + group.R4_O2_UL owner_3_total = group.PR_O3_OM + group.PR_O3_OL + group.PR_O3_UM + group.PR_O3_UL + group.R1_O3_OM + group.R1_O3_OL + group.R1_O3_UM + group.R1_O3_UL + group.R2_O3_OM + group.R2_O3_OL + group.R2_O3_UM + group.R2_O3_UL + group.R3_O3_OM + group.R3_O3_OL + group.R3_O3_UM + group.R3_O3_UL + group.R4_O3_OM + group.R4_O3_OL + group.R4_O3_UM + group.R4_O3_UL if owner_1_total == 0: owner_1_total = 1 if owner_2_total == 0: owner_2_total = 1 if owner_3_total == 0: owner_3_total = 1 #Calculate the numerator owner_1_OM = group.PR_O1_OM + group.R1_O1_OM + group.R2_O1_OM + group.R3_O1_OM + group.R4_O1_OM owner_1_OL = group.PR_O1_OL + group.R1_O1_OL + group.R2_O1_OL + group.R3_O1_OL + group.R4_O1_OL owner_1_UM = group.PR_O1_UM + group.R1_O1_UM + group.R2_O1_UM + group.R3_O1_UM + group.R4_O1_UM owner_1_UL = group.PR_O1_UL + group.R1_O1_UL + group.R2_O1_UL + group.R3_O1_UL + group.R4_O1_UL owner_2_OM = group.PR_O2_OM + group.R1_O2_OM + group.R2_O2_OM + group.R3_O2_OM + group.R4_O2_OM owner_2_OL = group.PR_O2_OL + group.R1_O2_OL + group.R2_O2_OL + group.R3_O2_OL + group.R4_O2_OL owner_2_UM = group.PR_O2_UM + group.R1_O2_UM + group.R2_O2_UM + group.R3_O2_UM + group.R4_O2_UM owner_2_UL = group.PR_O2_UL + group.R1_O2_UL + group.R2_O2_UL + group.R3_O2_UL + group.R4_O2_UL owner_3_OM = group.PR_O3_OM + group.R1_O3_OM + group.R2_O3_OM + group.R3_O3_OM + group.R4_O3_OM owner_3_OL = group.PR_O3_OL + group.R1_O3_OL + group.R2_O3_OL + group.R3_O3_OL + group.R4_O3_OL owner_3_UM = group.PR_O3_UM + group.R1_O3_UM + group.R2_O3_UM + group.R3_O3_UM + group.R4_O3_UM owner_3_UL = group.PR_O3_UL + group.R1_O3_UL + group.R2_O3_UL + group.R3_O3_UL + group.R4_O3_UL #Calculate the percentage owner_1_Over_MoreThan_50_percentage = (owner_1_OM / owner_1_total) * 100 group.PR_O1_OM_P = round(owner_1_Over_MoreThan_50_percentage, 0) group.R4_O1_OM_Per = round(owner_1_Over_MoreThan_50_percentage, 0) owner_2_Over_MoreThan_50_percentage = (owner_2_OM / owner_2_total) * 100 group.PR_O2_OM_P = round(owner_2_Over_MoreThan_50_percentage, 0) group.R4_O2_OM_Per = round(owner_2_Over_MoreThan_50_percentage, 0) owner_3_Over_MoreThan_50_percentage = (owner_3_OM / owner_3_total) * 100 group.PR_O3_OM_P = round(owner_3_Over_MoreThan_50_percentage, 0) group.R4_O3_OM_Per = round(owner_3_Over_MoreThan_50_percentage, 0) owner_1_Over_LessThan_50_percentage = (owner_1_OL / owner_1_total) * 100 group.PR_O1_OL_P = round(owner_1_Over_LessThan_50_percentage, 0) group.R4_O1_OL_Per = round(owner_1_Over_LessThan_50_percentage, 0) owner_2_Over_LessThan_50_percentage = (owner_2_OL / owner_2_total) * 100 group.PR_O2_OL_P = round(owner_2_Over_LessThan_50_percentage, 0) group.R4_O2_OL_Per = round(owner_2_Over_LessThan_50_percentage, 0) owner_3_Over_LessThan_50_percentage = (owner_3_OL / owner_3_total) * 100 group.PR_O3_OL_P = round(owner_3_Over_LessThan_50_percentage, 0) group.R4_O3_OL_Per = round(owner_3_Over_LessThan_50_percentage, 0) owner_1_Under_MoreThan_50_percentage = (owner_1_UM / owner_1_total) * 100 group.PR_O1_UM_P = round(owner_1_Under_MoreThan_50_percentage, 0) group.R4_O1_UM_Per = round(owner_1_Under_MoreThan_50_percentage, 0) owner_2_Under_MoreThan_50_percentage = (owner_2_UM / owner_2_total) * 100 group.PR_O2_UM_P = round(owner_2_Under_MoreThan_50_percentage, 0) group.R4_O2_UM_Per = round(owner_2_Under_MoreThan_50_percentage, 0) owner_3_Under_MoreThan_50_percentage = (owner_3_UM / owner_3_total) * 100 group.PR_O3_UM_P = round(owner_3_Under_MoreThan_50_percentage, 0) group.R4_O3_UM_Per = round(owner_3_Under_MoreThan_50_percentage, 0) owner_1_Under_LessThan_50_percentage = (owner_1_UL / owner_1_total) * 100 group.PR_O1_UL_P = round(owner_1_Under_LessThan_50_percentage, 0) group.R4_O1_UL_Per = round(owner_1_Under_LessThan_50_percentage, 0) owner_2_Under_LessThan_50_percentage = (owner_2_UL / owner_2_total) * 100 group.PR_O2_UL_P = round(owner_2_Under_LessThan_50_percentage, 0) group.R4_O2_UL_Per = round(owner_2_Under_LessThan_50_percentage, 0) owner_3_Under_LessThan_50_percentage = (owner_3_UL / owner_3_total) * 100 group.PR_O3_UL_P = round(owner_3_Under_LessThan_50_percentage, 0) group.R4_O3_UL_Per = round(owner_3_Under_LessThan_50_percentage, 0) def R1_Cal_Pay(group: Group): players = group.get_players() owner_No_1 = [p for p in players if p.Initial_Role == 'Owner#1'] owner_No_2 = [p for p in players if p.Initial_Role == 'Owner#2'] owner_No_3 = [p for p in players if p.Initial_Role == 'Owner#3'] buyer_No_1 = [p for p in players if p.Initial_Role == 'Buyer#1'] buyer_No_2 = [p for p in players if p.Initial_Role == 'Buyer#2'] buyer_No_3 = [p for p in players if p.Initial_Role == 'Buyer#3'] owner_1 = owner_No_1[0] owner_2 = owner_No_2[0] owner_3 = owner_No_3[0] buyer_1 = buyer_No_1[0] buyer_2 = buyer_No_2[0] buyer_3 = buyer_No_3[0] #Determine winning bid asset_1_winning_bid = max(buyer_1.R1_B1N, buyer_2.R1_B1N, buyer_3.R1_B1N) asset_2_winning_bid = max(buyer_1.R1_B2N, buyer_2.R1_B2N, buyer_3.R1_B2N) asset_3_winning_bid = max(buyer_1.R1_B3N, buyer_2.R1_B3N, buyer_3.R1_B3N) asset_1_receiving_value = group.R1_A1 / 2 asset_2_receiving_value = group.R1_A2 / 2 asset_3_receiving_value = group.R1_A3 / 2 #Determining winning bidder and buyer payoff for each asset if buyer_1.R1_B1N == asset_1_winning_bid: buyer_1.R1_B_A1_Payoff = asset_1_receiving_value - buyer_1.R1_B1 group.R1_A1_WIN_Bid = buyer_1.R1_B1 group.R1_A1_WIN_Bidder = 'Buyer 1' if buyer_2.R1_B1N == asset_1_winning_bid: buyer_2.R1_B_A1_Payoff = asset_1_receiving_value - buyer_2.R1_B1 group.R1_A1_WIN_Bid = buyer_2.R1_B1 group.R1_A1_WIN_Bidder = 'Buyer 2' if buyer_3.R1_B1N == asset_1_winning_bid: buyer_3.R1_B_A1_Payoff = asset_1_receiving_value - buyer_3.R1_B1 group.R1_A1_WIN_Bid = buyer_3.R1_B1 group.R1_A1_WIN_Bidder = 'Buyer 3' if buyer_1.R1_B2N == asset_2_winning_bid: buyer_1.R1_B_A2_Payoff = asset_2_receiving_value - buyer_1.R1_B2 group.R1_A2_WIN_Bid = buyer_1.R1_B2 group.R1_A2_WIN_Bidder = 'Buyer 1' if buyer_2.R1_B2N == asset_2_winning_bid: buyer_2.R1_B_A2_Payoff = asset_2_receiving_value - buyer_2.R1_B2 group.R1_A2_WIN_Bid = buyer_2.R1_B2 group.R1_A2_WIN_Bidder = 'Buyer 2' if buyer_3.R1_B2N == asset_2_winning_bid: buyer_3.R1_B_A2_Payoff = asset_2_receiving_value - buyer_3.R1_B2 group.R1_A2_WIN_Bid = buyer_3.R1_B2 group.R1_A2_WIN_Bidder = 'Buyer 3' if buyer_1.R1_B3N == asset_3_winning_bid: buyer_1.R1_B_A3_Payoff = asset_3_receiving_value - buyer_1.R1_B3 group.R1_A3_WIN_Bid = buyer_1.R1_B3 group.R1_A3_WIN_Bidder = 'Buyer 1' if buyer_2.R1_B3N == asset_3_winning_bid: buyer_2.R1_B_A3_Payoff = asset_3_receiving_value - buyer_2.R1_B3 group.R1_A3_WIN_Bid = buyer_2.R1_B3 group.R1_A3_WIN_Bidder = 'Buyer 2' if buyer_3.R1_B3N == asset_3_winning_bid: buyer_3.R1_B_A3_Payoff = asset_3_receiving_value - buyer_3.R1_B3 group.R1_A3_WIN_Bid = buyer_3.R1_B3 group.R1_A3_WIN_Bidder = 'Buyer 3' #Determine Owner payoff if owner_1.R1_Accuracy == 1: owner_1.R1_Payoff = round(group.R1_A1_WIN_Bid,0) + 5 else: owner_1.R1_Payoff = round(group.R1_A1_WIN_Bid,0) if owner_2.R1_Accuracy == 1: owner_2.R1_Payoff = round(group.R1_A2_WIN_Bid,0) + 5 else: owner_2.R1_Payoff = round(group.R1_A2_WIN_Bid,0) if owner_3.R1_Accuracy == 1: owner_3.R1_Payoff = round(group.R1_A3_WIN_Bid,0) + 5 else: owner_3.R1_Payoff = round(group.R1_A3_WIN_Bid,0) #Determine Buyer payoff buyer_1.R1_Payoff = round(buyer_1.R1_B_A1_Payoff + buyer_1.R1_B_A2_Payoff + buyer_1.R1_B_A3_Payoff,2) buyer_2.R1_Payoff = round(buyer_2.R1_B_A1_Payoff + buyer_2.R1_B_A2_Payoff + buyer_2.R1_B_A3_Payoff,2) buyer_3.R1_Payoff = round(buyer_3.R1_B_A1_Payoff + buyer_3.R1_B_A2_Payoff + buyer_3.R1_B_A3_Payoff,2) def R2_Cal_Pay(group: Group): players = group.get_players() owner_No_1 = [p for p in players if p.Initial_Role == 'Owner#1'] owner_No_2 = [p for p in players if p.Initial_Role == 'Owner#2'] owner_No_3 = [p for p in players if p.Initial_Role == 'Owner#3'] buyer_No_1 = [p for p in players if p.Initial_Role == 'Buyer#1'] buyer_No_2 = [p for p in players if p.Initial_Role == 'Buyer#2'] buyer_No_3 = [p for p in players if p.Initial_Role == 'Buyer#3'] owner_1 = owner_No_1[0] owner_2 = owner_No_2[0] owner_3 = owner_No_3[0] buyer_1 = buyer_No_1[0] buyer_2 = buyer_No_2[0] buyer_3 = buyer_No_3[0] #Determine winning bid asset_1_winning_bid = max(buyer_1.R2_B1N, buyer_2.R2_B1N, buyer_3.R2_B1N) asset_2_winning_bid = max(buyer_1.R2_B2N, buyer_2.R2_B2N, buyer_3.R2_B2N) asset_3_winning_bid = max(buyer_1.R2_B3N, buyer_2.R2_B3N, buyer_3.R2_B3N) asset_1_receiving_value = group.R2_A1 / 2 asset_2_receiving_value = group.R2_A2 / 2 asset_3_receiving_value = group.R2_A3 / 2 #Determining winning bidder and buyer payoff for each asset if buyer_1.R2_B1N == asset_1_winning_bid: buyer_1.R2_B_A1_Payoff = asset_1_receiving_value - buyer_1.R2_B1 group.R2_A1_WIN_Bid = buyer_1.R2_B1 group.R2_A1_WIN_Bidder = 'Buyer 1' if buyer_2.R2_B1N == asset_1_winning_bid: buyer_2.R2_B_A1_Payoff = asset_1_receiving_value - buyer_2.R2_B1 group.R2_A1_WIN_Bid = buyer_2.R2_B1 group.R2_A1_WIN_Bidder = 'Buyer 2' if buyer_3.R2_B1N == asset_1_winning_bid: buyer_3.R2_B_A1_Payoff = asset_1_receiving_value - buyer_3.R2_B1 group.R2_A1_WIN_Bid = buyer_3.R2_B1 group.R2_A1_WIN_Bidder = 'Buyer 3' if buyer_1.R2_B2N == asset_2_winning_bid: buyer_1.R2_B_A2_Payoff = asset_2_receiving_value - buyer_1.R2_B2 group.R2_A2_WIN_Bid = buyer_1.R2_B2 group.R2_A2_WIN_Bidder = 'Buyer 1' if buyer_2.R2_B2N == asset_2_winning_bid: buyer_2.R2_B_A2_Payoff = asset_2_receiving_value - buyer_2.R2_B2 group.R2_A2_WIN_Bid = buyer_2.R2_B2 group.R2_A2_WIN_Bidder = 'Buyer 2' if buyer_3.R2_B2N == asset_2_winning_bid: buyer_3.R2_B_A2_Payoff = asset_2_receiving_value - buyer_3.R2_B2 group.R2_A2_WIN_Bid = buyer_3.R2_B2 group.R2_A2_WIN_Bidder = 'Buyer 3' if buyer_1.R2_B3N == asset_3_winning_bid: buyer_1.R2_B_A3_Payoff = asset_3_receiving_value - buyer_1.R2_B3 group.R2_A3_WIN_Bid = buyer_1.R2_B3 group.R2_A3_WIN_Bidder = 'Buyer 1' if buyer_2.R2_B3N == asset_3_winning_bid: buyer_2.R2_B_A3_Payoff = asset_3_receiving_value - buyer_2.R2_B3 group.R2_A3_WIN_Bid = buyer_2.R2_B3 group.R2_A3_WIN_Bidder = 'Buyer 2' if buyer_3.R2_B3N == asset_3_winning_bid: buyer_3.R2_B_A3_Payoff = asset_3_receiving_value - buyer_3.R2_B3 group.R2_A3_WIN_Bid = buyer_3.R2_B3 group.R2_A3_WIN_Bidder = 'Buyer 3' #Determine Owner payoff if owner_1.R2_Accuracy == 1: owner_1.R2_Payoff = round(group.R2_A1_WIN_Bid,0) + 5 else: owner_1.R2_Payoff = round(group.R2_A1_WIN_Bid,0) if owner_2.R2_Accuracy == 1: owner_2.R2_Payoff = round(group.R2_A2_WIN_Bid,0) + 5 else: owner_2.R2_Payoff = round(group.R2_A2_WIN_Bid,0) if owner_3.R2_Accuracy == 1: owner_3.R2_Payoff = round(group.R2_A3_WIN_Bid,0) + 5 else: owner_3.R2_Payoff = round(group.R2_A3_WIN_Bid,0) #Determine Buyer payoff buyer_1.R2_Payoff = round(buyer_1.R2_B_A1_Payoff + buyer_1.R2_B_A2_Payoff + buyer_1.R2_B_A3_Payoff,2) buyer_2.R2_Payoff = round(buyer_2.R2_B_A1_Payoff + buyer_2.R2_B_A2_Payoff + buyer_2.R2_B_A3_Payoff,2) buyer_3.R2_Payoff = round(buyer_3.R2_B_A1_Payoff + buyer_3.R2_B_A2_Payoff + buyer_3.R2_B_A3_Payoff,2) def R3_Cal_Pay(group: Group): players = group.get_players() owner_No_1 = [p for p in players if p.Initial_Role == 'Owner#1'] owner_No_2 = [p for p in players if p.Initial_Role == 'Owner#2'] owner_No_3 = [p for p in players if p.Initial_Role == 'Owner#3'] buyer_No_1 = [p for p in players if p.Initial_Role == 'Buyer#1'] buyer_No_2 = [p for p in players if p.Initial_Role == 'Buyer#2'] buyer_No_3 = [p for p in players if p.Initial_Role == 'Buyer#3'] owner_1 = owner_No_1[0] owner_2 = owner_No_2[0] owner_3 = owner_No_3[0] buyer_1 = buyer_No_1[0] buyer_2 = buyer_No_2[0] buyer_3 = buyer_No_3[0] #Determine winning bid asset_1_winning_bid = max(buyer_1.R3_B1N, buyer_2.R3_B1N, buyer_3.R3_B1N) asset_2_winning_bid = max(buyer_1.R3_B2N, buyer_2.R3_B2N, buyer_3.R3_B2N) asset_3_winning_bid = max(buyer_1.R3_B3N, buyer_2.R3_B3N, buyer_3.R3_B3N) asset_1_receiving_value = group.R3_A1 / 2 asset_2_receiving_value = group.R3_A2 / 2 asset_3_receiving_value = group.R3_A3 / 2 #Determining winning bidder and buyer payoff for each asset if buyer_1.R3_B1N == asset_1_winning_bid: buyer_1.R3_B_A1_Payoff = asset_1_receiving_value - buyer_1.R3_B1 group.R3_A1_WIN_Bid = buyer_1.R3_B1 group.R3_A1_WIN_Bidder = 'Buyer 1' if buyer_2.R3_B1N == asset_1_winning_bid: buyer_2.R3_B_A1_Payoff = asset_1_receiving_value - buyer_2.R3_B1 group.R3_A1_WIN_Bid = buyer_2.R3_B1 group.R3_A1_WIN_Bidder = 'Buyer 2' if buyer_3.R3_B1N == asset_1_winning_bid: buyer_3.R3_B_A1_Payoff = asset_1_receiving_value - buyer_3.R3_B1 group.R3_A1_WIN_Bid = buyer_3.R3_B1 group.R3_A1_WIN_Bidder = 'Buyer 3' if buyer_1.R3_B2N == asset_2_winning_bid: buyer_1.R3_B_A2_Payoff = asset_2_receiving_value - buyer_1.R3_B2 group.R3_A2_WIN_Bid = buyer_1.R3_B2 group.R3_A2_WIN_Bidder = 'Buyer 1' if buyer_2.R3_B2N == asset_2_winning_bid: buyer_2.R3_B_A2_Payoff = asset_2_receiving_value - buyer_2.R3_B2 group.R3_A2_WIN_Bid = buyer_2.R3_B2 group.R3_A2_WIN_Bidder = 'Buyer 2' if buyer_3.R3_B2N == asset_2_winning_bid: buyer_3.R3_B_A2_Payoff = asset_2_receiving_value - buyer_3.R3_B2 group.R3_A2_WIN_Bid = buyer_3.R3_B2 group.R3_A2_WIN_Bidder = 'Buyer 3' if buyer_1.R3_B3N == asset_3_winning_bid: buyer_1.R3_B_A3_Payoff = asset_3_receiving_value - buyer_1.R3_B3 group.R3_A3_WIN_Bid = buyer_1.R3_B3 group.R3_A3_WIN_Bidder = 'Buyer 1' if buyer_2.R3_B3N == asset_3_winning_bid: buyer_2.R3_B_A3_Payoff = asset_3_receiving_value - buyer_2.R3_B3 group.R3_A3_WIN_Bid = buyer_2.R3_B3 group.R3_A3_WIN_Bidder = 'Buyer 2' if buyer_3.R3_B3N == asset_3_winning_bid: buyer_3.R3_B_A3_Payoff = asset_3_receiving_value - buyer_3.R3_B3 group.R3_A3_WIN_Bid = buyer_3.R3_B3 group.R3_A3_WIN_Bidder = 'Buyer 3' #Determine Owner payoff if owner_1.R3_Accuracy == 1: owner_1.R3_Payoff = round(group.R3_A1_WIN_Bid,0) + 5 else: owner_1.R3_Payoff = round(group.R3_A1_WIN_Bid,0) if owner_2.R3_Accuracy == 1: owner_2.R3_Payoff = round(group.R3_A2_WIN_Bid,0) + 5 else: owner_2.R3_Payoff = round(group.R3_A2_WIN_Bid,0) if owner_3.R3_Accuracy == 1: owner_3.R3_Payoff = round(group.R3_A3_WIN_Bid,0) + 5 else: owner_3.R3_Payoff = round(group.R3_A3_WIN_Bid,0) #Determine Buyer payoff buyer_1.R3_Payoff = round(buyer_1.R3_B_A1_Payoff + buyer_1.R3_B_A2_Payoff + buyer_1.R3_B_A3_Payoff,2) buyer_2.R3_Payoff = round(buyer_2.R3_B_A1_Payoff + buyer_2.R3_B_A2_Payoff + buyer_2.R3_B_A3_Payoff,2) buyer_3.R3_Payoff = round(buyer_3.R3_B_A1_Payoff + buyer_3.R3_B_A2_Payoff + buyer_3.R3_B_A3_Payoff,2) def R4_Cal_Pay(group: Group): players = group.get_players() owner_No_1 = [p for p in players if p.Initial_Role == 'Owner#1'] owner_No_2 = [p for p in players if p.Initial_Role == 'Owner#2'] owner_No_3 = [p for p in players if p.Initial_Role == 'Owner#3'] buyer_No_1 = [p for p in players if p.Initial_Role == 'Buyer#1'] buyer_No_2 = [p for p in players if p.Initial_Role == 'Buyer#2'] buyer_No_3 = [p for p in players if p.Initial_Role == 'Buyer#3'] owner_1 = owner_No_1[0] owner_2 = owner_No_2[0] owner_3 = owner_No_3[0] buyer_1 = buyer_No_1[0] buyer_2 = buyer_No_2[0] buyer_3 = buyer_No_3[0] #Determine winning bid asset_1_winning_bid = max(buyer_1.R4_B1N, buyer_2.R4_B1N, buyer_3.R4_B1N) asset_2_winning_bid = max(buyer_1.R4_B2N, buyer_2.R4_B2N, buyer_3.R4_B2N) asset_3_winning_bid = max(buyer_1.R4_B3N, buyer_2.R4_B3N, buyer_3.R4_B3N) asset_1_receiving_value = group.R4_A1 / 2 asset_2_receiving_value = group.R4_A2 / 2 asset_3_receiving_value = group.R4_A3 / 2 #Determining winning bidder and buyer payoff for each asset if buyer_1.R4_B1N == asset_1_winning_bid: buyer_1.R4_B_A1_Payoff = asset_1_receiving_value - buyer_1.R4_B1 group.R4_A1_WIN_Bid = buyer_1.R4_B1 group.R4_A1_WIN_Bidder = 'Buyer 1' if buyer_2.R4_B1N == asset_1_winning_bid: buyer_2.R4_B_A1_Payoff = asset_1_receiving_value - buyer_2.R4_B1 group.R4_A1_WIN_Bid = buyer_2.R4_B1 group.R4_A1_WIN_Bidder = 'Buyer 2' if buyer_3.R4_B1N == asset_1_winning_bid: buyer_3.R4_B_A1_Payoff = asset_1_receiving_value - buyer_3.R4_B1 group.R4_A1_WIN_Bid = buyer_3.R4_B1 group.R4_A1_WIN_Bidder = 'Buyer 3' if buyer_1.R4_B2N == asset_2_winning_bid: buyer_1.R4_B_A2_Payoff = asset_2_receiving_value - buyer_1.R4_B2 group.R4_A2_WIN_Bid = buyer_1.R4_B2 group.R4_A2_WIN_Bidder = 'Buyer 1' if buyer_2.R4_B2N == asset_2_winning_bid: buyer_2.R4_B_A2_Payoff = asset_2_receiving_value - buyer_2.R4_B2 group.R4_A2_WIN_Bid = buyer_2.R4_B2 group.R4_A2_WIN_Bidder = 'Buyer 2' if buyer_3.R4_B2N == asset_2_winning_bid: buyer_3.R4_B_A2_Payoff = asset_2_receiving_value - buyer_3.R4_B2 group.R4_A2_WIN_Bid = buyer_3.R4_B2 group.R4_A2_WIN_Bidder = 'Buyer 3' if buyer_1.R4_B3N == asset_3_winning_bid: buyer_1.R4_B_A3_Payoff = asset_3_receiving_value - buyer_1.R4_B3 group.R4_A3_WIN_Bid = buyer_1.R4_B3 group.R4_A3_WIN_Bidder = 'Buyer 1' if buyer_2.R4_B3N == asset_3_winning_bid: buyer_2.R4_B_A3_Payoff = asset_3_receiving_value - buyer_2.R4_B3 group.R4_A3_WIN_Bid = buyer_2.R4_B3 group.R4_A3_WIN_Bidder = 'Buyer 2' if buyer_3.R4_B3N == asset_3_winning_bid: buyer_3.R4_B_A3_Payoff = asset_3_receiving_value - buyer_3.R4_B3 group.R4_A3_WIN_Bid = buyer_3.R4_B3 group.R4_A3_WIN_Bidder = 'Buyer 3' #Determine Owner payoff if owner_1.R4_Accuracy == 1: owner_1.R4_Payoff = round(group.R4_A1_WIN_Bid,0) + 5 else: owner_1.R4_Payoff = round(group.R4_A1_WIN_Bid,0) if owner_2.R4_Accuracy == 1: owner_2.R4_Payoff = round(group.R4_A2_WIN_Bid,0) + 5 else: owner_2.R4_Payoff = round(group.R4_A2_WIN_Bid,0) if owner_3.R4_Accuracy == 1: owner_3.R4_Payoff = round(group.R4_A3_WIN_Bid,0) + 5 else: owner_3.R4_Payoff = round(group.R4_A3_WIN_Bid,0) #Determine Buyer payoff buyer_1.R4_Payoff = round(buyer_1.R4_B_A1_Payoff + buyer_1.R4_B_A2_Payoff + buyer_1.R4_B_A3_Payoff,2) buyer_2.R4_Payoff = round(buyer_2.R4_B_A1_Payoff + buyer_2.R4_B_A2_Payoff + buyer_2.R4_B_A3_Payoff,2) buyer_3.R4_Payoff = round(buyer_3.R4_B_A1_Payoff + buyer_3.R4_B_A2_Payoff + buyer_3.R4_B_A3_Payoff,2) def R5_Cal_Pay(group: Group): players = group.get_players() owner_No_1 = [p for p in players if p.Initial_Role == 'Owner#1'] owner_No_2 = [p for p in players if p.Initial_Role == 'Owner#2'] owner_No_3 = [p for p in players if p.Initial_Role == 'Owner#3'] buyer_No_1 = [p for p in players if p.Initial_Role == 'Buyer#1'] buyer_No_2 = [p for p in players if p.Initial_Role == 'Buyer#2'] buyer_No_3 = [p for p in players if p.Initial_Role == 'Buyer#3'] owner_1 = owner_No_1[0] owner_2 = owner_No_2[0] owner_3 = owner_No_3[0] buyer_1 = buyer_No_1[0] buyer_2 = buyer_No_2[0] buyer_3 = buyer_No_3[0] #Determine winning bid asset_1_winning_bid = max(buyer_1.R5_B1N, buyer_2.R5_B1N, buyer_3.R5_B1N) asset_2_winning_bid = max(buyer_1.R5_B2N, buyer_2.R5_B2N, buyer_3.R5_B2N) asset_3_winning_bid = max(buyer_1.R5_B3N, buyer_2.R5_B3N, buyer_3.R5_B3N) asset_1_receiving_value = group.R5_A1 / 2 asset_2_receiving_value = group.R5_A2 / 2 asset_3_receiving_value = group.R5_A3 / 2 #Determining winning bidder and buyer payoff for each asset if buyer_1.R5_B1N == asset_1_winning_bid: buyer_1.R5_B_A1_Payoff = asset_1_receiving_value - buyer_1.R5_B1 group.R5_A1_WIN_Bid = buyer_1.R5_B1 group.R5_A1_WIN_Bidder = 'Buyer 1' if buyer_2.R5_B1N == asset_1_winning_bid: buyer_2.R5_B_A1_Payoff = asset_1_receiving_value - buyer_2.R5_B1 group.R5_A1_WIN_Bid = buyer_2.R5_B1 group.R5_A1_WIN_Bidder = 'Buyer 2' if buyer_3.R5_B1N == asset_1_winning_bid: buyer_3.R5_B_A1_Payoff = asset_1_receiving_value - buyer_3.R5_B1 group.R5_A1_WIN_Bid = buyer_3.R5_B1 group.R5_A1_WIN_Bidder = 'Buyer 3' if buyer_1.R5_B2N == asset_2_winning_bid: buyer_1.R5_B_A2_Payoff = asset_2_receiving_value - buyer_1.R5_B2 group.R5_A2_WIN_Bid = buyer_1.R5_B2 group.R5_A2_WIN_Bidder = 'Buyer 1' if buyer_2.R5_B2N == asset_2_winning_bid: buyer_2.R5_B_A2_Payoff = asset_2_receiving_value - buyer_2.R5_B2 group.R5_A2_WIN_Bid = buyer_2.R5_B2 group.R5_A2_WIN_Bidder = 'Buyer 2' if buyer_3.R5_B2N == asset_2_winning_bid: buyer_3.R5_B_A2_Payoff = asset_2_receiving_value - buyer_3.R5_B2 group.R5_A2_WIN_Bid = buyer_3.R5_B2 group.R5_A2_WIN_Bidder = 'Buyer 3' if buyer_1.R5_B3N == asset_3_winning_bid: buyer_1.R5_B_A3_Payoff = asset_3_receiving_value - buyer_1.R5_B3 group.R5_A3_WIN_Bid = buyer_1.R5_B3 group.R5_A3_WIN_Bidder = 'Buyer 1' if buyer_2.R5_B3N == asset_3_winning_bid: buyer_2.R5_B_A3_Payoff = asset_3_receiving_value - buyer_2.R5_B3 group.R5_A3_WIN_Bid = buyer_2.R5_B3 group.R5_A3_WIN_Bidder = 'Buyer 2' if buyer_3.R5_B3N == asset_3_winning_bid: buyer_3.R5_B_A3_Payoff = asset_3_receiving_value - buyer_3.R5_B3 group.R5_A3_WIN_Bid = buyer_3.R5_B3 group.R5_A3_WIN_Bidder = 'Buyer 3' #Determine Owner payoff if owner_1.R5_Accuracy == 1: owner_1.R5_Payoff = round(group.R5_A1_WIN_Bid,0) + 5 else: owner_1.R5_Payoff = round(group.R5_A1_WIN_Bid,0) if owner_2.R5_Accuracy == 1: owner_2.R5_Payoff = round(group.R5_A2_WIN_Bid,0) + 5 else: owner_2.R5_Payoff = round(group.R5_A2_WIN_Bid,0) if owner_3.R5_Accuracy == 1: owner_3.R5_Payoff = round(group.R5_A3_WIN_Bid,0) + 5 else: owner_3.R5_Payoff = round(group.R5_A3_WIN_Bid,0) #Determine Buyer payoff buyer_1.R5_Payoff = round(buyer_1.R5_B_A1_Payoff + buyer_1.R5_B_A2_Payoff + buyer_1.R5_B_A3_Payoff,2) buyer_2.R5_Payoff = round(buyer_2.R5_B_A1_Payoff + buyer_2.R5_B_A2_Payoff + buyer_2.R5_B_A3_Payoff,2) buyer_3.R5_Payoff = round(buyer_3.R5_B_A1_Payoff + buyer_3.R5_B_A2_Payoff + buyer_3.R5_B_A3_Payoff,2) def rank_participants(group: Group): players = group.get_players() owner_No_1 = [p for p in players if p.Initial_Role == 'Owner#1'] owner_No_2 = [p for p in players if p.Initial_Role == 'Owner#2'] owner_No_3 = [p for p in players if p.Initial_Role == 'Owner#3'] buyer_No_1 = [p for p in players if p.Initial_Role == 'Buyer#1'] buyer_No_2 = [p for p in players if p.Initial_Role == 'Buyer#2'] buyer_No_3 = [p for p in players if p.Initial_Role == 'Buyer#3'] owner_1 = owner_No_1[0] owner_2 = owner_No_2[0] owner_3 = owner_No_3[0] buyer_1 = buyer_No_1[0] buyer_2 = buyer_No_2[0] buyer_3 = buyer_No_3[0] owner_points = [owner_1.Total_Payoff_Noise, owner_2.Total_Payoff_Noise, owner_3.Total_Payoff_Noise] owner_points_sorted = sorted(owner_points) buyer_points = [buyer_1.Total_Payoff_Noise, buyer_2.Total_Payoff_Noise, buyer_3.Total_Payoff_Noise] buyer_points_sorted = sorted(buyer_points) owner_first_place = owner_points_sorted [2] owner_second_place = owner_points_sorted [1] owner_third_place = owner_points_sorted [0] buyer_first_place = buyer_points_sorted [2] buyer_second_place = buyer_points_sorted [1] buyer_third_place = buyer_points_sorted [0] if owner_1.Total_Payoff_Noise == owner_first_place: owner_1.Total_Payoff_Dollar = 20 if owner_2.Total_Payoff_Noise == owner_first_place: owner_2.Total_Payoff_Dollar = 20 if owner_3.Total_Payoff_Noise == owner_first_place: owner_3.Total_Payoff_Dollar = 20 if owner_1.Total_Payoff_Noise == owner_second_place: owner_1.Total_Payoff_Dollar = 15 if owner_2.Total_Payoff_Noise == owner_second_place: owner_2.Total_Payoff_Dollar = 15 if owner_3.Total_Payoff_Noise == owner_second_place: owner_3.Total_Payoff_Dollar = 15 if owner_1.Total_Payoff_Noise == owner_third_place: owner_1.Total_Payoff_Dollar = 10 if owner_2.Total_Payoff_Noise == owner_third_place: owner_2.Total_Payoff_Dollar = 10 if owner_3.Total_Payoff_Noise == owner_third_place: owner_3.Total_Payoff_Dollar = 10 if buyer_1.Total_Payoff_Noise == buyer_first_place: buyer_1.Total_Payoff_Dollar = 20 if buyer_2.Total_Payoff_Noise == buyer_first_place: buyer_2.Total_Payoff_Dollar = 20 if buyer_3.Total_Payoff_Noise == buyer_first_place: buyer_3.Total_Payoff_Dollar = 20 if buyer_1.Total_Payoff_Noise == buyer_second_place: buyer_1.Total_Payoff_Dollar = 15 if buyer_2.Total_Payoff_Noise == buyer_second_place: buyer_2.Total_Payoff_Dollar = 15 if buyer_3.Total_Payoff_Noise == buyer_second_place: buyer_3.Total_Payoff_Dollar = 15 if buyer_1.Total_Payoff_Noise == buyer_third_place: buyer_1.Total_Payoff_Dollar = 10 if buyer_2.Total_Payoff_Noise == buyer_third_place: buyer_2.Total_Payoff_Dollar = 10 if buyer_3.Total_Payoff_Noise == buyer_third_place: buyer_3.Total_Payoff_Dollar = 10 def R5_Accuracy(group: Group): #Calculate the denominator owner_1_total = group.PR_O1_OM + group.PR_O1_OL + group.PR_O1_UM + group.PR_O1_UL + group.R1_O1_OM + group.R1_O1_OL + group.R1_O1_UM + group.R1_O1_UL + group.R2_O1_OM + group.R2_O1_OL + group.R2_O1_UM + group.R2_O1_UL + group.R3_O1_OM + group.R3_O1_OL + group.R3_O1_UM + group.R3_O1_UL + group.R4_O1_OM + group.R4_O1_OL + group.R4_O1_UM + group.R4_O1_UL + group.R5_O1_OM + group.R5_O1_OL + group.R5_O1_UM + group.R5_O1_UL owner_2_total = group.PR_O2_OM + group.PR_O2_OL + group.PR_O2_UM + group.PR_O2_UL + group.R1_O2_OM + group.R1_O2_OL + group.R1_O2_UM + group.R1_O2_UL + group.R2_O2_OM + group.R2_O2_OL + group.R2_O2_UM + group.R2_O2_UL + group.R3_O2_OM + group.R3_O2_OL + group.R3_O2_UM + group.R3_O2_UL + group.R4_O2_OM + group.R4_O2_OL + group.R4_O2_UM + group.R4_O2_UL + group.R5_O2_OM + group.R5_O2_OL + group.R5_O2_UM + group.R5_O2_UL owner_3_total = group.PR_O3_OM + group.PR_O3_OL + group.PR_O3_UM + group.PR_O3_UL + group.R1_O3_OM + group.R1_O3_OL + group.R1_O3_UM + group.R1_O3_UL + group.R2_O3_OM + group.R2_O3_OL + group.R2_O3_UM + group.R2_O3_UL + group.R3_O3_OM + group.R3_O3_OL + group.R3_O3_UM + group.R3_O3_UL + group.R4_O3_OM + group.R4_O3_OL + group.R4_O3_UM + group.R4_O3_UL + group.R5_O3_OM + group.R5_O3_OL + group.R5_O3_UM + group.R5_O3_UL if owner_1_total == 0: owner_1_total = 1 if owner_2_total == 0: owner_2_total = 1 if owner_3_total == 0: owner_3_total = 1 #Calculate the numerator owner_1_OM = group.PR_O1_OM + group.R1_O1_OM + group.R2_O1_OM + group.R3_O1_OM + group.R4_O1_OM + group.R5_O1_OM owner_1_OL = group.PR_O1_OL + group.R1_O1_OL + group.R2_O1_OL + group.R3_O1_OL + group.R4_O1_OL + group.R5_O1_OL owner_1_UM = group.PR_O1_UM + group.R1_O1_UM + group.R2_O1_UM + group.R3_O1_UM + group.R4_O1_UM + group.R5_O1_UM owner_1_UL = group.PR_O1_UL + group.R1_O1_UL + group.R2_O1_UL + group.R3_O1_UL + group.R4_O1_UL + group.R5_O1_UL owner_2_OM = group.PR_O2_OM + group.R1_O2_OM + group.R2_O2_OM + group.R3_O2_OM + group.R4_O2_OM + group.R5_O2_OM owner_2_OL = group.PR_O2_OL + group.R1_O2_OL + group.R2_O2_OL + group.R3_O2_OL + group.R4_O2_OL + group.R5_O2_OL owner_2_UM = group.PR_O2_UM + group.R1_O2_UM + group.R2_O2_UM + group.R3_O2_UM + group.R4_O2_UM + group.R5_O2_UM owner_2_UL = group.PR_O2_UL + group.R1_O2_UL + group.R2_O2_UL + group.R3_O2_UL + group.R4_O2_UL + group.R5_O2_UL owner_3_OM = group.PR_O3_OM + group.R1_O3_OM + group.R2_O3_OM + group.R3_O3_OM + group.R4_O3_OM + group.R5_O3_OM owner_3_OL = group.PR_O3_OL + group.R1_O3_OL + group.R2_O3_OL + group.R3_O3_OL + group.R4_O3_OL + group.R5_O3_OL owner_3_UM = group.PR_O3_UM + group.R1_O3_UM + group.R2_O3_UM + group.R3_O3_UM + group.R4_O3_UM + group.R5_O3_UM owner_3_UL = group.PR_O3_UL + group.R1_O3_UL + group.R2_O3_UL + group.R3_O3_UL + group.R4_O3_UL + group.R5_O3_UL #Calculate the percentage owner_1_Over_MoreThan_50_percentage = (owner_1_OM / owner_1_total) * 100 group.PR_O1_OM_P = round(owner_1_Over_MoreThan_50_percentage, 0) group.R5_O1_OM_Per = round(owner_1_Over_MoreThan_50_percentage, 0) owner_2_Over_MoreThan_50_percentage = (owner_2_OM / owner_2_total) * 100 group.PR_O2_OM_P = round(owner_2_Over_MoreThan_50_percentage, 0) group.R5_O2_OM_Per = round(owner_2_Over_MoreThan_50_percentage, 0) owner_3_Over_MoreThan_50_percentage = (owner_3_OM / owner_3_total) * 100 group.PR_O3_OM_P = round(owner_3_Over_MoreThan_50_percentage, 0) group.R5_O3_OM_Per = round(owner_3_Over_MoreThan_50_percentage, 0) owner_1_Over_LessThan_50_percentage = (owner_1_OL / owner_1_total) * 100 group.PR_O1_OL_P = round(owner_1_Over_LessThan_50_percentage, 0) group.R5_O1_OL_Per = round(owner_1_Over_LessThan_50_percentage, 0) owner_2_Over_LessThan_50_percentage = (owner_2_OL / owner_2_total) * 100 group.PR_O2_OL_P = round(owner_2_Over_LessThan_50_percentage, 0) group.R5_O2_OL_Per = round(owner_2_Over_LessThan_50_percentage, 0) owner_3_Over_LessThan_50_percentage = (owner_3_OL / owner_3_total) * 100 group.PR_O3_OL_P = round(owner_3_Over_LessThan_50_percentage, 0) group.R5_O3_OL_Per = round(owner_3_Over_LessThan_50_percentage, 0) owner_1_Under_MoreThan_50_percentage = (owner_1_UM / owner_1_total) * 100 group.PR_O1_UM_P = round(owner_1_Under_MoreThan_50_percentage, 0) group.R5_O1_UM_Per = round(owner_1_Under_MoreThan_50_percentage, 0) owner_2_Under_MoreThan_50_percentage = (owner_2_UM / owner_2_total) * 100 group.PR_O2_UM_P = round(owner_2_Under_MoreThan_50_percentage, 0) group.R5_O2_UM_Per = round(owner_2_Under_MoreThan_50_percentage, 0) owner_3_Under_MoreThan_50_percentage = (owner_3_UM / owner_3_total) * 100 group.PR_O3_UM_P = round(owner_3_Under_MoreThan_50_percentage, 0) group.R5_O3_UM_Per = round(owner_3_Under_MoreThan_50_percentage, 0) owner_1_Under_LessThan_50_percentage = (owner_1_UL / owner_1_total) * 100 group.PR_O1_UL_P = round(owner_1_Under_LessThan_50_percentage, 0) group.R5_O1_UL_Per = round(owner_1_Under_LessThan_50_percentage, 0) owner_2_Under_LessThan_50_percentage = (owner_2_UL / owner_2_total) * 100 group.PR_O2_UL_P = round(owner_2_Under_LessThan_50_percentage, 0) group.R5_O2_UL_Per = round(owner_2_Under_LessThan_50_percentage, 0) owner_3_Under_LessThan_50_percentage = (owner_3_UL / owner_3_total) * 100 group.PR_O3_UL_P = round(owner_3_Under_LessThan_50_percentage, 0) group.R5_O3_UL_Per = round(owner_3_Under_LessThan_50_percentage, 0) class Player(BasePlayer): Initial_Role = models.StringField() Initial_Role_2 = models.StringField() Initial_Role_Common = models.StringField() PR_BF_Decision = models.IntegerField(max=100, min=0) PR_Prediction = models.IntegerField(max=150, min=-150) PR_RF = models.IntegerField() PR_BF = models.IntegerField() PR_CF = models.FloatField() PR_Prediction_Sign = models.StringField() PR_Estimated_Value = models.IntegerField() PR_Accuracy = models.IntegerField() PR_Accuracy_2 = models.StringField() PR_Asset_FV = models.FloatField() R1_BF_Decision = models.IntegerField(max=100, min=0) R2_BF_Decision = models.IntegerField(max=100, min=0) R3_BF_Decision = models.IntegerField(max=100, min=0) R4_BF_Decision = models.IntegerField(max=100, min=0) R5_BF_Decision = models.IntegerField(max=100, min=0) R1_Prediction = models.IntegerField(max=150, min=-150) R2_Prediction = models.IntegerField(max=150, min=-150) R3_Prediction = models.IntegerField(max=150, min=-150) R4_Prediction = models.IntegerField(max=150, min=-150) R5_Prediction = models.IntegerField(max=150, min=-150) R1_RF = models.IntegerField() R2_RF = models.IntegerField() R3_RF = models.IntegerField() R4_RF = models.IntegerField() R5_RF = models.IntegerField() R1_BF = models.IntegerField() R2_BF = models.IntegerField() R3_BF = models.IntegerField() R4_BF = models.IntegerField() R5_BF = models.IntegerField() R1_CF = models.FloatField() R2_CF = models.FloatField() R3_CF = models.FloatField() R4_CF = models.FloatField() R5_CF = models.FloatField() R1_Prediction_Sign = models.StringField() R2_Prediction_Sign = models.StringField() R3_Prediction_Sign = models.StringField() R4_Prediction_Sign = models.StringField() R5_Prediction_Sign = models.StringField() R1_Estimated_Value = models.IntegerField() R2_Estimated_Value = models.IntegerField() R3_Estimated_Value = models.IntegerField() R4_Estimated_Value = models.IntegerField() R5_Estimated_Value = models.IntegerField() R1_Accuracy = models.IntegerField() R2_Accuracy = models.IntegerField() R3_Accuracy = models.IntegerField() R4_Accuracy = models.IntegerField() R5_Accuracy = models.IntegerField() R1_Accuracy_2 = models.StringField() R2_Accuracy_2 = models.StringField() R3_Accuracy_2 = models.StringField() R4_Accuracy_2 = models.StringField() R5_Accuracy_2 = models.StringField() R1_Asset_FV = models.FloatField() R2_Asset_FV = models.FloatField() R3_Asset_FV = models.FloatField() R4_Asset_FV = models.FloatField() R5_Asset_FV = models.FloatField() R1_B1 = models.IntegerField(label="How many points do you bid for a share worth 50% of the actual final value of Owner 1's asset? (enter any amount between 0 and 150)", max=150, min=0) R2_B1 = models.IntegerField(label="How many points do you bid for a share worth 50% of the actual final value of Owner 1's asset? (enter any amount between 0 and 150)", max=150, min=0) R3_B1 = models.IntegerField(label="How many points do you bid for a share worth 50% of the actual final value of Owner 1's asset? (enter any amount between 0 and 150)", max=150, min=0) R4_B1 = models.IntegerField(label="How many points do you bid for a share worth 50% of the actual final value of Owner 1's asset? (enter any amount between 0 and 150)", max=150, min=0) R5_B1 = models.IntegerField(label="How many points do you bid for a share worth 50% of the actual final value of Owner 1's asset? (enter any amount between 0 and 150)", max=150, min=0) R1_B2 = models.IntegerField(label="How many points do you bid for a share worth 50% of the actual final value of Owner 2's asset? (enter any amount between 0 and 150)", max=150, min=0) R2_B2 = models.IntegerField(label="How many points do you bid for a share worth 50% of the actual final value of Owner 2's asset? (enter any amount between 0 and 150)", max=150, min=0) R3_B2 = models.IntegerField(label="How many points do you bid for a share worth 50% of the actual final value of Owner 2's asset? (enter any amount between 0 and 150)", max=150, min=0) R4_B2 = models.IntegerField(label="How many points do you bid for a share worth 50% of the actual final value of Owner 2's asset? (enter any amount between 0 and 150)", max=150, min=0) R5_B2 = models.IntegerField(label="How many points do you bid for a share worth 50% of the actual final value of Owner 2's asset? (enter any amount between 0 and 150)", max=150, min=0) R1_B3 = models.IntegerField(label="How many points do you bid for a share worth 50% of the actual final value of Owner 3's asset? (enter any amount between 0 and 150)", max=150, min=0) R2_B3 = models.IntegerField(label="How many points do you bid for a share worth 50% of the actual final value of Owner 3's asset? (enter any amount between 0 and 150)", max=150, min=0) R3_B3 = models.IntegerField(label="How many points do you bid for a share worth 50% of the actual final value of Owner 3's asset? (enter any amount between 0 and 150)", max=150, min=0) R4_B3 = models.IntegerField(label="How many points do you bid for a share worth 50% of the actual final value of Owner 3's asset? (enter any amount between 0 and 150)", max=150, min=0) R5_B3 = models.IntegerField(label="How many points do you bid for a share worth 50% of the actual final value of Owner 3's asset? (enter any amount between 0 and 150)", max=150, min=0) R1_B1N = models.FloatField() R2_B1N = models.FloatField() R3_B1N = models.FloatField() R4_B1N = models.FloatField() R5_B1N = models.FloatField() R1_B2N = models.FloatField() R2_B2N = models.FloatField() R3_B2N = models.FloatField() R4_B2N = models.FloatField() R5_B2N = models.FloatField() R1_B3N = models.FloatField() R2_B3N = models.FloatField() R3_B3N = models.FloatField() R4_B3N = models.FloatField() R5_B3N = models.FloatField() R1_B_A1_Payoff = models.FloatField(initial=0) R2_B_A1_Payoff = models.FloatField(initial=0) R3_B_A1_Payoff = models.FloatField(initial=0) R4_B_A1_Payoff = models.FloatField(initial=0) R5_B_A1_Payoff = models.FloatField(initial=0) R1_B_A2_Payoff = models.FloatField(initial=0) R2_B_A2_Payoff = models.FloatField(initial=0) R3_B_A2_Payoff = models.FloatField(initial=0) R4_B_A2_Payoff = models.FloatField(initial=0) R5_B_A2_Payoff = models.FloatField(initial=0) R1_B_A3_Payoff = models.FloatField(initial=0) R2_B_A3_Payoff = models.FloatField(initial=0) R3_B_A3_Payoff = models.FloatField(initial=0) R4_B_A3_Payoff = models.FloatField(initial=0) R5_B_A3_Payoff = models.FloatField(initial=0) R1_RA = models.IntegerField(choices=[[1, 'Not likely at all'], [2, 'Unlikely '], [3, 'Somewhat unlikely '], [4, 'Neither likely nor unlikely'], [5, 'Somewhat likely'], [6, 'Likely '], [7, 'Extremely likely ']], label='How likely do you think the actual change in the asset’s value will differ from your prediction by 50 points or more (Note: Your response for this question will NOT be shared with Buyers)', widget=widgets.RadioSelect) R2_RA = models.IntegerField(choices=[[1, 'Not likely at all'], [2, 'Unlikely '], [3, 'Somewhat unlikely '], [4, 'Neither likely nor unlikely '], [5, 'Somewhat likely'], [6, 'Likely '], [7, 'Extremely likely ']], label='How likely do you think the actual change in the asset’s value will differ from your prediction by 50 points or more (Note: Your response for this question will NOT be shared with Buyers)', widget=widgets.RadioSelect) R3_RA = models.IntegerField(choices=[[1, 'Not likely at all'], [2, 'Unlikely '], [3, 'Somewhat unlikely '], [4, 'Neither likely nor unlikely '], [5, 'Somewhat likely'], [6, 'Likely '], [7, 'Extremely likely ']], label='How likely do you think the actual change in the asset’s value will differ from your prediction by 50 points or more (Note: Your response for this question will NOT be shared with Buyers)', widget=widgets.RadioSelect) R4_RA = models.IntegerField(choices=[[1, 'Not likely at all'], [2, 'Unlikely '], [3, 'Somewhat unlikely '], [4, 'Neither likely nor unlikely '], [5, 'Somewhat likely'], [6, 'Likely '], [7, 'Extremely likely ']], label='How likely do you think the actual change in the asset’s value will differ from your prediction by 50 points or more (Note: Your response for this question will NOT be shared with Buyers)', widget=widgets.RadioSelect) R5_RA = models.IntegerField(choices=[[1, 'Not likely at all'], [2, 'Unlikely '], [3, 'Somewhat unlikely '], [4, 'Neither likely nor unlikely '], [5, 'Somewhat likely'], [6, 'Likely '], [7, 'Extremely likely ']], label='How likely do you think the actual change in the asset’s value will differ from your prediction by 50 points or more (Note: Your response for this question will NOT be shared with Buyers)', widget=widgets.RadioSelect) R1_Payoff = models.FloatField() R2_Payoff = models.FloatField() R3_Payoff = models.FloatField() R4_Payoff = models.FloatField() R5_Payoff = models.FloatField() Total_Payoff = models.FloatField() Total_Payoff_Dollar = models.IntegerField() Total_Payoff_Noise = models.FloatField() O1_R1_DB = models.FloatField() O1_R2_DB = models.FloatField() O1_R3_DB = models.FloatField() O1_R4_DB = models.FloatField() O1_R5_DB = models.FloatField() O1_DB = models.FloatField() O2_R1_DB = models.FloatField() O2_R2_DB = models.FloatField() O2_R3_DB = models.FloatField() O2_R4_DB = models.FloatField() O2_R5_DB = models.FloatField() O2_DB = models.FloatField() O3_R1_DB = models.FloatField() O3_R2_DB = models.FloatField() O3_R3_DB = models.FloatField() O3_R4_DB = models.FloatField() O3_R5_DB = models.FloatField() O3_DB = models.FloatField() Owner_DB = models.FloatField() def role_save(player: Player): group = player.group participant = player.participant #Assigning roles if player.id_in_group == 1: player.Initial_Role = 'Buyer#1' player.Initial_Role_2 = 'Buyer 1' if player.id_in_group == 2: player.Initial_Role = 'Owner#1' player.Initial_Role_2 = 'Owner 1' if player.id_in_group == 3: player.Initial_Role = 'Buyer#2' player.Initial_Role_2 = 'Buyer 2' if player.id_in_group == 4: player.Initial_Role = 'Owner#2' player.Initial_Role_2 = 'Owner 2' if player.id_in_group == 5: player.Initial_Role = 'Buyer#3' player.Initial_Role_2 = 'Buyer 3' if player.id_in_group == 6: player.Initial_Role = 'Owner#3' player.Initial_Role_2 = 'Owner 3' #Deteriming common roles if player.Initial_Role == 'Buyer#1': player.Initial_Role_Common = 'Buyer' if player.Initial_Role == 'Buyer#2': player.Initial_Role_Common = 'Buyer' if player.Initial_Role == 'Buyer#3': player.Initial_Role_Common = 'Buyer' if player.Initial_Role == 'Owner#1': player.Initial_Role_Common = 'Owner' if player.Initial_Role == 'Owner#2': player.Initial_Role_Common = 'Owner' if player.Initial_Role == 'Owner#3': player.Initial_Role_Common = 'Owner' #Saving roles participant.vars["initial_role"] = player.Initial_Role participant.vars["common_role"] = player.Initial_Role_Common participant.vars["initial_role_2"] = player.Initial_Role_2 def PR_Owner(player: Player): group = player.group #Determining random factor import random player.PR_RF = random.randint(C.RANDOM_FACTOR_MIN, C.RANDOM_FACTOR_MAX) #Determining bonus factor seed = random.randint(0,100) if seed <= player.PR_BF_Decision: player.PR_BF = C.BONUS_FACTOR_MAX else: player.PR_BF = C.BONUS_FACTOR_MIN #Determining cost factor Likelihood_Chosen_Converted = player.PR_BF_Decision/100 player.PR_CF = Likelihood_Chosen_Converted * Likelihood_Chosen_Converted * 100 #Calculating estimated asset final value player.PR_Estimated_Value = C.BEGINNING_ASSET_VALUE + player.PR_Prediction #Calculating asset final value Asset_Final_Value_Calculated = C.BEGINNING_ASSET_VALUE + player.PR_RF + player.PR_BF - player.PR_CF Asset_Final_Value_Rounded = round (Asset_Final_Value_Calculated, 2) player.PR_Asset_FV = Asset_Final_Value_Rounded #Determining accuracy information Prediction_Diff = Asset_Final_Value_Rounded - C.BEGINNING_ASSET_VALUE - player.PR_Prediction if -50 <= Prediction_Diff <= 50: player.PR_Accuracy = 1 player.PR_Accuracy_2 = 'Yes (+ 5 points)' else: player.PR_Accuracy = 0 player.PR_Accuracy_2 = 'No (+ 0 points)' #Transfer Accuracy information from player data to group data if player.Initial_Role == 'Owner#1': if Prediction_Diff > 50: group.PR_O1_UM = 1 if 0 < Prediction_Diff <= 50: group.PR_O1_UL = 1 if Prediction_Diff < -50: group.PR_O1_OM = 1 if -50 <= Prediction_Diff < 0: group.PR_O1_OL = 1 if player.Initial_Role == 'Owner#2': if Prediction_Diff > 50: group.PR_O2_UM = 1 if 0 < Prediction_Diff <= 50: group.PR_O2_UL = 1 if Prediction_Diff < -50: group.PR_O2_OM = 1 if -50 <= Prediction_Diff < 0: group.PR_O2_OL = 1 if player.Initial_Role == 'Owner#3': if Prediction_Diff > 50: group.PR_O3_UM = 1 if 0 < Prediction_Diff <= 50: group.PR_O3_UL = 1 if Prediction_Diff < -50: group.PR_O3_OM = 1 if -50 <= Prediction_Diff < 0: group.PR_O3_OL = 1 #Adding "+" sign if player.PR_Prediction > 0: player.PR_Prediction_Sign = "+" else: player.PR_Prediction_Sign = "" #Transfer basic information from player data to group data if player.Initial_Role == 'Owner#1': group.PR_O1_P = player.PR_Prediction group.PR_O1_PS = player.PR_Prediction_Sign group.PR_A1 = Asset_Final_Value_Rounded group.PR_O1_E = player.PR_Estimated_Value if player.Initial_Role == 'Owner#2': group.PR_O2_P = player.PR_Prediction group.PR_O2_PS = player.PR_Prediction_Sign group.PR_A2 = Asset_Final_Value_Rounded group.PR_O2_E = player.PR_Estimated_Value if player.Initial_Role == 'Owner#3': group.PR_O3_P = player.PR_Prediction group.PR_O3_PS = player.PR_Prediction_Sign group.PR_A3 = Asset_Final_Value_Rounded group.PR_O3_E = player.PR_Estimated_Value def R1_Owner(player: Player): group = player.group #Determining random factor import random player.R1_RF = random.randint(C.RANDOM_FACTOR_MIN, C.RANDOM_FACTOR_MAX) #Determining bonus factor import random seed = random.randint(0,100) if seed <= player.R1_BF_Decision: player.R1_BF = C.BONUS_FACTOR_MAX else: player.R1_BF = C.BONUS_FACTOR_MIN #Determining cost factor Likelihood_Chosen_Converted = player.R1_BF_Decision/100 player.R1_CF = Likelihood_Chosen_Converted * Likelihood_Chosen_Converted * 100 #Calculating estimated asset final value player.R1_Estimated_Value = C.BEGINNING_ASSET_VALUE + player.R1_Prediction #Calculating asset final value Asset_Final_Value_Calculated = C.BEGINNING_ASSET_VALUE + player.R1_RF + player.R1_BF - player.R1_CF Asset_Final_Value_Rounded = round (Asset_Final_Value_Calculated, 2) player.R1_Asset_FV = Asset_Final_Value_Rounded #Determining accuracy information Prediction_Diff = Asset_Final_Value_Rounded - C.BEGINNING_ASSET_VALUE - player.R1_Prediction if -50 <= Prediction_Diff <= 50: player.R1_Accuracy = 1 player.R1_Accuracy_2 = 'Yes (+ 5 points)' else: player.R1_Accuracy = 0 player.R1_Accuracy_2 = 'No (+ 0 points)' #Transfer Accuracy information from player data to group data if player.Initial_Role == 'Owner#1': if Prediction_Diff > 50: group.R1_O1_UM = 1 if 0 < Prediction_Diff <= 50: group.R1_O1_UL = 1 if Prediction_Diff < -50: group.R1_O1_OM = 1 if -50 <= Prediction_Diff < 0: group.R1_O1_OL = 1 if player.Initial_Role == 'Owner#2': if Prediction_Diff > 50: group.R1_O2_UM = 1 if 0 < Prediction_Diff <= 50: group.R1_O2_UL = 1 if Prediction_Diff < -50: group.R1_O2_OM = 1 if -50 <= Prediction_Diff < 0: group.R1_O2_OL = 1 if player.Initial_Role == 'Owner#3': if Prediction_Diff > 50: group.R1_O3_UM = 1 if 0 < Prediction_Diff <= 50: group.R1_O3_UL = 1 if Prediction_Diff < -50: group.R1_O3_OM = 1 if -50 <= Prediction_Diff < 0: group.R1_O3_OL = 1 #Adding "+" sign if player.R1_Prediction > 0: player.R1_Prediction_Sign = "+" else: player.R1_Prediction_Sign = "" #Transfer basic information from player data to group data if player.Initial_Role == 'Owner#1': group.R1_O1_P = player.R1_Prediction group.R1_O1_PS = player.R1_Prediction_Sign group.R1_A1 = Asset_Final_Value_Rounded group.R1_O1_E = player.R1_Estimated_Value if player.Initial_Role == 'Owner#2': group.R1_O2_P = player.R1_Prediction group.R1_O2_PS = player.R1_Prediction_Sign group.R1_A2 = Asset_Final_Value_Rounded group.R1_O2_E = player.R1_Estimated_Value if player.Initial_Role == 'Owner#3': group.R1_O3_P = player.R1_Prediction group.R1_O3_PS = player.R1_Prediction_Sign group.R1_A3 = Asset_Final_Value_Rounded group.R1_O3_E = player.R1_Estimated_Value def R2_Owner(player: Player): group = player.group #Determining random factor import random player.R2_RF = random.randint(C.RANDOM_FACTOR_MIN, C.RANDOM_FACTOR_MAX) #Determining bonus factor import random seed = random.randint(0,100) if seed <= player.R2_BF_Decision: player.R2_BF = C.BONUS_FACTOR_MAX else: player.R2_BF = C.BONUS_FACTOR_MIN #Determining cost factor Likelihood_Chosen_Converted = player.R2_BF_Decision/100 player.R2_CF = Likelihood_Chosen_Converted * Likelihood_Chosen_Converted * 100 #Calculating estimated asset final value player.R2_Estimated_Value = C.BEGINNING_ASSET_VALUE + player.R2_Prediction #Calculating asset final value Asset_Final_Value_Calculated = C.BEGINNING_ASSET_VALUE + player.R2_RF + player.R2_BF - player.R2_CF Asset_Final_Value_Rounded = round (Asset_Final_Value_Calculated, 2) player.R2_Asset_FV = Asset_Final_Value_Rounded #Determining accuracy information Prediction_Diff = Asset_Final_Value_Rounded - C.BEGINNING_ASSET_VALUE - player.R2_Prediction if -50 <= Prediction_Diff <= 50: player.R2_Accuracy = 1 player.R2_Accuracy_2 = 'Yes (+ 5 points)' else: player.R2_Accuracy = 0 player.R2_Accuracy_2 = 'No (+ 0 points)' #Transfer Accuracy information from player data to group data if player.Initial_Role == 'Owner#1': if Prediction_Diff > 50: group.R2_O1_UM = 1 if 0 < Prediction_Diff <= 50: group.R2_O1_UL = 1 if Prediction_Diff < -50: group.R2_O1_OM = 1 if -50 <= Prediction_Diff < 0: group.R2_O1_OL = 1 if player.Initial_Role == 'Owner#2': if Prediction_Diff > 50: group.R2_O2_UM = 1 if 0 < Prediction_Diff <= 50: group.R2_O2_UL = 1 if Prediction_Diff < -50: group.R2_O2_OM = 1 if -50 <= Prediction_Diff < 0: group.R2_O2_OL = 1 if player.Initial_Role == 'Owner#3': if Prediction_Diff > 50: group.R2_O3_UM = 1 if 0 < Prediction_Diff <= 50: group.R2_O3_UL = 1 if Prediction_Diff < -50: group.R2_O3_OM = 1 if -50 <= Prediction_Diff < 0: group.R2_O3_OL = 1 #Adding "+" sign if player.R2_Prediction > 0: player.R2_Prediction_Sign = "+" else: player.R2_Prediction_Sign = "" #Transfer basic information from player data to group data if player.Initial_Role == 'Owner#1': group.R2_O1_P = player.R2_Prediction group.R2_O1_PS = player.R2_Prediction_Sign group.R2_A1 = Asset_Final_Value_Rounded group.R2_O1_E = player.R2_Estimated_Value if player.Initial_Role == 'Owner#2': group.R2_O2_P = player.R2_Prediction group.R2_O2_PS = player.R2_Prediction_Sign group.R2_A2 = Asset_Final_Value_Rounded group.R2_O2_E = player.R2_Estimated_Value if player.Initial_Role == 'Owner#3': group.R2_O3_P = player.R2_Prediction group.R2_O3_PS = player.R2_Prediction_Sign group.R2_A3 = Asset_Final_Value_Rounded group.R2_O3_E = player.R2_Estimated_Value def R3_Owner(player: Player): group = player.group #Determining random factor import random player.R3_RF = random.randint(C.RANDOM_FACTOR_MIN, C.RANDOM_FACTOR_MAX) #Determining bonus factor import random seed = random.randint(0,100) if seed <= player.R3_BF_Decision: player.R3_BF = C.BONUS_FACTOR_MAX else: player.R3_BF = C.BONUS_FACTOR_MIN #Determining cost factor Likelihood_Chosen_Converted = player.R3_BF_Decision/100 player.R3_CF = Likelihood_Chosen_Converted * Likelihood_Chosen_Converted * 100 #Calculating estimated asset final value player.R3_Estimated_Value = C.BEGINNING_ASSET_VALUE + player.R3_Prediction #Calculating asset final value Asset_Final_Value_Calculated = C.BEGINNING_ASSET_VALUE + player.R3_RF + player.R3_BF - player.R3_CF Asset_Final_Value_Rounded = round (Asset_Final_Value_Calculated, 2) player.R3_Asset_FV = Asset_Final_Value_Rounded #Determining accuracy information Prediction_Diff = Asset_Final_Value_Rounded - C.BEGINNING_ASSET_VALUE - player.R3_Prediction if -50 <= Prediction_Diff <= 50: player.R3_Accuracy = 1 player.R3_Accuracy_2 = 'Yes (+ 5 points)' else: player.R3_Accuracy = 0 player.R3_Accuracy_2 = 'No (+ 0 points)' #Transfer Accuracy information from player data to group data if player.Initial_Role == 'Owner#1': if Prediction_Diff > 50: group.R3_O1_UM = 1 if 0 < Prediction_Diff <= 50: group.R3_O1_UL = 1 if Prediction_Diff < -50: group.R3_O1_OM = 1 if -50 <= Prediction_Diff < 0: group.R3_O1_OL = 1 if player.Initial_Role == 'Owner#2': if Prediction_Diff > 50: group.R3_O2_UM = 1 if 0 < Prediction_Diff <= 50: group.R3_O2_UL = 1 if Prediction_Diff < -50: group.R3_O2_OM = 1 if -50 <= Prediction_Diff < 0: group.R3_O2_OL = 1 if player.Initial_Role == 'Owner#3': if Prediction_Diff > 50: group.R3_O3_UM = 1 if 0 < Prediction_Diff <= 50: group.R3_O3_UL = 1 if Prediction_Diff < -50: group.R3_O3_OM = 1 if -50 <= Prediction_Diff < 0: group.R3_O3_OL = 1 #Adding "+" sign if player.R3_Prediction > 0: player.R3_Prediction_Sign = "+" else: player.R3_Prediction_Sign = "" #Transfer basic information from player data to group data if player.Initial_Role == 'Owner#1': group.R3_O1_P = player.R3_Prediction group.R3_O1_PS = player.R3_Prediction_Sign group.R3_A1 = Asset_Final_Value_Rounded group.R3_O1_E = player.R3_Estimated_Value if player.Initial_Role == 'Owner#2': group.R3_O2_P = player.R3_Prediction group.R3_O2_PS = player.R3_Prediction_Sign group.R3_A2 = Asset_Final_Value_Rounded group.R3_O2_E = player.R3_Estimated_Value if player.Initial_Role == 'Owner#3': group.R3_O3_P = player.R3_Prediction group.R3_O3_PS = player.R3_Prediction_Sign group.R3_A3 = Asset_Final_Value_Rounded group.R3_O3_E = player.R3_Estimated_Value def R4_Owner(player: Player): group = player.group #Determining random factor import random player.R4_RF = random.randint(C.RANDOM_FACTOR_MIN, C.RANDOM_FACTOR_MAX) #Determining bonus factor import random seed = random.randint(0,100) if seed <= player.R4_BF_Decision: player.R4_BF = C.BONUS_FACTOR_MAX else: player.R4_BF = C.BONUS_FACTOR_MIN #Determining cost factor Likelihood_Chosen_Converted = player.R4_BF_Decision/100 player.R4_CF = Likelihood_Chosen_Converted * Likelihood_Chosen_Converted * 100 #Calculating estimated asset final value player.R4_Estimated_Value = C.BEGINNING_ASSET_VALUE + player.R4_Prediction #Calculating asset final value Asset_Final_Value_Calculated = C.BEGINNING_ASSET_VALUE + player.R4_RF + player.R4_BF - player.R4_CF Asset_Final_Value_Rounded = round (Asset_Final_Value_Calculated, 2) player.R4_Asset_FV = Asset_Final_Value_Rounded #Determining accuracy information Prediction_Diff = Asset_Final_Value_Rounded - C.BEGINNING_ASSET_VALUE - player.R4_Prediction if -50 <= Prediction_Diff <= 50: player.R4_Accuracy = 1 player.R4_Accuracy_2 = 'Yes (+ 5 points)' else: player.R4_Accuracy = 0 player.R4_Accuracy_2 = 'No (+ 0 points)' #Transfer Accuracy information from player data to group data if player.Initial_Role == 'Owner#1': if Prediction_Diff > 50: group.R4_O1_UM = 1 if 0 < Prediction_Diff <= 50: group.R4_O1_UL = 1 if Prediction_Diff < -50: group.R4_O1_OM = 1 if -50 <= Prediction_Diff < 0: group.R4_O1_OL = 1 if player.Initial_Role == 'Owner#2': if Prediction_Diff > 50: group.R4_O2_UM = 1 if 0 < Prediction_Diff <= 50: group.R4_O2_UL = 1 if Prediction_Diff < -50: group.R4_O2_OM = 1 if -50 <= Prediction_Diff < 0: group.R4_O2_OL = 1 if player.Initial_Role == 'Owner#3': if Prediction_Diff > 50: group.R4_O3_UM = 1 if 0 < Prediction_Diff <= 50: group.R4_O3_UL = 1 if Prediction_Diff < -50: group.R4_O3_OM = 1 if -50 <= Prediction_Diff < 0: group.R4_O3_OL = 1 #Adding "+" sign if player.R4_Prediction > 0: player.R4_Prediction_Sign = "+" else: player.R4_Prediction_Sign = "" #Transfer basic information from player data to group data if player.Initial_Role == 'Owner#1': group.R4_O1_P = player.R4_Prediction group.R4_O1_PS = player.R4_Prediction_Sign group.R4_A1 = Asset_Final_Value_Rounded group.R4_O1_E = player.R4_Estimated_Value if player.Initial_Role == 'Owner#2': group.R4_O2_P = player.R4_Prediction group.R4_O2_PS = player.R4_Prediction_Sign group.R4_A2 = Asset_Final_Value_Rounded group.R4_O2_E = player.R4_Estimated_Value if player.Initial_Role == 'Owner#3': group.R4_O3_P = player.R4_Prediction group.R4_O3_PS = player.R4_Prediction_Sign group.R4_A3 = Asset_Final_Value_Rounded group.R4_O3_E = player.R4_Estimated_Value def R5_Owner(player: Player): group = player.group #Determining random factor import random player.R5_RF = random.randint(C.RANDOM_FACTOR_MIN, C.RANDOM_FACTOR_MAX) #Determining bonus factor import random seed = random.randint(0,100) if seed <= player.R5_BF_Decision: player.R5_BF = C.BONUS_FACTOR_MAX else: player.R5_BF = C.BONUS_FACTOR_MIN #Determining cost factor Likelihood_Chosen_Converted = player.R5_BF_Decision/100 player.R5_CF = Likelihood_Chosen_Converted * Likelihood_Chosen_Converted * 100 #Calculating estimated asset final value player.R5_Estimated_Value = C.BEGINNING_ASSET_VALUE + player.R5_Prediction #Calculating asset final value Asset_Final_Value_Calculated = C.BEGINNING_ASSET_VALUE + player.R5_RF + player.R5_BF - player.R5_CF Asset_Final_Value_Rounded = round (Asset_Final_Value_Calculated, 2) player.R5_Asset_FV = Asset_Final_Value_Rounded #Determining accuracy information Prediction_Diff = Asset_Final_Value_Rounded - C.BEGINNING_ASSET_VALUE - player.R5_Prediction if -50 <= Prediction_Diff <= 50: player.R5_Accuracy = 1 player.R5_Accuracy_2 = 'Yes (+ 5 points)' else: player.R5_Accuracy = 0 player.R5_Accuracy_2 = 'No (+ 0 points)' #Transfer Accuracy information from player data to group data if player.Initial_Role == 'Owner#1': if Prediction_Diff > 50: group.R5_O1_UM = 1 if 0 < Prediction_Diff <= 50: group.R5_O1_UL = 1 if Prediction_Diff < -50: group.R5_O1_OM = 1 if -50 <= Prediction_Diff < 0: group.R5_O1_OL = 1 if player.Initial_Role == 'Owner#2': if Prediction_Diff > 50: group.R5_O2_UM = 1 if 0 < Prediction_Diff <= 50: group.R5_O2_UL = 1 if Prediction_Diff < -50: group.R5_O2_OM = 1 if -50 <= Prediction_Diff < 0: group.R5_O2_OL = 1 if player.Initial_Role == 'Owner#3': if Prediction_Diff > 50: group.R5_O3_UM = 1 if 0 < Prediction_Diff <= 50: group.R5_O3_UL = 1 if Prediction_Diff < -50: group.R5_O3_OM = 1 if -50 <= Prediction_Diff < 0: group.R5_O3_OL = 1 #Adding "+" sign if player.R5_Prediction > 0: player.R5_Prediction_Sign = "+" else: player.R5_Prediction_Sign = "" #Transfer basic information from player data to group data if player.Initial_Role == 'Owner#1': group.R5_O1_P = player.R5_Prediction group.R5_O1_PS = player.R5_Prediction_Sign group.R5_A1 = Asset_Final_Value_Rounded group.R5_O1_E = player.R5_Estimated_Value if player.Initial_Role == 'Owner#2': group.R5_O2_P = player.R5_Prediction group.R5_O2_PS = player.R5_Prediction_Sign group.R5_A2 = Asset_Final_Value_Rounded group.R5_O2_E = player.R5_Estimated_Value if player.Initial_Role == 'Owner#3': group.R5_O3_P = player.R5_Prediction group.R5_O3_PS = player.R5_Prediction_Sign group.R5_A3 = Asset_Final_Value_Rounded group.R5_O3_E = player.R5_Estimated_Value def R1_BN(player: Player): import random seed_1 = random.randint(0,100000) seed_1_converted = seed_1 / 100000 seed_2 = random.randint(0,100000) seed_2_converted = seed_2 / 100000 seed_3 = random.randint(0,100000) seed_3_converted = seed_3 / 100000 player.R1_B1N = player.R1_B1 + seed_1_converted player.R1_B2N = player.R1_B2 + seed_2_converted player.R1_B3N = player.R1_B3 + seed_3_converted def R2_BN(player: Player): import random seed_1 = random.randint(0,100000) seed_1_converted = seed_1 / 100000 seed_2 = random.randint(0,100000) seed_2_converted = seed_2 / 100000 seed_3 = random.randint(0,100000) seed_3_converted = seed_3 / 100000 player.R2_B1N = player.R2_B1 + seed_1_converted player.R2_B2N = player.R2_B2 + seed_2_converted player.R2_B3N = player.R2_B3 + seed_3_converted def R3_BN(player: Player): import random seed_1 = random.randint(0,100000) seed_1_converted = seed_1 / 100000 seed_2 = random.randint(0,100000) seed_2_converted = seed_2 / 100000 seed_3 = random.randint(0,100000) seed_3_converted = seed_3 / 100000 player.R3_B1N = player.R3_B1 + seed_1_converted player.R3_B2N = player.R3_B2 + seed_2_converted player.R3_B3N = player.R3_B3 + seed_3_converted def R4_BN(player: Player): import random seed_1 = random.randint(0,100000) seed_1_converted = seed_1 / 100000 seed_2 = random.randint(0,100000) seed_2_converted = seed_2 / 100000 seed_3 = random.randint(0,100000) seed_3_converted = seed_3 / 100000 player.R4_B1N = player.R4_B1 + seed_1_converted player.R4_B2N = player.R4_B2 + seed_2_converted player.R4_B3N = player.R4_B3 + seed_3_converted def R5_BN(player: Player): import random seed_1 = random.randint(0,100000) seed_1_converted = seed_1 / 100000 seed_2 = random.randint(0,100000) seed_2_converted = seed_2 / 100000 seed_3 = random.randint(0,100000) seed_3_converted = seed_3 / 100000 player.R5_B1N = player.R5_B1 + seed_1_converted player.R5_B2N = player.R5_B2 + seed_2_converted player.R5_B3N = player.R5_B3 + seed_3_converted def Cal_Pay(player: Player): participant = player.participant import random noise = random.randint(0,100000) noise_converted = noise / 100000 player.Total_Payoff = player.R1_Payoff + player.R2_Payoff + player.R3_Payoff + player.R4_Payoff + player.R5_Payoff player.Total_Payoff_Noise = player.Total_Payoff + noise_converted participant.vars["total_payoff"] = player.Total_Payoff def save_payoff(player: Player): participant = player.participant participant.vars["total_payoff_dollar"] = player.Total_Payoff_Dollar participant.vars["r1_payoff"] = player.R1_Payoff participant.vars["r2_payoff"] = player.R2_Payoff participant.vars["r3_payoff"] = player.R3_Payoff participant.vars["r4_payoff"] = player.R4_Payoff participant.vars["r5_payoff"] = player.R5_Payoff if player.Total_Payoff_Dollar == 20: participant.vars["ranking"] = 1 if player.Total_Payoff_Dollar == 15: participant.vars["ranking"] = 2 if player.Total_Payoff_Dollar == 10: participant.vars["ranking"] = 3 def DB(player: Player): group = player.group if player.Initial_Role_Common == 'Buyer': player.O1_R1_DB = group.R1_O1_E * 0.5 - player.R1_B1 player.O1_R2_DB = group.R2_O1_E * 0.5 - player.R2_B1 player.O1_R3_DB = group.R3_O1_E * 0.5 - player.R3_B1 player.O1_R4_DB = group.R4_O1_E * 0.5 - player.R4_B1 player.O1_R5_DB = group.R5_O1_E * 0.5 - player.R5_B1 player.O2_R1_DB = group.R1_O2_E * 0.5 - player.R1_B2 player.O2_R2_DB = group.R2_O2_E * 0.5 - player.R2_B2 player.O2_R3_DB = group.R3_O2_E * 0.5 - player.R3_B2 player.O2_R4_DB = group.R4_O2_E * 0.5 - player.R4_B2 player.O2_R5_DB = group.R5_O2_E * 0.5 - player.R5_B2 player.O3_R1_DB = group.R1_O3_E * 0.5 - player.R1_B3 player.O3_R2_DB = group.R2_O3_E * 0.5 - player.R2_B3 player.O3_R3_DB = group.R3_O3_E * 0.5 - player.R3_B3 player.O3_R4_DB = group.R4_O3_E * 0.5 - player.R4_B3 player.O3_R5_DB = group.R5_O3_E * 0.5 - player.R5_B3 player.O1_DB = (player.O1_R1_DB + player.O1_R2_DB + player.O1_R3_DB + player.O1_R4_DB + player.O1_R5_DB) / 5 player.O2_DB = (player.O2_R1_DB + player.O2_R2_DB + player.O2_R3_DB + player.O2_R4_DB + player.O2_R5_DB) / 5 player.O3_DB = (player.O3_R1_DB + player.O3_R2_DB + player.O3_R3_DB + player.O3_R4_DB + player.O3_R5_DB) / 5 player.Owner_DB = (player.O1_DB + player.O2_DB + player.O3_DB) / 3 class Initial_Grouping(WaitPage): group_by_arrival_time = True title_text = 'Waiting Room' body_text = 'Please wait for others to complete the instruction! You will be automatically pushed to the next page once there are 6 people in the waiting room!' class Before_Start(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): role_save(player) class Role_Assignment(Page): form_model = 'player' class PR_O_Decision(Page): form_model = 'player' form_fields = ['PR_BF_Decision', 'PR_Prediction'] @staticmethod def is_displayed(player: Player): return player.Initial_Role_Common == 'Owner' @staticmethod def before_next_page(player: Player, timeout_happened): PR_Owner(player) class PR_Results(Page): form_model = 'player' class PR_Results_2(Page): form_model = 'player' class PR_Waiting(WaitPage): title_text = 'Waiting Room ' body_text = 'Please wait! You will be automatically pushed to the next page once ALL participants complete their practice round.' class PR_Complete(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): group = player.group PR_Accuracy(group) class R1_O_Decision(Page): form_model = 'player' form_fields = ['R1_BF_Decision', 'R1_Prediction', 'R1_RA'] @staticmethod def is_displayed(player: Player): return player.Initial_Role_Common == 'Owner' @staticmethod def before_next_page(player: Player, timeout_happened): R1_Owner(player) class R1_Waiting_1(WaitPage): title_text = 'Waiting Room' body_text = 'Please wait for all Owners to make the decisions.' class R1_PreBidding(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): return player.Initial_Role_Common == 'Owner' class R1_B_Decision(Page): form_model = 'player' form_fields = ['R1_B1', 'R1_B2', 'R1_B3'] @staticmethod def is_displayed(player: Player): return player.Initial_Role_Common == 'Buyer' @staticmethod def before_next_page(player: Player, timeout_happened): R1_BN(player) class R1_Waiting_2(WaitPage): after_all_players_arrive = R1_Cal_Pay title_text = 'Waiting Room' body_text = 'Please Wait for all Buyers to make their decisions.' class R1_Results(Page): form_model = 'player' class R1_Complete(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): group = player.group R1_Accuracy(group) class R2_O_Decision(Page): form_model = 'player' form_fields = ['R2_BF_Decision', 'R2_Prediction', 'R2_RA'] @staticmethod def is_displayed(player: Player): return player.Initial_Role_Common == 'Owner' @staticmethod def before_next_page(player: Player, timeout_happened): R2_Owner(player) class R2_Waiting_1(WaitPage): title_text = 'Waiting Room' body_text = 'Please wait for all Owners to make the decisions.' class R2_PreBidding(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): return player.Initial_Role_Common == 'Owner' class R2_B_Decision(Page): form_model = 'player' form_fields = ['R2_B1', 'R2_B2', 'R2_B3'] @staticmethod def is_displayed(player: Player): return player.Initial_Role_Common == 'Buyer' @staticmethod def before_next_page(player: Player, timeout_happened): R2_BN(player) class R2_Waiting_2(WaitPage): after_all_players_arrive = R2_Cal_Pay title_text = 'Waiting Room' body_text = 'Please Wait for all Buyers to make their decisions.' class R2_Results(Page): form_model = 'player' class R2_Complete(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): group = player.group R2_Accuracy(group) class R3_O_Decision(Page): form_model = 'player' form_fields = ['R3_BF_Decision', 'R3_Prediction', 'R3_RA'] @staticmethod def is_displayed(player: Player): return player.Initial_Role_Common == 'Owner' @staticmethod def before_next_page(player: Player, timeout_happened): R3_Owner(player) class R3_Waiting_1(WaitPage): title_text = 'Waiting Room' body_text = 'Please wait for all Owners to make the decisions.' class R3_PreBidding(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): return player.Initial_Role_Common == 'Owner' class R3_B_Decision(Page): form_model = 'player' form_fields = ['R3_B1', 'R3_B2', 'R3_B3'] @staticmethod def is_displayed(player: Player): return player.Initial_Role_Common == 'Buyer' @staticmethod def before_next_page(player: Player, timeout_happened): R3_BN(player) class R3_Waiting_2(WaitPage): after_all_players_arrive = R3_Cal_Pay title_text = 'Waiting Room' body_text = 'Please Wait for all Buyers to make their decisions.' class R3_Results(Page): form_model = 'player' class R3_Complete(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): group = player.group R3_Accuracy(group) class R4_O_Decision(Page): form_model = 'player' form_fields = ['R4_BF_Decision', 'R4_Prediction', 'R4_RA'] @staticmethod def is_displayed(player: Player): return player.Initial_Role_Common == 'Owner' @staticmethod def before_next_page(player: Player, timeout_happened): R4_Owner(player) class R4_Waiting_1(WaitPage): title_text = 'Waiting Room' body_text = 'Please wait for all Owners to make the decisions.' class R4_PreBidding(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): return player.Initial_Role_Common == 'Owner' class R4_B_Decision(Page): form_model = 'player' form_fields = ['R4_B1', 'R4_B2', 'R4_B3'] @staticmethod def is_displayed(player: Player): return player.Initial_Role_Common == 'Buyer' @staticmethod def before_next_page(player: Player, timeout_happened): R4_BN(player) class R4_Waiting_2(WaitPage): after_all_players_arrive = R4_Cal_Pay title_text = 'Waiting Room' body_text = 'Please Wait for all Buyers to make their decisions.' class R4_Results(Page): form_model = 'player' class R4_Complete(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): group = player.group R4_Accuracy(group) class R5_O_Decision(Page): form_model = 'player' form_fields = ['R5_BF_Decision', 'R5_Prediction', 'R5_RA'] @staticmethod def is_displayed(player: Player): return player.Initial_Role_Common == 'Owner' @staticmethod def before_next_page(player: Player, timeout_happened): R5_Owner(player) class R5_Waiting_1(WaitPage): title_text = 'Waiting Room' body_text = 'Please wait for all Owners to make the decisions.' class R5_PreBidding(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): return player.Initial_Role_Common == 'Owner' class R5_B_Decision(Page): form_model = 'player' form_fields = ['R5_B1', 'R5_B2', 'R5_B3'] @staticmethod def is_displayed(player: Player): return player.Initial_Role_Common == 'Buyer' @staticmethod def before_next_page(player: Player, timeout_happened): R5_BN(player) class R5_Waiting_2(WaitPage): after_all_players_arrive = R5_Cal_Pay title_text = 'Waiting Room' body_text = 'Please Wait for all Buyers to make their decisions.' class R5_Results(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): group = player.group R5_Accuracy(group) Cal_Pay(player) class Final_Waiting(WaitPage): after_all_players_arrive = rank_participants title_text = 'Waiting Room' body_text = 'Please wait! The experiment will continue momentarily.' class All_Rounds_Complete(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): save_payoff(player) DB(player) page_sequence = [Initial_Grouping, Before_Start, Role_Assignment, PR_O_Decision, PR_Results, PR_Results_2, PR_Waiting, PR_Complete, R1_O_Decision, R1_Waiting_1, R1_PreBidding, R1_B_Decision, R1_Waiting_2, R1_Results, R1_Complete, R2_O_Decision, R2_Waiting_1, R2_PreBidding, R2_B_Decision, R2_Waiting_2, R2_Results, R2_Complete, R3_O_Decision, R3_Waiting_1, R3_PreBidding, R3_B_Decision, R3_Waiting_2, R3_Results, R3_Complete, R4_O_Decision, R4_Waiting_1, R4_PreBidding, R4_B_Decision, R4_Waiting_2, R4_Results, R4_Complete, R5_O_Decision, R5_Waiting_1, R5_PreBidding, R5_B_Decision, R5_Waiting_2, R5_Results, Final_Waiting, All_Rounds_Complete]