from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import numpy as np author = 'Siva and Ashish' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'auction_nps' players_per_group = 2 num_rounds = 20 n_treats=4; rounds_per_treat=5; n_periods=3; # multipliers=np.array([1,1,1,1,1,1,2,2,2,2]) multipliers=np.array([1,1,1]) # l=10 #lConstants.n_periods: return bids=[getattr(player, 'bid'+str(i)) for player in p] winning_bid=min(bids) if bids[0]==bids[1]: temp = np.random.choice([True,False]) results = np.array([temp, not temp]) else: results=np.array(bids)==winning_bid opponent_bids=[bids[1], bids[0]] for idx, player in enumerate(p): exec("player.result"+str(i)+"= results[idx]") exec("player.opponent_bid"+str(i)+"= bids[(idx+1)%2]") if results[idx]: exec("player.profit"+str(i)+"= bids[idx]-player.cost") profit =bids[idx]-player.cost else: exec("player.profit"+str(i)+"= 0") profit = 0 dummy = ['Lost', 'Won'] profit=profit*Constants.multipliers[i-1] player.participant.vars['bids'].append(bids[idx]) player.participant.vars['profits'].append(round(profit, 2)) player.participant.vars['results'].append(dummy[results[idx]]) player.participant.vars['opponent_bids'].append(opponent_bids[idx]) player.participant.vars['winning_bids'].append(winning_bid) player.participant.vars['current_i']+=1 class Player(BasePlayer): def role(self): if self.id_in_group == 1: return 'low_cost' if self.id_in_group == 2: return 'high_cost' cost_role=models.TextField() scaling=models.FloatField() cost = models.FloatField() all_bids = models.TextField() all_profits = models.TextField() all_opponent_bids = models.TextField() all_results = models.TextField() bid1=models.FloatField(min=0.0) opponent_bid1=models.FloatField() result1=models.BooleanField() profit1=models.FloatField() bid2=models.FloatField() opponent_bid2=models.FloatField() result2=models.BooleanField() profit2=models.FloatField() bid3=models.FloatField() opponent_bid3=models.FloatField() result3=models.BooleanField() profit3=models.FloatField() bid4=models.FloatField() opponent_bid4=models.FloatField() result4=models.BooleanField() profit4=models.FloatField() bid5=models.FloatField() opponent_bid5=models.FloatField() result5=models.BooleanField() profit5=models.FloatField() bid6=models.FloatField() opponent_bid6=models.FloatField() result6=models.BooleanField() profit6=models.FloatField() bid7=models.FloatField() opponent_bid7=models.FloatField() result7=models.BooleanField() profit7=models.FloatField() bid8=models.FloatField() opponent_bid8=models.FloatField() result8=models.BooleanField() profit8=models.FloatField() bid9=models.FloatField() opponent_bid9=models.FloatField() result9=models.BooleanField() profit9=models.FloatField() bid10=models.FloatField() opponent_bid10=models.FloatField() result10=models.BooleanField() profit10=models.FloatField()