class Group(BaseGroup): def winner_func(self, confidence, rank): if rank == 1: return (-50.35*(confidence**2) + 100.17*confidence - 0.007) + 1e-2 #To account for approximation errors else: return (-50.35*(confidence**2) + 0.5315*confidence + 49.811) + 1e-2 def reward_confidence_level2(self,player,rank): score = self.winner_func(player.task2_top_chance/100., rank) return score def reward_confidence_level3(self,player,rank): score = self.winner_func(player.task3_top_chance/100., rank) return score def reward_confidence_level4(self,player,rank): score = self.winner_func(player.task4_top_chance/100., rank) return score def set_payoffs(self): print("Alloting payoff's to players now") if(self.session.vars['paying_task']==1): players = self.get_players() for p in players: p.payoff = 10*p.task1_correct + 50*(p.task1_correct == p.task1_correct_pred) elif(self.session.vars['paying_task']==2): players = self.get_players() for p in players: p.payoff = 0 ranked_players = list(sorted(players, key=operator.attrgetter('task2_correct'))) ranked_players.reverse() ranked_players[0].payoff = 40*ranked_players[0].task2_correct for i in range(len(ranked_players)): ranked_players[i].payoff += 50*(ranked_players[i].task2_correct_pred == ranked_players[i].task2_correct) ranked_players[i].payoff += 50*((i+1) == ranked_players[i].task2_rank_pred) ranked_players[i].payoff += self.reward_confidence_level2(ranked_players[i], i+1) elif(self.session.vars['paying_task']==3): players = self.get_players() for p in players: p.payoff = 0 for p in players: choice = p.task3_choice if(choice == 'Rule 10'): p.payoff = 10*p.task3_correct else: other_players = p.get_others_in_group() max_val = max([x.task2_correct for x in other_players]) if(p.task3_correct == max_val): toss = random.random() if toss>=0.5 : p.payoff = 40*p.task3_correct if(p.task3_correct > max_val): p.payoff = 40*p.task3_correct ranked_players = list(sorted(players, key=operator.attrgetter('task3_correct'))) ranked_players.reverse() for i in range(len(ranked_players)): ranked_players[i].payoff += 50*(ranked_players[i].task3_correct_pred == ranked_players[i].task3_correct) ranked_players[i].payoff += 50*((i+1) == ranked_players[i].task3_rank_pred) ranked_players[i].payoff += self.reward_confidence_level3(ranked_players[i], i+1) elif(self.session.vars['paying_task']==4): players = self.get_players() for p in players: p.payoff = 0 for p in players: choice = p.task4_choice if(choice == 'Rule 10'): p.payoff = 10*p.task1_correct else: other_players = p.get_others_in_group() max_val = max([x.task1_correct for x in other_players]) if(p.task1_correct == max_val): toss = random.random() if toss>=0.5: p.payoff = 40*p.task1_correct if(p.task1_correct > max_val): p.payoff = 40*p.task1_correct ranked_players = list(sorted(players, key=operator.attrgetter('task1_correct'))) ranked_players.reverse() for i in range(len(ranked_players)): ranked_players[i].payoff += 50*((i+1) == ranked_players[i].task4_rank_pred) ranked_players[i].payoff += self.reward_confidence_level4(ranked_players[i], i+1)