from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'MBandit' players_per_group = 8 num_rounds = 30 num_choices = [ [0,0], [1,0], [2,0], [3,0], [4,0], [5,0], [6,0], [7,0], [8,0], [9,0], [10,0] ] initial_pref_count = 0 sigma = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): feedback1 = C.NUM_CHOICES #選択数 feedback2 = C.NUM_CHOICES #いいね数 choice_pref0 = models.IntegerField(initial=0) choice_pref1 = models.IntegerField(initial=0) choice_pref2 = models.IntegerField(initial=0) choice_pref3 = models.IntegerField(initial=0) choice_pref4 = models.IntegerField(initial=0) choice_pref5 = models.IntegerField(initial=0) choice_pref6 = models.IntegerField(initial=0) choice_pref7 = models.IntegerField(initial=0) choice_pref8 = models.IntegerField(initial=0) choice_pref9 = models.IntegerField(initial=0) choice_pref10 = models.IntegerField(initial=0) good_pref0 = models.IntegerField(initial=0) good_pref1 = models.IntegerField(initial=0) good_pref2 = models.IntegerField(initial=0) good_pref3 = models.IntegerField(initial=0) good_pref4 = models.IntegerField(initial=0) good_pref5 = models.IntegerField(initial=0) good_pref6 = models.IntegerField(initial=0) good_pref7 = models.IntegerField(initial=0) good_pref8 = models.IntegerField(initial=0) good_pref9 = models.IntegerField(initial=0) good_pref10 = models.IntegerField(initial=0) def feedback(self): import random players = self.get_players() append_choice = [] for p in players: #print(p.choice1) append_choice.append(p.choice1) if p.choice1 == 1 or p.choice1 == 2 or p.choice1 == 3 or p.choice1 == 4 or p.choice1 == 6 or p.choice1 == 8 or p.choice1 == 10: p.payoff = int(round(random.gauss(10, C.SIGMA))) elif p.choice1 == 0 or p.choice1 == 5: p.payoff = int(round(random.gauss(6, C.SIGMA))) elif p.choice1 == 7: p.payoff = int(round(random.gauss(14, C.SIGMA))) elif p.choice1 == 9 and self.round_number <= C.NUM_ROUNDS/2: p.payoff = int(round(random.gauss(10, C.SIGMA))) elif p.choice1 == 9 and self.round_number > C.NUM_ROUNDS/2: p.payoff = int(round(random.gauss(10 + int(self.round_number-(C.NUM_ROUNDS/2)), C.SIGMA))) # print(append_choice) #print(self.feedback1) # self.feedback1[0][1] = self.feedback1[0][1] + append_choice.count(self.feedback1[0][0]) # self.feedback1[1][1] = self.feedback1[1][1] + append_choice.count(self.feedback1[1][0]) # self.feedback1[2][1] = self.feedback1[2][1] + append_choice.count(self.feedback1[2][0]) # self.feedback1[3][1] = self.feedback1[3][1] + append_choice.count(self.feedback1[3][0]) # self.feedback1[4][1] = self.feedback1[4][1] + append_choice.count(self.feedback1[4][0]) # self.feedback1[5][1] = self.feedback1[5][1] + append_choice.count(self.feedback1[5][0]) # self.feedback1[6][1] = self.feedback1[6][1] + append_choice.count(self.feedback1[6][0]) # self.feedback1[7][1] = self.feedback1[7][1] + append_choice.count(self.feedback1[7][0]) # self.feedback1[8][1] = self.feedback1[8][1] + append_choice.count(self.feedback1[8][0]) # self.feedback1[9][1] = self.feedback1[9][1] + append_choice.count(self.feedback1[9][0]) # self.feedback1[10][1] = self.feedback1[10][1] + append_choice.count(self.feedback1[10][0]) # print(self.feedback1) def feedbackgood(self): import random players = self.get_players() append_choice = [] append_good = [] for p in players: #print(p.choice1) append_choice.append(p.choice1) append_good.append(p.good) # print(append_choice) print(append_good) product= [] product = [x*y for x,y in zip(append_choice,append_good)] print(product) #print(self.feedback1) self.feedback2[0][1] = self.feedback2[0][1] + product.count(self.feedback2[0][0]) self.feedback2[1][1] = self.feedback2[1][1] + product.count(self.feedback2[1][0]) self.feedback2[2][1] = self.feedback2[2][1] + product.count(self.feedback2[2][0]) self.feedback2[3][1] = self.feedback2[3][1] + product.count(self.feedback2[3][0]) self.feedback2[4][1] = self.feedback2[4][1] + product.count(self.feedback2[4][0]) self.feedback2[5][1] = self.feedback2[5][1] + product.count(self.feedback2[5][0]) self.feedback2[6][1] = self.feedback2[6][1] + product.count(self.feedback2[6][0]) self.feedback2[7][1] = self.feedback2[7][1] + product.count(self.feedback2[7][0]) self.feedback2[8][1] = self.feedback2[8][1] + product.count(self.feedback2[8][0]) self.feedback2[9][1] = self.feedback2[9][1] + product.count(self.feedback2[9][0]) self.feedback2[10][1] = self.feedback2[10][1] + product.count(self.feedback2[10][0]) # print(self.feedback2) def countpref(self): self.choice_pref0 = self.in_round(self.round_number - 1).feedback1[0][1] self.choice_pref1 = self.in_round(self.round_number - 1).feedback1[1][1] self.choice_pref2 = self.in_round(self.round_number - 1).feedback1[2][1] self.choice_pref3 = self.in_round(self.round_number - 1).feedback1[3][1] self.choice_pref4 = self.in_round(self.round_number - 1).feedback1[4][1] self.choice_pref5 = self.in_round(self.round_number - 1).feedback1[5][1] self.choice_pref6 = self.in_round(self.round_number - 1).feedback1[6][1] self.choice_pref7 = self.in_round(self.round_number - 1).feedback1[7][1] self.choice_pref8 = self.in_round(self.round_number - 1).feedback1[8][1] self.choice_pref9 = self.in_round(self.round_number - 1).feedback1[9][1] self.choice_pref10 = self.in_round(self.round_number - 1).feedback1[10][1] self.good_pref0 = self.in_round(self.round_number - 1).feedback2[0][1] self.good_pref1 = self.in_round(self.round_number - 1).feedback2[1][1] self.good_pref2 = self.in_round(self.round_number - 1).feedback2[2][1] self.good_pref3 = self.in_round(self.round_number - 1).feedback2[3][1] self.good_pref4 = self.in_round(self.round_number - 1).feedback2[4][1] self.good_pref5 = self.in_round(self.round_number - 1).feedback2[5][1] self.good_pref6 = self.in_round(self.round_number - 1).feedback2[6][1] self.good_pref7 = self.in_round(self.round_number - 1).feedback2[7][1] self.good_pref8 = self.in_round(self.round_number - 1).feedback2[8][1] self.good_pref9 = self.in_round(self.round_number - 1).feedback2[9][1] self.good_pref10 = self.in_round(self.round_number - 1).feedback2[10][1] # print(self.choice_pref1) # print(self.choice_pref2) # print(self.choice_pref3) # print(self.choice_pref4) class Player(BasePlayer): choice1 = models.IntegerField( choices=C.NUM_CHOICES ) good = models.IntegerField( choices=[[0,"つけない"],[1,"いいね!"]] )