from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import random #doc = """FCの複数名義がどのように変化するのかを見る実験""" class Constants(BaseConstants): name_in_url = 'my_invest1' players_per_group = None num_rounds = 5 instructions_template = 'my_invest1/instructions.html' experiment_one_template = 'experiment_one.html' experiment_two_template = 'experiment_two.html' official_trade_description = 'official_trade_description.html' money_in_possession = 50000 one_annual_fee = 4500 one_ticket_fee = 8000 winning_probability = 0.6 one_value = 24000 two_value = 16000 three_value = 8000 four_value = 4000 probability_of_participation = 0.7 class Subsession(BaseSubsession): def creating_session(self): for p in self.get_players(): import random p.p1 = random.uniform(0,1) p.p2 = random.uniform(0,1) p.p3 = random.uniform(0,1) p.p4 = random.uniform(0,1) p.g1 = random.uniform(0,1) p.g2 = random.uniform(0,1) p.g3 = random.uniform(0,1) p.g4 = random.uniform(0,1) class Group(BaseGroup): pass class Player(BasePlayer): join_FC = models.IntegerField() annual_fee = models.FloatField() ticket_fee = models.FloatField() p1 = models.FloatField() p2 = models.FloatField() p3 = models.FloatField() p4 = models.FloatField() g1 = models.FloatField() g2 = models.FloatField() g3 = models.FloatField() g4 = models.FloatField() numticket = models.IntegerField() gain = models.IntegerField() total_payment = models.FloatField() togo = models.IntegerField() join_FC = models.IntegerField( label='' 'いくつ名義を購入しますか?' '', min=1,max=4) def winlose_return(self): self.numticket = 0 if self.p1 <= Constants.winning_probability and self.join_FC >= 1: self.numticket += 1 if self.p2 <= Constants.winning_probability and self.join_FC >= 2: self.numticket += 1 if self.p3 <= Constants.winning_probability and self.join_FC >= 3: self.numticket += 1 if self.p4 <= Constants.winning_probability and self.join_FC >= 4: self.numticket += 1 def participation_return(self): self.togo = self.numticket if self.g1 >= Constants.probability_of_participation and self.numticket >= 1: self.togo -= 1 if self.g2 >= Constants.probability_of_participation and self.numticket >= 2: self.togo -= 1 if self.g3 >= Constants.probability_of_participation and self.numticket >= 3: self.togo -= 1 if self.g4 >= Constants.probability_of_participation and self.numticket >= 4: self.togo -= 1 def set_payoffs(self): self.gain = sum([Constants.one_value,Constants.two_value,Constants.three_value,Constants.four_value][0:self.togo]) self.ticket_fee = Constants.one_ticket_fee * self.numticket self.annual_fee = Constants.one_annual_fee * self.join_FC self.total_payment = Constants.money_in_possession - self.annual_fee - self.ticket_fee + self.gain