from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) author = 'Filip Gonschorek , Mingxian Jin' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'cutcake_last_challenger_4' players_per_group = 4 num_rounds = 7 class Subsession(BaseSubsession): def creating_session(self): if self.round_number == 1: self.group_randomly() else: self.group_like_round(1) class Group(BaseGroup): round_value = models.IntegerField(initial=1) resulting_cut = models.IntegerField(initial=0) resulting_cut_left = models.IntegerField(initial=0) resulting_cut_middle = models.IntegerField(initial=0) resulting_cut_right = models.IntegerField(initial=0) is_dropout_p4 = models.BooleanField() def set_round_value(self): self.round_value += 1 def set_resulting_cut(self): if self.round_value == 1: cuts = sorted([p.cut_value1 for p in self.get_players() if p.cut_value1 is not None]) self.resulting_cut = cuts[0] elif self.round_value == 2: cuts = sorted([p.cut_value2 for p in self.get_players() if p.cut_value2 is not None]) if len(cuts) == 0: self.resulting_cut = self.resulting_cut_left else: self.resulting_cut = cuts[0] elif self.round_value == 3: cuts = sorted([p.cut_value3 for p in self.get_players() if p.cut_value3 is not None]) if len(cuts) == 0: self.resulting_cut = self.resulting_cut_middle else: self.resulting_cut = cuts[0] def set_resulting_cut_left(self): self.resulting_cut_left = self.resulting_cut def set_resulting_cut_middle(self): self.resulting_cut_middle = self.resulting_cut def set_resulting_cut_right(self): self.resulting_cut_right = self.resulting_cut def set_dropout(self): if self.round_value == 1: dropout_candidates = [p for p in self.get_players() if p.is_challenger or p.is_challenger is None] dropout = dropout_candidates[-1] dropout.is_dropout = True elif self.round_value == 2: dropout_candidates = [p for p in self.get_players() if not p.is_dropout and (p.is_challenger2 or p.is_challenger2 is None)] dropout = dropout_candidates[-1] dropout.is_dropout2 = True elif self.round_value == 3: dropout_candidates = [p for p in self.get_players() if not p.is_dropout and not p.is_dropout2 and (p.is_challenger3 or p.is_challenger3 is None)] dropout = dropout_candidates[-1] dropout.is_dropout3 = True def set_cutter(self): if self.round_value == 1: cutter_candidates = [p for p in self.get_players()] cutter = cutter_candidates[0] cutter.is_cutter = True elif self.round_value == 2: cutter_candidates = [p for p in self.get_players() if not p.is_dropout] cutter = cutter_candidates[0] cutter.is_cutter = True elif self.round_value == 3: cutter_candidates = [p for p in self.get_players() if not p.is_dropout and not p.is_dropout2] cutter = cutter_candidates[0] cutter.is_cutter = True def set_is_dropout_p4(self): if self.get_player_by_id(4).is_dropout == True: self.is_dropout_p4 = True else: self.is_dropout_p4 = False class Player(BasePlayer): cut_value = models.IntegerField() cut_value1 = models.IntegerField() cut_value2 = models.IntegerField() cut_value3 = models.IntegerField() is_cutter = models.BooleanField(initial=False) is_challenger_this = models.BooleanField() is_challenger = models.BooleanField() is_challenger2 = models.BooleanField() is_challenger3 = models.BooleanField() is_dropout = models.BooleanField(initial=False) is_dropout2 = models.BooleanField(initial=False) is_dropout3 = models.BooleanField(initial=False) left_piece = models.IntegerField(initial=0) middle_piece = models.IntegerField(initial=0) right_piece = models.IntegerField(initial=0) far_right_piece = models.IntegerField(initial=0) envy = models.BooleanField() planned_leftpiece_1 = models.IntegerField() truth_telling_1st_stage = models.BooleanField() planned_leftpiece_2 = models.IntegerField() truth_telling_2nd_stage = models.BooleanField() planned_leftpiece_3 = models.IntegerField() truth_telling_3rd_stage = models.BooleanField() payoff_help = models.CurrencyField(initial=0) def set_cut_value(self): if self.group.round_value == 1: self.cut_value1 = self.cut_value elif self.group.round_value == 2: self.cut_value2 = self.cut_value elif self.group.round_value == 3: self.cut_value3 = self.cut_value def set_is_challenger(self): if self.group.round_value == 1: self.is_challenger = self.is_challenger_this elif self.group.round_value == 2: self.is_challenger2 = self.is_challenger_this elif self.group.round_value == 3: self.is_challenger3 = self.is_challenger_this def set_left_piece(self): if self.id_in_group == 1: if self.group.resulting_cut_left <= 60: self.left_piece = 0 elif self.group.resulting_cut_left <= 90: self.left_piece = self.group.resulting_cut_left - 60 elif self.group.resulting_cut_left <= 180: self.left_piece = 30 elif self.group.resulting_cut_left <= 250: self.left_piece = self.group.resulting_cut_left - 180 + 30 elif self.group.resulting_cut_left <= 270: self.left_piece = 100 elif self.group.resulting_cut_left <= 290: self.left_piece = self.group.resulting_cut_left - 270 + 100 else: self.left_piece = 120 elif self.id_in_group == 2: if self.group.resulting_cut_left <= 110: self.left_piece = 0 elif self.group.resulting_cut_left <= 160: self.left_piece = self.group.resulting_cut_left - 110 elif self.group.resulting_cut_left <= 250: self.left_piece = 50 elif self.group.resulting_cut_left <= 280: self.left_piece = self.group.resulting_cut_left - 250 + 50 elif self.group.resulting_cut_left <= 340: self.left_piece = 80 elif self.group.resulting_cut_left <= 380: self.left_piece = self.group.resulting_cut_left - 340 + 80 else: self.left_piece = 120 elif self.id_in_group == 3: if self.group.resulting_cut_left <= 230: self.left_piece = 0 elif self.group.resulting_cut_left <= 270: self.left_piece = self.group.resulting_cut_left - 230 elif self.group.resulting_cut_left <= 310: self.left_piece = 40 elif self.group.resulting_cut_left <= 350: self.left_piece = self.group.resulting_cut_left - 310 + 40 elif self.group.resulting_cut_left <= 370: self.left_piece = 80 elif self.group.resulting_cut_left <= 410: self.left_piece = self.group.resulting_cut_left - 370 + 80 else: self.left_piece = 120 elif self.id_in_group == 4: if self.group.resulting_cut_left <= 90: self.left_piece = 0 elif self.group.resulting_cut_left <= 110: self.left_piece = self.group.resulting_cut_left - 90 elif self.group.resulting_cut_left <= 420: self.left_piece = 20 elif self.group.resulting_cut_left <= 520: self.left_piece = self.group.resulting_cut_left - 420 + 20 else: self.left_piece = 120 def set_middle_piece(self): if self.id_in_group == 1: if self.group.resulting_cut_middle <= 60: self.middle_piece = 0 elif self.group.resulting_cut_middle <= 90: self.middle_piece = self.group.resulting_cut_middle - 60 elif self.group.resulting_cut_middle <= 180: self.middle_piece = 30 elif self.group.resulting_cut_middle <= 250: self.middle_piece = self.group.resulting_cut_middle - 180 + 30 elif self.group.resulting_cut_middle <= 270: self.middle_piece = 100 elif self.group.resulting_cut_middle <= 290: self.middle_piece = self.group.resulting_cut_middle - 270 + 100 else: self.middle_piece = 120 elif self.id_in_group == 2: if self.group.resulting_cut_middle <= 110: self.middle_piece = 0 elif self.group.resulting_cut_middle <= 160: self.middle_piece = self.group.resulting_cut_middle - 110 elif self.group.resulting_cut_middle <= 250: self.middle_piece = 50 elif self.group.resulting_cut_middle <= 280: self.middle_piece = self.group.resulting_cut_middle - 250 + 50 elif self.group.resulting_cut_middle <= 340: self.middle_piece = 80 elif self.group.resulting_cut_middle <= 380: self.middle_piece = self.group.resulting_cut_middle - 340 + 80 else: self.middle_piece = 120 elif self.id_in_group == 3: if self.group.resulting_cut_middle <= 230: self.middle_piece = 0 elif self.group.resulting_cut_middle <= 270: self.middle_piece = self.group.resulting_cut_middle - 230 elif self.group.resulting_cut_middle <= 310: self.middle_piece = 40 elif self.group.resulting_cut_middle <= 350: self.middle_piece = self.group.resulting_cut_middle - 310 + 40 elif self.group.resulting_cut_middle <= 370: self.middle_piece = 80 elif self.group.resulting_cut_middle <= 410: self.middle_piece = self.group.resulting_cut_middle - 370 + 80 else: self.middle_piece = 120 elif self.id_in_group == 4: if self.group.resulting_cut_middle <= 90: self.middle_piece = 0 elif self.group.resulting_cut_middle <= 110: self.middle_piece = self.group.resulting_cut_middle - 90 elif self.group.resulting_cut_middle <= 420: self.middle_piece = 20 elif self.group.resulting_cut_middle <= 520: self.middle_piece = self.group.resulting_cut_middle - 420 + 20 else: self.middle_piece = 120 self.middle_piece = self.middle_piece - self.left_piece def set_right_piece(self): if self.id_in_group == 1: if self.group.resulting_cut_right <= 60: self.right_piece = 0 elif self.group.resulting_cut_right <= 90: self.right_piece = self.group.resulting_cut_right - 60 elif self.group.resulting_cut_right <= 180: self.right_piece = 30 elif self.group.resulting_cut_right <= 250: self.right_piece = self.group.resulting_cut_right - 180 + 30 elif self.group.resulting_cut_right <= 270: self.right_piece = 100 elif self.group.resulting_cut_right <= 290: self.right_piece = self.group.resulting_cut_right - 270 + 100 else: self.right_piece = 120 elif self.id_in_group == 2: if self.group.resulting_cut_right <= 110: self.right_piece = 0 elif self.group.resulting_cut_right <= 160: self.right_piece = self.group.resulting_cut_right - 110 elif self.group.resulting_cut_right <= 250: self.right_piece = 50 elif self.group.resulting_cut_right <= 280: self.right_piece = self.group.resulting_cut_right - 250 + 50 elif self.group.resulting_cut_right <= 340: self.right_piece = 80 elif self.group.resulting_cut_right <= 380: self.right_piece = self.group.resulting_cut_right - 340 + 80 else: self.right_piece = 120 elif self.id_in_group == 3: if self.group.resulting_cut_right <= 230: self.right_piece = 0 elif self.group.resulting_cut_right <= 270: self.right_piece = self.group.resulting_cut_right - 230 elif self.group.resulting_cut_right <= 310: self.right_piece = 40 elif self.group.resulting_cut_right <= 350: self.right_piece = self.group.resulting_cut_right - 310 + 40 elif self.group.resulting_cut_right <= 370: self.right_piece = 80 elif self.group.resulting_cut_right <= 410: self.right_piece = self.group.resulting_cut_right - 370 + 80 else: self.right_piece = 120 elif self.id_in_group == 4: if self.group.resulting_cut_right <= 90: self.right_piece = 0 elif self.group.resulting_cut_right <= 110: self.right_piece = self.group.resulting_cut_right - 90 elif self.group.resulting_cut_right <= 420: self.right_piece = 20 elif self.group.resulting_cut_right <= 520: self.right_piece = self.group.resulting_cut_right - 420 + 20 else: self.right_piece = 120 self.far_right_piece = 120 - self.right_piece self.right_piece = self.right_piece - self.middle_piece - self.left_piece def set_payoff(self): if self.is_dropout: self.payoff = c(self.left_piece) elif self.is_dropout2: self.payoff = c(self.middle_piece) elif self.is_dropout3: self.payoff = c(self.right_piece) else: self.payoff = c(self.far_right_piece) def set_envy(self): if self.is_dropout: if self.left_piece >= self.middle_piece and self.left_piece >= self.right_piece and self.left_piece >= self.far_right_piece: self.envy = False else: self.envy = True elif self.is_dropout2: if self.middle_piece >= self.left_piece and self.middle_piece >= self.right_piece and self.middle_piece >= self.far_right_piece: self.envy = False else: self.envy = True elif self.is_dropout3: if self.right_piece >= self.left_piece and self.right_piece >= self.middle_piece and self.right_piece >= self.far_right_piece: self.envy = False else: self.envy = True else: if self.far_right_piece >= self.left_piece and self.far_right_piece >= self.middle_piece and self.far_right_piece >= self.right_piece: self.envy = False else: self.envy = True def set_planned_leftpiece_1(self): if self.id_in_group == 1: if self.cut_value <= 60: self.planned_leftpiece_1 = 0 elif self.cut_value <= 90: self.planned_leftpiece_1 = self.cut_value - 60 elif self.cut_value <= 180: self.planned_leftpiece_1 = 30 elif self.cut_value <= 250: self.planned_leftpiece_1 = self.cut_value - 180 + 30 elif self.cut_value <= 270: self.planned_leftpiece_1 = 100 elif self.cut_value <= 290: self.planned_leftpiece_1 = self.cut_value - 270 + 100 else: self.planned_leftpiece_1 = 120 elif self.id_in_group == 2: if self.is_challenger == False: if self.group.resulting_cut <= 110: self.planned_leftpiece_1 = 0 elif self.group.resulting_cut <= 160: self.planned_leftpiece_1 = self.group.resulting_cut - 110 elif self.group.resulting_cut <= 250: self.planned_leftpiece_1 = 50 elif self.group.resulting_cut <= 280: self.planned_leftpiece_1 = self.group.resulting_cut - 250 + 50 elif self.group.resulting_cut <= 340: self.planned_leftpiece_1 = 80 elif self.group.resulting_cut <= 380: self.planned_leftpiece_1 = self.group.resulting_cut - 340 + 80 else: self.planned_leftpiece_1 = 120 elif self.is_challenger == True: if self.cut_value <= 110: self.planned_leftpiece_1 = 0 elif self.cut_value <= 160: self.planned_leftpiece_1 = self.cut_value - 110 elif self.cut_value <= 250: self.planned_leftpiece_1 = 50 elif self.cut_value <= 280: self.planned_leftpiece_1 = self.cut_value - 250 + 50 elif self.cut_value <= 340: self.planned_leftpiece_1 = 80 elif self.cut_value <= 380: self.planned_leftpiece_1 = self.cut_value - 340 + 80 else: self.planned_leftpiece_1 = 120 elif self.id_in_group == 3: if self.is_challenger == False: if self.group.resulting_cut <= 230: self.planned_leftpiece_1 = 0 elif self.group.resulting_cut <= 270: self.planned_leftpiece_1 = self.group.resulting_cut - 230 elif self.group.resulting_cut <= 310: self.planned_leftpiece_1 = 40 elif self.group.resulting_cut <= 350: self.planned_leftpiece_1 = self.group.resulting_cut - 310 + 40 elif self.group.resulting_cut <= 370: self.planned_leftpiece_1 = 80 elif self.group.resulting_cut <= 410: self.planned_leftpiece_1 = self.group.resulting_cut - 370 + 80 else: self.planned_leftpiece_1 = 120 elif self.is_challenger == True: if self.cut_value <= 230: self.planned_leftpiece_1 = 0 elif self.cut_value <= 270: self.planned_leftpiece_1 = self.cut_value - 230 elif self.cut_value <= 310: self.planned_leftpiece_1 = 40 elif self.cut_value <= 350: self.planned_leftpiece_1 = self.cut_value - 310 + 40 elif self.cut_value <= 370: self.planned_leftpiece_1 = 80 elif self.cut_value <= 410: self.planned_leftpiece_1 = self.cut_value - 370 + 80 else: self.planned_leftpiece_1 = 120 elif self.id_in_group == 4: if self.group.resulting_cut <= 90: self.planned_leftpiece_1 = 0 elif self.group.resulting_cut <= 110: self.planned_leftpiece_1 = self.group.resulting_cut - 90 elif self.group.resulting_cut <= 420: self.planned_leftpiece_1 = 20 elif self.group.resulting_cut <= 520: self.planned_leftpiece_1 = self.group.resulting_cut - 420 + 20 else: self.planned_leftpiece_1 = 120 def set_truthtelling_1(self): if self.id_in_group == 1: if self.planned_leftpiece_1 >= 25 and self.planned_leftpiece_1 <= 35: self.truth_telling_1st_stage = True else: self.truth_telling_1st_stage = False elif self.id_in_group == 2: if self.is_challenger == False: if self.planned_leftpiece_1 < 30 : self.truth_telling_1st_stage = True else: self.truth_telling_1st_stage = False elif self.is_challenger == True: if self.planned_leftpiece_1 >= 25 and self.planned_leftpiece_1 <= 35: self.truth_telling_1st_stage = True else: self.truth_telling_1st_stage = False elif self.id_in_group == 3: if self.is_challenger == False: if self.planned_leftpiece_1 < 30 : self.truth_telling_1st_stage = True else: self.truth_telling_1st_stage = False elif self.is_challenger == True: if self.planned_leftpiece_1 >= 25 and self.planned_leftpiece_1 <= 35: self.truth_telling_1st_stage = True else: self.truth_telling_1st_stage = False elif self.id_in_group == 4: if self.is_challenger == False: if self.planned_leftpiece_1 < 30 : self.truth_telling_1st_stage = True else: self.truth_telling_1st_stage = False elif self.is_challenger == True: if self.planned_leftpiece_1 >= 30 : self.truth_telling_1st_stage = True else: self.truth_telling_1st_stage = False def set_planned_leftpiece_2(self): if self.id_in_group == 1 and self.is_dropout == False: if self.cut_value <= 60 : self.planned_leftpiece_2 = 0 - self.left_piece elif self.cut_value <= 90: self.planned_leftpiece_2 = self.cut_value - 60 - self.left_piece elif self.cut_value <= 180: self.planned_leftpiece_2 = 30 - self.left_piece elif self.cut_value <= 250: self.planned_leftpiece_2 = self.cut_value - 180 + 30 - self.left_piece elif self.cut_value <= 270: self.planned_leftpiece_2 = 100 - self.left_piece elif self.cut_value <= 290: self.planned_leftpiece_2 = self.cut_value - 270 + 100 - self.left_piece else: self.planned_leftpiece_2 = 120 - self.left_piece elif self.id_in_group == 2 and self.is_cutter == True: if self.cut_value <= 110 : self.planned_leftpiece_2 = 0 - self.left_piece elif self.cut_value <= 160: self.planned_leftpiece_2 = self.cut_value - 110 - self.left_piece elif self.cut_value <= 250: self.planned_leftpiece_2 = 50 - self.left_piece elif self.cut_value <= 280: self.planned_leftpiece_2 = self.cut_value - 250 + 50 - self.left_piece elif self.cut_value <= 340: self.planned_leftpiece_2 = 80 - self.left_piece elif self.cut_value <= 380: self.planned_leftpiece_2 = self.cut_value - 340 + 80 - self.left_piece else: self.planned_leftpiece_2 = 120 - self.left_piece elif self.id_in_group == 2 and self.is_dropout == False and self.is_challenger2 == False: if self.group.resulting_cut <= 110 : self.planned_leftpiece_2 = 0 - self.left_piece elif self.group.resulting_cut <= 160 : self.planned_leftpiece_2 = self.group.resulting_cut - 110 - self.left_piece elif self.group.resulting_cut <= 250 : self.planned_leftpiece_2 = 50 - self.left_piece elif self.group.resulting_cut <= 280 : self.planned_leftpiece_2 = self.group.resulting_cut - 250 + 50 - self.left_piece elif self.group.resulting_cut <= 340: self.planned_leftpiece_2 = 80 - self.left_piece elif self.group.resulting_cut <= 380 : self.planned_leftpiece_2 = self.group.resulting_cut - 340 + 80 - self.left_piece else: self.planned_leftpiece_2 = 120 - self.left_piece elif self.id_in_group == 2 and self.is_dropout == False and self.is_challenger2 == True: if self.cut_value <= 110 : self.planned_leftpiece_2 = 0 - self.left_piece elif self.cut_value <= 160 : self.planned_leftpiece_2 = self.cut_value - 110 - self.left_piece elif self.cut_value <= 250 : self.planned_leftpiece_2 = 50 - self.left_piece elif self.cut_value <= 280 : self.planned_leftpiece_2 = self.cut_value - 250 + 50 - self.left_piece elif self.cut_value <= 340: self.planned_leftpiece_2 = 80 - self.left_piece elif self.cut_value <= 380 : self.planned_leftpiece_2 = self.cut_value - 340 + 80 - self.left_piece else: self.planned_leftpiece_2 = 120 - self.left_piece elif self.id_in_group == 3 and self.is_dropout == False and self.is_challenger2 == False: if self.group.resulting_cut <= 230 : self.planned_leftpiece_2 = 0 - self.left_piece elif self.group.resulting_cut <= 270 : self.planned_leftpiece_2 = self.group.resulting_cut - 230 - self.left_piece elif self.group.resulting_cut <= 310 : self.planned_leftpiece_2 = 40 - self.left_piece elif self.group.resulting_cut <= 350 : self.planned_leftpiece_2 = self.group.resulting_cut - 310 + 40 - self.left_piece elif self.group.resulting_cut <= 370: self.planned_leftpiece_2 = 80 - self.left_piece elif self.group.resulting_cut <= 410 : self.planned_leftpiece_2 = self.group.resulting_cut - 370 + 80 - self.left_piece else: self.planned_leftpiece_2 = 120 - self.left_piece elif self.id_in_group == 3 and self.is_dropout == False and self.is_challenger2 == True and self.group.is_dropout_p4 == False: if self.cut_value <= 230 : self.planned_leftpiece_2 = 0 - self.left_piece elif self.cut_value <= 270 : self.planned_leftpiece_2 = self.cut_value - 230 - self.left_piece elif self.cut_value <= 310 : self.planned_leftpiece_2 = 40 - self.left_piece elif self.cut_value <= 350 : self.planned_leftpiece_2 = self.cut_value - 310 + 40 - self.left_piece elif self.cut_value <= 370: self.planned_leftpiece_2 = 80 - self.left_piece elif self.cut_value <= 410 : self.planned_leftpiece_2 = self.cut_value - 370 + 80 - self.left_piece else: self.planned_leftpiece_2 = 120 - self.left_piece elif self.id_in_group == 3 and self.is_dropout == False and self.is_challenger2 == True and self.group.is_dropout_p4 == True: if self.group.resulting_cut <= 230 : self.planned_leftpiece_2 = 0 - self.left_piece elif self.group.resulting_cut <= 270 : self.planned_leftpiece_2 = self.group.resulting_cut - 230 - self.left_piece elif self.group.resulting_cut <= 310 : self.planned_leftpiece_2 = 40 - self.left_piece elif self.group.resulting_cut <= 350 : self.planned_leftpiece_2 = self.group.resulting_cut - 310 + 40 - self.left_piece elif self.group.resulting_cut <= 370: self.planned_leftpiece_2 = 80 - self.left_piece elif self.group.resulting_cut <= 410 : self.planned_leftpiece_2 = self.group.resulting_cut - 370 + 80 - self.left_piece else: self.planned_leftpiece_2 = 120 - self.left_piece elif self.id_in_group == 4 and self.is_dropout == False: if self.group.resulting_cut <= 90 : self.planned_leftpiece_2 = 0 - self.left_piece elif self.group.resulting_cut <= 110 : self.planned_leftpiece_2 = self.group.resulting_cut - 90 - self.left_piece elif self.group.resulting_cut <= 420 : self.planned_leftpiece_2 = 20 - self.left_piece elif self.group.resulting_cut <= 520 : self.planned_leftpiece_2 = self.group.resulting_cut - 420 + 20 - self.left_piece else: self.planned_leftpiece_2 = 120 - self.left_piece def set_truthtelling_2(self): if self.id_in_group == 1 and self.is_dropout == False: if self.planned_leftpiece_2 >= int((120 - self.left_piece)/3) - 5 and self.planned_leftpiece_2 <= int((120 - self.left_piece)/3) + 5: self.truth_telling_2nd_stage = True else: self.truth_telling_2nd_stage = False elif self.id_in_group == 2 and self.is_cutter == True: if self.planned_leftpiece_2 >= int((120 - self.left_piece)/3) - 5 and self.planned_leftpiece_2 <= int((120 - self.left_piece)/3) + 5: self.truth_telling_2nd_stage = True else: self.truth_telling_2nd_stage = False elif self.id_in_group == 2 and self.is_dropout == False and self.is_cutter == False and self.is_challenger2 == False: if self.planned_leftpiece_2 >= int((120 - self.left_piece)/3): self.truth_telling_2nd_stage = False else: self.truth_telling_2nd_stage = True elif self.id_in_group == 2 and self.is_dropout == False and self.is_cutter == False and self.is_challenger2 == True: if self.planned_leftpiece_2 >= int((120 - self.left_piece)/3) - 5 and self.planned_leftpiece_2 <= int((120 - self.left_piece)/3) + 5: self.truth_telling_2nd_stage = True else: self.truth_telling_2nd_stage = False elif self.id_in_group == 3 and self.is_dropout == False and self.is_challenger2 == False: if self.planned_leftpiece_2 >= int((120 - self.left_piece)/3): self.truth_telling_2nd_stage = False else: self.truth_telling_2nd_stage = True elif self.id_in_group == 3 and self.is_dropout == False and self.is_challenger2 == True and self.group.is_dropout_p4 == False: if self.planned_leftpiece_2 >= int((120 - self.left_piece)/3) - 5 and self.planned_leftpiece_2 <= int((120 - self.left_piece)/3) + 5: self.truth_telling_2nd_stage = True else: self.truth_telling_2nd_stage = False elif self.id_in_group == 3 and self.is_dropout == False and self.is_challenger2 == True and self.group.is_dropout_p4 == True: if self.planned_leftpiece_2 >= int((120 - self.left_piece)/3): self.truth_telling_2nd_stage = True else: self.truth_telling_2nd_stage = False elif self.id_in_group == 4 and self.is_dropout == False and self.is_challenger2 == True: if self.planned_leftpiece_2 >= int((120 - self.left_piece)/3): self.truth_telling_2nd_stage = True else: self.truth_telling_2nd_stage = False elif self.id_in_group == 4 and self.is_dropout == False and self.is_challenger2 == False: if self.planned_leftpiece_2 < int((120 - self.left_piece)/3): self.truth_telling_2nd_stage = True else: self.truth_telling_2nd_stage = False def set_planned_leftpiece_3(self): if self.id_in_group == 1 and self.is_dropout == False and self.is_dropout2 == False: if self.cut_value <= 60 : self.planned_leftpiece_3 = 0 - self.left_piece - self.middle_piece elif self.cut_value <= 90: self.planned_leftpiece_3 = self.cut_value - 60 - self.left_piece - self.middle_piece elif self.cut_value <= 180: self.planned_leftpiece_3 = 30 - self.left_piece - self.middle_piece elif self.cut_value <= 250: self.planned_leftpiece_3 = self.cut_value - 180 + 30 - self.left_piece - self.middle_piece elif self.cut_value <= 270: self.planned_leftpiece_3 = 100 - self.left_piece - self.middle_piece elif self.cut_value <= 290: self.planned_leftpiece_3 = self.cut_value - 270 + 100 - self.left_piece - self.middle_piece else: self.planned_leftpiece_3 = 120 - self.left_piece - self.middle_piece elif self.id_in_group == 2 and self.is_cutter == True: if self.cut_value <= 110 : self.planned_leftpiece_3 = 0 - self.left_piece - self.middle_piece elif self.cut_value <= 160: self.planned_leftpiece_3 = self.cut_value - 110 - self.left_piece - self.middle_piece elif self.cut_value <= 250: self.planned_leftpiece_3 = 50 - self.left_piece - self.middle_piece elif self.cut_value <= 280: self.planned_leftpiece_3 = self.cut_value - 250 + 50 - self.left_piece - self.middle_piece elif self.cut_value <= 340: self.planned_leftpiece_3 = 80 - self.left_piece - self.middle_piece elif self.cut_value <= 380: self.planned_leftpiece_3 = self.cut_value - 340 + 80 - self.left_piece - self.middle_piece else: self.planned_leftpiece_3 = 120 - self.left_piece - self.middle_piece elif self.id_in_group == 2 and self.is_dropout == False and self.is_dropout2 == False and self.is_cutter == False: if self.group.resulting_cut <= 110 : self.planned_leftpiece_3 = 0 - self.left_piece - self.middle_piece elif self.group.resulting_cut <= 160 : self.planned_leftpiece_3 = self.group.resulting_cut - 110 - self.left_piece - self.middle_piece elif self.group.resulting_cut <= 250 : self.planned_leftpiece_3 = 50 - self.left_piece - self.middle_piece elif self.group.resulting_cut <= 280 : self.planned_leftpiece_3 = self.group.resulting_cut - 250 + 50 - self.left_piece - self.middle_piece elif self.group.resulting_cut <= 340: self.planned_leftpiece_3 = 80 - self.left_piece - self.middle_piece elif self.group.resulting_cut <= 380 : self.planned_leftpiece_3 = self.group.resulting_cut - 340 + 80 - self.left_piece - self.middle_piece else: self.planned_leftpiece_3 = 120 - self.left_piece - self.middle_piece elif self.id_in_group == 3 and self.is_cutter == True : if self.cut_value <= 230 : self.planned_leftpiece_3 = 0 - self.left_piece - self.middle_piece elif self.cut_value <= 270 : self.planned_leftpiece_3 = self.cut_value - 230 - self.left_piece - self.middle_piece elif self.cut_value <= 310 : self.planned_leftpiece_3 = 40 - self.left_piece - self.middle_piece elif self.cut_value <= 350 : self.planned_leftpiece_3 = self.cut_value - 310 + 40 - self.left_piece - self.middle_piece elif self.cut_value <= 370: self.planned_leftpiece_3 = 80 - self.left_piece - self.middle_piece elif self.cut_value <= 410 : self.planned_leftpiece_3 = self.cut_value - 370 + 80 - self.left_piece - self.middle_piece else: self.planned_leftpiece_3 = 120 - self.left_piece - self.middle_piece elif self.id_in_group == 3 and self.is_dropout == False and self.is_dropout2 == False and self.is_cutter == False: if self.group.resulting_cut <= 230 : self.planned_leftpiece_3 = 0 - self.left_piece - self.middle_piece elif self.group.resulting_cut <= 270 : self.planned_leftpiece_3 = self.group.resulting_cut - 230 - self.left_piece - self.middle_piece elif self.group.resulting_cut <= 310 : self.planned_leftpiece_3 = 40 - self.left_piece - self.middle_piece elif self.group.resulting_cut <= 350 : self.planned_leftpiece_3 = self.group.resulting_cut - 310 + 40 - self.left_piece - self.middle_piece elif self.group.resulting_cut <= 370: self.planned_leftpiece_3 = 80 - self.left_piece - self.middle_piece elif self.group.resulting_cut <= 410 : self.planned_leftpiece_3 = self.group.resulting_cut - 370 + 80 - self.left_piece - self.middle_piece else: self.planned_leftpiece_3 = 120 - self.left_piece - self.middle_piece elif self.id_in_group == 4 and self.is_dropout == False and self.is_dropout2 == False: if self.group.resulting_cut <= 90 : self.planned_leftpiece_3 = 0 - self.left_piece - self.middle_piece elif self.group.resulting_cut <= 110 : self.planned_leftpiece_3 = self.group.resulting_cut - 90 - self.left_piece - self.middle_piece elif self.group.resulting_cut <= 420 : self.planned_leftpiece_3 = 20 - self.left_piece - self.middle_piece elif self.group.resulting_cut <= 520 : self.planned_leftpiece_3 = self.group.resulting_cut - 420 + 20 - self.left_piece - self.middle_piece else: self.planned_leftpiece_3 = 120 - self.left_piece - self.middle_piece def set_truthtelling_3(self): if self.id_in_group == 1 and self.is_dropout == False and self.is_dropout2 == False: if self.planned_leftpiece_3 >= int((120 - self.left_piece - self.middle_piece)/2) - 5 and self.planned_leftpiece_3 <= int((120 - self.left_piece - self.middle_piece)/2) + 5: self.truth_telling_3rd_stage = True else: self.truth_telling_3rd_stage = False elif self.id_in_group == 2 and self.is_dropout == False and self.is_dropout2 == False and self.is_cutter == True: if self.planned_leftpiece_3 >= int((120 - self.left_piece - self.middle_piece)/2) - 5 and self.planned_leftpiece_3 <= int((120 - self.left_piece - self.middle_piece)/2) + 5: self.truth_telling_3rd_stage = True else: self.truth_telling_3rd_stage = False elif self.id_in_group == 2 and self.is_dropout == False and self.is_dropout2 == False and self.is_challenger3 == False: if self.planned_leftpiece_3 >= int((120 - self.left_piece - self.middle_piece)/2): self.truth_telling_3rd_stage = False else: self.truth_telling_3rd_stage = True elif self.id_in_group == 2 and self.is_dropout == False and self.is_dropout2 == False and self.is_challenger3 == True: if self.planned_leftpiece_3 >= int((120 - self.left_piece - self.middle_piece)/2): self.truth_telling_3rd_stage = True else: self.truth_telling_3rd_stage = False elif self.id_in_group == 3 and self.is_dropout == False and self.is_dropout2 == False and self.is_cutter == True: if self.planned_leftpiece_3 >= int((120 - self.left_piece - self.middle_piece)/2) - 5 and self.planned_leftpiece_3 <= int((120 - self.left_piece - self.middle_piece)/2) + 5: self.truth_telling_3rd_stage = True else: self.truth_telling_3rd_stage = False elif self.id_in_group == 3 and self.is_dropout == False and self.is_dropout2 == False and self.is_challenger3 == False: if self.planned_leftpiece_3 >= int((120 - self.left_piece - self.middle_piece)/2): self.truth_telling_3rd_stage = False else: self.truth_telling_3rd_stage = True elif self.id_in_group == 3 and self.is_dropout == False and self.is_dropout2 == False and self.is_challenger3 == True: if self.planned_leftpiece_3 >= int((120 - self.left_piece)/3): self.truth_telling_3rd_stage = True else: self.truth_telling_3rd_stage = False elif self.id_in_group == 4 and self.is_dropout == False and self.is_dropout2 == False and self.is_challenger3 == False: if self.planned_leftpiece_3 < int((120 - self.left_piece)/3): self.truth_telling_3rd_stage = True else: self.truth_telling_3rd_stage = False elif self.id_in_group == 4 and self.is_dropout == False and self.is_dropout2 == False and self.is_challenger3 == True: if self.planned_leftpiece_3 >= int((120 - self.left_piece)/3): self.truth_telling_3rd_stage = True else: self.truth_telling_3rd_stage = False def set_payoff_help(self): self.payoff_help = self.in_round(1).payoff + self.in_round(2).payoff + self.in_round(3).payoff + \ self.in_round(4).payoff + self.in_round(5).payoff + self.in_round(6).payoff + \ self.in_round(7).payoff