コード例 #1
0
class Group(BaseGroup):
    def get_payoff_p1(self):
        return self.set_payoff_p1(player.sent_amount, player.sent_back_amount)

    def get_payoff_p2(self):
        return self.set_payoff_p2(self.sent_amount, self.sent_back_amount)

    sent_amount = models.StringField(
        choices=['Exert restrain', 'Be assertive'],
        widget=widgets.RadioSelect
    )

    sent_belief = models.IntegerField(verbose_name='sent belief',
                                        min=0, max=100,
                                        initial=50,
                                        widget=widgets.SliderInput())

    sent_back_amount = models.StringField(
        choices=['Do not challenge', 'Challenge'],
        widget=widgets.RadioSelect
    )

    sent_back_belief = models.IntegerField(verbose_name='sent back belief',
                                        min=0, max=100,
                                        initial=50,
                                        widget=widgets.SliderInput())
コード例 #2
0
class Group(BaseGroup):

    # max wage is dynamically set in views
    wage = models.PositiveIntegerField(
        doc="The wage the firm wants to set for the worker",
        widget=widgets.SliderInput(attrs={'step': '1'}),
    )

    effort = models.FloatField(
        min=0.05,
        max=1.00,
        doc="The effort level that the worker chooses",
        widget=widgets.SliderInput(attrs={'step': '0.05'})
    )

    def set_payoffs(self):
        firm = self.get_player_by_role('firm')
        worker = self.get_player_by_role('worker')

        # the formula for calculating the respective payoffs are as follows:
        # payoff(firm) = (revenue - wage) * effort
        # payoff(worker = revenue - cost(effort)
        firm.payoff = (Constants.REVENUE[self.round_number] - self.wage) * self.effort
        worker.payoff = self.wage - cost_from_effort(self.effort)

    def get_payoff_by_role(self, role):
        if role == 'firm':
            payoff = self.get_player_by_role("firm").payoff
            return payoff
        elif role == "worker":
            payoff = self.get_player_by_role("worker").payoff
            return payoff
コード例 #3
0
class Player(BasePlayer):
    age = models.PositiveIntegerField(
        min = 16,
        max = 120,
        verbose_name = "How old are you?",
        doc = "collect age data between 16 and 120",
    )

    field_of_study = models.CharField(
        blank = True, # some subjects might not study
        verbose_name = "What do you study?",
        doc = "collect field of study data, open field",
    )

    likes_experiment = models.CharField(
        choices = ["Yes, of course!", "No, suck it!", "Maybe..."],
        widget = widgets.RadioSelect(),
        verbose_name = "Doy you like the survey?",
        doc = "likes experiment - yes, no, or maybe",
    )

    female = models.PositiveIntegerField(
        choices = [[0, "Male"], [1, "Female"], [2, "Other"]],
        widget = widgets.RadioSelect(),
        verbose_name = "What is your gender?",
        doc = "gender of participant",
    )

    height = models.FloatField(
        initial = 1.0,
        min = 1.0,
        max = 2.5,
        widget = widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name = "What is your height in meters?",#
        doc = "height of participant in meters",
    )

    weight = models.FloatField(
        initial = 30,
        min = 30,
        max = 300,
        widget = widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name = "How heavy are you in Kg?",
        doc = "weight of participant in kg",
    )

    bmi = models.FloatField()

    bmi_eval = models.CharField()

    def calculate_bmi(self):
        self.bmi = round(self.weight / self.height ** 2, 2)

    def bmi_evaluation(self):
        if self.bmi < 18.5:
            self.bmi_eval = "You are underweight. Get help!"
        elif self.bmi > 25:
            self.bmi_eval =  "You are overweight, you fat f**k!"
        else:
            self.bmi_eval = "Your weight is normal, good job!"
コード例 #4
0
ファイル: models.py プロジェクト: leexpucp/Prueba-GECE
class Player(BasePlayer):
    prob = models.IntegerField(min=0, max=100)
    endowment = models.CurrencyField(min=0, max=100, initial=0)
    contribution = models.CurrencyField(
        verbose_name='Deslice hasta seleccionar la cantidad a enviar deseada',
        min=0,
        max=100,
        initial=0,
        widget=widgets.SliderInput())
    roller = models.IntegerField(
        verbose_name='Deslice hasta seleccionar el número de la opción deseada',
        min=1,
        max=3,
        widget=widgets.SliderInput())

    # Se está usando un slider para esta opción pues permite evitar confusiones en caso se use un grupo de botones
    # los cuales se podrían clickear en cualquier momento sin que el jugador entienda si ya se registró o no su decisión

    def role(self):
        if self.roller == 1:
            return 'A'
        elif self.roller == 2:
            return 'B'
        else:
            return 'C'
コード例 #5
0
class Group(BaseGroup):

    ammount_given = models.CurrencyField(
        doc="""Amount the sender decided to give to the other player""",
        min=0,
        max=Constants.amount_allocated,
        widget=widgets.SliderInput(),
        verbose_name='I will give (from 0 to %i)' % Constants.amount_allocated)

    ammount_sent_back = models.CurrencyField(
        doc="""Amount the returner decided to sent_back to the other player""",
        min=0,
        widget=widgets.SliderInput())
コード例 #6
0
class Player(BasePlayer):

    contribution = models.CurrencyField(min=0, max=Constants.endowment)
    contribution1 = models.CurrencyField(min=0, max=Constants.endowment)

    contribution_bot1 = models.CurrencyField()
    contribution_bot2 = models.CurrencyField()
    contribution_bot3 = models.CurrencyField()

    contribution1_bot1 = models.CurrencyField()
    contribution1_bot2 = models.CurrencyField()
    contribution1_bot3 = models.CurrencyField()

    Retaliation_amount = models.IntegerField(blank=True,
                                             min=0,
                                             max=10,
                                             initial=0,
                                             widget=widgets.SliderInput(),
                                             label="처벌하는 데 포인트를 얼마나 사용하시겠습니까?")

    xyz = models.BooleanField()

    Retaliation_player = models.StringField(
        label="누구를 처벌하시겠습니까?",
        blank=True,
        choices=["Player 2", "Player 3", "Player 4"])

    participant_vars_dump = models.LongStringField()

    def truncate(self, decimals=-3):
        multiplier = 10**decimals
        return int(self.payoff * 10 * 2 * multiplier) / multiplier + 5000
コード例 #7
0
class Player(BasePlayer):
    treatment = models.CharField()
    endowment = models.CurrencyField()

    def endowment_assignment(self):
        self.endowment = Constants.endowment_high_stakes if self.treatment == 'high_stakes' else Constants.endowment_low_stakes

    investment_decision = models.CurrencyField(
        min=0,
        # max = 100 if endowment == Constants.endowment_low_stakes else 1000,
        initial=0,
        widget=widgets.SliderInput(),
        doc="players investment decision",
        verbose_name=
        "Choose how much of your endowment you want to invest (in Euro).")

    did_player_win = models.BooleanField()

    def calculate_payoff(self):
        if random.uniform(0, 1) > Constants.win_probability:
            self.did_player_win = True
            self.payoff = (
                self.endowment - self.investment_decision
            ) + self.investment_decision * Constants.win_multiplier
        else:
            self.did_player_win = False
            self.payoff = self.endowment - self.investment_decision
コード例 #8
0
class Player(BasePlayer):

    endowment = models.PositiveIntegerField()
    cond = models.PositiveIntegerField()

    #	treatment = models.CharField()

    def role(self):
        if self.id_in_group == 1:
            self.endowment = 20
            return "rich"
        else:
            self.endowment = 15
            return "poor"

    contri = models.PositiveIntegerField(
        min=0,
        widget=widgets.SliderInput(attrs={'step': '1'}),
        verbose_name=
        "Please decide how much you would like to invest in your common project"
    )

    twenty = models.PositiveIntegerField()
    nineteen = models.PositiveIntegerField()
    eighteen = models.PositiveIntegerField()
    seventeen = models.PositiveIntegerField()
    sixteen = models.PositiveIntegerField()
    fifteen = models.PositiveIntegerField()
    fourteen = models.PositiveIntegerField()
    thirteen = models.PositiveIntegerField()
    twelve = models.PositiveIntegerField()
    eleven = models.PositiveIntegerField()
    ten = models.PositiveIntegerField()
    nine = models.PositiveIntegerField()
    eight = models.PositiveIntegerField()
    seven = models.PositiveIntegerField()
    six = models.PositiveIntegerField()
    five = models.PositiveIntegerField()
    four = models.PositiveIntegerField()
    three = models.PositiveIntegerField()
    two = models.PositiveIntegerField()
    one = models.PositiveIntegerField()
    zero = models.PositiveIntegerField()

    cond = models.PositiveIntegerField(initial=0)
    others_contri = models.PositiveIntegerField()

    def calc_con(self):
        self.others_contri = self.get_others_in_group()[0].contri
        con_lists = [
            self.zero, self.one, self.two, self.three, self.four, self.five,
            self.six, self.seven, self.eight, self.nine, self.ten, self.eleven,
            self.twelve, self.thirteen, self.fourteen, self.fifteen,
            self.sixteen, self.seventeen, self.eighteen, self.nineteen,
            self.twenty
        ]
        for i in con_lists:
            if i == self.others_contri:
                self.cond = i
コード例 #9
0
ファイル: models.py プロジェクト: chkgk/otree_seminar_live
class Group(BaseGroup):
    p1_share = models.PositiveIntegerField(
        max=Constants.pie_size,
        widget=widgets.SliderInput(attrs={'step': '1'}))
    p2_share = models.PositiveIntegerField(max=Constants.pie_size)

    def set_p2_share(self):
        self.p2_share = Constants.pie_size - self.p1_share
コード例 #10
0
ファイル: models.py プロジェクト: abes88/otree_aisling
class Player(BasePlayer):

    ammount_given = models.CurrencyField(
        doc="""Amount dictator decided to give to the other player""",
        min=0,
        max=Constants.allocated_amount,
        widget=widgets.SliderInput(),
        verbose_name='I will give (from 0 to %i)' % Constants.allocated_amount)
    trust_type = models.CharField(max_length=20, choices=Constants.ttypes)
コード例 #11
0
class Player(BasePlayer):
    def set_payoff(self):
        self.payoff = 0

    q_country = CountryField(
        verbose_name='What is your country of citizenship?')
    q_age = models.PositiveIntegerField(verbose_name='What is your age?',
                                        choices=range(13, 125),
                                        initial=None)
    q_gender = models.CharField(initial=None,
                                choices=['Male', 'Female'],
                                verbose_name='What is your gender?',
                                widget=widgets.RadioSelect())

    sw_bat = models.PositiveIntegerField(verbose_name='''
        A bat and a ball cost 22 dollars in total.
        The bat costs 20 dollars more than the ball.
        How many dollars does the ball cost?''',
                                         min=0,
                                         max=20)

    sw_widget = models.PositiveIntegerField(verbose_name='''
        "If it takes 5 machines 5 minutes to make 5 widgets,
        how many minutes would it take 100 machines to make 100 widgets?"
        ''')

    sw_choices = models.CharField(initial=None,
                                  choices=[
                                      '0 Worst', '1', '2', '3', '4', '5', '6',
                                      '7', '8', '9', '10 Best'
                                  ],
                                  verbose_name='How good was it?',
                                  widget=widgets.RadioSelectHorizontal())
    sw_lake = models.PositiveIntegerField(verbose_name='''
        In a lake, there is a patch of lily pads.
        Every day, the patch doubles in size.
        If it takes 48 days for the patch to cover the entire lake,
        how many days would it take for the patch to cover half of the lake?
        ''')
    sw_level = models.PositiveIntegerField(verbose_name='set the level',
                                           choices=[
                                               [1, 'Low'],
                                               [2, 'Medium'],
                                               [3, 'High'],
                                           ])
    sw_slider = models.PositiveIntegerField(
        verbose_name='set the slider',
        widget=widgets.SliderInput(attrs={'step': '0.01'}))

    offer_1 = models.BooleanField()
    offer_2 = models.BooleanField()
    offer_3 = models.BooleanField()
    offer_4 = models.BooleanField()
    offer_5 = models.BooleanField()
コード例 #12
0
class Player(BasePlayer):

    ammount_given = models.CurrencyField(
        doc="""Amount dictator decided to give to the other player""",
        min=0,
        max=Constants.allocated_amount,
        widget=widgets.SliderInput(),
        verbose_name='I will give (from 0 to %i)' % Constants.allocated_amount)

    trust_scenario_you_are_A = models.CurrencyField(
        min=0,
        max=10,
        widget=widgets.SliderInput(attrs={'step': '1'}),
        verbose_name='I will give (from 0 to 10)')
    trust_scenario_you_are_B = models.CurrencyField(
        min=0,
        max=30,
        widget=widgets.SliderInput(attrs={'step': '1'}),
        verbose_name='I will give (from 0 to 30)')

    trust_type = models.CharField(max_length=20, choices=Constants.ttypes)
コード例 #13
0
class Player(BasePlayer):


    sent_amount = models.StringField(
        choices=['Exert restrain', 'Be assertive'],
        widget=widgets.RadioSelect
    )

    sent_belief = models.IntegerField(verbose_name='sent belief',
                                        min=0, max=100,
                                        initial=50,
                                        widget=widgets.SliderInput())


    sent_back_amount = models.StringField(
        choices=['Do not challenge', 'Challenge'],
        widget=widgets.RadioSelect
    )

    sent_back_belief = models.IntegerField(verbose_name='sent back belief',
                                        min=0, max=100,
                                        initial=50,
                                        widget=widgets.SliderInput())
コード例 #14
0
class Player(BasePlayer):
    endowment = models.FloatField(
        min=0,
        max=Constants.endowment,
        doc="""Number of tokens this player receives""")
    contribution = models.FloatField(
        min=0,
        max=Constants.endowment,
        doc="""Number of tokens this player contributes""",
        widget=widgets.SliderInput(attrs={'step': '0.1'}))
    eval_p1 = models.FloatField(
        min=0,
        max=Constants.endowment,
        doc="""This player's evaluation of player 1""",
        widget=widgets.SliderInput(attrs={'step': '0.1'}))
    eval_p2 = models.FloatField(
        min=0,
        max=Constants.endowment,
        doc="""This player's evaluation of player 2""",
        widget=widgets.SliderInput(attrs={'step': '0.1'}))
    eval_p3 = models.FloatField(
        min=0,
        max=Constants.endowment,
        doc="""This player's evaluation of player 3""",
        widget=widgets.SliderInput(attrs={'step': '0.1'}))
    score_median = models.FloatField(
        doc="""The median of score_p1, score_p2, and score_p3""",
        min=0,
        max=Constants.endowment,
    )
    group_grade = models.FloatField(
        doc=
        """This is the group grade that contributes to all player's final grade.""",
    )
    p1_individual_grade = models.FloatField(
        doc="""This player's individual grade.""", )
    p1_final_grade = models.FloatField(doc="""This player's final grade.""", )
コード例 #15
0
class Player(BasePlayer):

    expect_other_player_to_return = models.IntegerField(
        doc="""What do you expect that the other player will return?""",
        min=0,
        max=300,
        widget=widgets.SliderInput(),
        verbose_name=
        'What percentage do you think the other will return? (from 0 to 300%)')

    expect_other_player_to_return_revealed = models.IntegerField(
        doc="""What do you expect that the other player will return?""",
        min=0,
        max=300,
        widget=widgets.SliderInput(),
        verbose_name=
        'What percentage do you think the other will return? (from 0 to 300%)')

    def role(self):
        return {1: Constants.sender, 2: Constants.returner}[self.id_in_group]

    @property
    def trust_type(self):
        return self.participant.vars["trust_type"]
コード例 #16
0
ファイル: models.py プロジェクト: zcullen/otree-bdm
class Player(BasePlayer):
    howLong = models.PositiveIntegerField(
        validators=[validate_nonzero],
        default=0,
        min=0,
        max=180,
        widget=widgets.SliderInput(attrs={'step': '5'}))
    bid = models.CurrencyField()
    pref1 = models.PositiveIntegerField(widget=widgets.RadioSelectHorizontal(
        choices=P1_CHOICES))
    pref2 = models.PositiveIntegerField(widget=widgets.RadioSelectHorizontal(
        choices=P2_CHOICES))
    pref3 = models.PositiveIntegerField(widget=widgets.RadioSelectHorizontal(
        choices=P3_CHOICES))
    pref4 = models.PositiveIntegerField(widget=widgets.RadioSelectHorizontal(
        choices=P4_CHOICES))
    pref5 = models.PositiveIntegerField(widget=widgets.RadioSelectHorizontal(
        choices=P5_CHOICES))
コード例 #17
0
class Player(BasePlayer):

    endowment = models.CurrencyField()
    sent_amount = models.IntegerField(
        verbose_name='Deslice hasta escoger la cantidad a enviar deseada',
        min=0,
        max=100,
        initial=0,
        widget=widgets.SliderInput())
    afterloss = models.CurrencyField()
    afterearn = models.CurrencyField()

    checkslider = models.IntegerField(blank=True)

    def role(self):
        if self.id_in_group == 1:
            return 'A'
        else:
            return 'B'
コード例 #18
0
ファイル: models.py プロジェクト: chkgk/Seminar
class Player(BasePlayer):
	# endow=Subsession.endowment
    endowment=models.IntegerField()

    invest = models.IntegerField(
    	min=0,
    	widget=widgets.SliderInput(attrs={'step':'1'}),
    	verbose_name="Choose how much you would like to invest",
    	doc="Investment choice"
    	)

    decision = models.CharField()

    def calc_payoff(self):
    	outcome=random.choice(["win","lose"])
    	if outcome=="win":
    		self.payoff=self.invest+self.endowment
    	if self.decision=="lose":
    		self.payoff=self.endowment-self.invest
    	self.decision=outcome
コード例 #19
0
class Player(BasePlayer):
    def set_payoff(self):
        """Calculate payoff, which is zero for the survey"""
        self.payoff = 0

    q_country = CountryField(
        verbose_name='What is your country of citizenship?')
    q_age = models.PositiveIntegerField(verbose_name='What is your age?',
                                        choices=range(13, 125),
                                        initial=None,
                                        widget=widgets.SliderInput())
    q_gender = models.CharField(initial=None,
                                choices=['Male', 'Female'],
                                verbose_name='What is your gender?',
                                widget=widgets.RadioSelect())

    crt_bat = models.PositiveIntegerField()
    crt_widget = models.PositiveIntegerField()
    crt_lake = models.PositiveIntegerField()

    title_tracker = FieldTracker(fields=['q_age'])
コード例 #20
0
ファイル: models.py プロジェクト: psyclawpse/experimentwotree
class Player(BasePlayer):

    contribution = models.CurrencyField(min=0, max=Constants.endowment)

    contribution_bot1 = models.CurrencyField()
    contribution_bot2 = models.CurrencyField()
    contribution_bot3 = models.CurrencyField()

    Retaliation_player = models.StringField(
        label="누구를 처벌하시겠습니까?",
        choices=["Player 2", "Player 3", "Player 4"],
        blank=True)

    Retaliation_amount = models.IntegerField(blank=True,
                                             min=0,
                                             max=10,
                                             initial=0,
                                             widget=widgets.SliderInput(),
                                             label="처벌하는 데 포인트를 얼마나 사용하시겠습니까?")

    xyz = models.BooleanField()
コード例 #21
0
ファイル: models.py プロジェクト: chkgk/Seminar
class Group(BaseGroup):
    offer = models.PositiveIntegerField(
        max=Constants.pot_size,
        min=0,
        widget=widgets.SliderInput(attrs={'step': '1'}),
        verbose_name=
        "Please decide about the quantity to share with the other player")
    accepted = models.BooleanField(
        choices=[(True, 'Yes'), (False, 'No')],
        verbose_name="Please decide about the other player's offer",
        doc="response choice")

    def calc_payoff(self):
        proposer = self.get_player_by_role('proposer')
        responder = self.get_player_by_role('responder')
        if self.accepted:
            proposer.payoff = Constants.pot_size - self.offer
            responder.payoff = self.offer
        else:
            proposer.payoff = c(0)
            responder.payoff = c(0)
コード例 #22
0
ファイル: models.py プロジェクト: crebeck/seminar
class Player(BasePlayer):
    wager = models.PositiveIntegerField(
        default=0,
        max=Constants.endowment,
        widget=widgets.SliderInput(attrs={'step': '1'}),
        doc="money bet by the participant",
        verbose_name="How much of your endowment do you want to bet?")

    coin_toss = models.FloatField(default=round(random.uniform(0, 1), 2))

    win_message = models.CharField()

    payoff = models.PositiveIntegerField()

    final_payoff = models.CurrencyField()

    coin_result = models.PositiveIntegerField()

    choice = models.PositiveIntegerField(choices=[[0, "heads"], [1, "tails"]],
                                         widget=widgets.RadioSelect,
                                         doc="choice heads or tails")

    def coin_side(self):
        if self.coin_toss > 0.5:
            self.coin_result = 0  # heads
        else:
            self.coin_result = 1  # tails

    def win_against_coin(self):
        if self.choice == self.coin_result:
            self.win_message = "Congratulations, you won!"
            self.payoff = self.wager * 2
        else:
            self.win_message = "Unfortunately, you lost. Your money now belongs to the mighty oTree-Overlord!"
            self.payoff = 0

    def calculate_payoff(self):
        self.final_payoff = Constants.endowment - self.wager + self.payoff
コード例 #23
0
class Group(BaseGroup):
    actuale = models.IntegerField(initial=Constants.Endowment, min=1, max=100)                                          #endowment
    wage = models.IntegerField(min=0)                                                                                   #the wage snet by the firm
    effort = models.FloatField(min=0, max=6, widget= widgets.SliderInput(attrs={'step': '0.25'}))                        #the effort of worker in normal rounds
    steffort= models.FloatField(min=0, max=6)                                                                           #effort from strategy method

    random_round_payoff_1 = models.IntegerField()                                                                       #rnd draw to choose decisional period to be paid
    random_round_payoff_2 = models.IntegerField()                                                                       # " " questionnaire period to be paid
    random_task = models.IntegerField()                                                                      # task paid
    random_line_belief = models.IntegerField()                                                                 #line of belief table chosen to payment if accurate

    def get_variables(self): #function to get effort stated in the strategy method
        players = self.get_players()
        for p in players:
            if p.type == 'agent':
                if self.round_number==8 or self.round_number==13 or self.round_number==14 or self.round_number==18:
                    if self.wage == 10:
                        self.steffort = p.steffort10
                    elif self.wage == 2:
                        self.steffort= p.steffort2
                    elif self.wage == 3:
                        self.steffort= p.steffort3
                    elif self.wage == 4:
                        self.steffort= p.steffort4
                    elif self.wage == 5:
                        self.steffort= p.steffort5
                    elif self.wage == 6:
                        self.steffort= p.steffort6
                    elif self.wage == 7:
                        self.steffort= p.steffort7
                    elif self.wage == 8:
                        self.steffort= p.steffort8
                    elif self.wage == 9:
                        self.steffort= p.steffort9
                    elif self.wage == 11:
                        self.steffort= p.steffort11
                    elif self.wage == 12:
                        self.steffort= p.steffort12
                    elif self.wage == 13:
                        self.steffort= p.steffort13
                    elif self.wage == 14:
                        self.steffort= p.steffort14
                    elif self.wage == 15:
                        self.steffort= p.steffort15
                    elif self.wage == 16:
                        self.steffort= p.steffort16
                    else:
                        self.steffort= p.steffort1



    def calculate_payoff_final_1(self): #compute payoffs in decisional round
        print("***************COMPUTING PAYOFF 1*************")
        # choose randomly a round
        Liste_round_decisional = random.sample([x for x in list(range(4,Constants.num_rounds+1)) if x not in Constants.round_specials],1)
        self.random_round_payoff_1 = Liste_round_decisional[0]                     #decisional paid round
        self.random_round_payoff_2 = random.sample(Constants.round_specials,1)[0]  #questionnaire paid round
        print("so round Decisional is ", self.random_round_payoff_1)
        print("so round Questionnaire is ", self.random_round_payoff_2)

        print("Direct response method is going on")
        # direct-repsponse method
        for p in self.get_players():
            print("the type of the player", p.type)

            if p.type == "agent":
                p.final_payoff = float(p.in_round(self.random_round_payoff_1).payoff)
                p.payoff_decisional = p.final_payoff
                print("This is the payoff of decisional ", p.payoff_decisional)
            else:
                p.final_payoff = float(p.in_round(self.random_round_payoff_1).payoff)
                p.payoff_decisional = p.final_payoff
                print("This is the payoff of decisional ", p.payoff_decisional)

    def calculate_payoff_final_2(self):  # compute payoffs for questionnaire rounds
            print("***************** I'm in the method calculate payoff final 2 *****************")
            self.random_task = np.random.choice(
                [0, 1], 1,
                p=[0.5, 0.5])[0]
            print("This is the method chosen (BELIEF (1) vs STRATEGY (0) ):", self.random_task)

            if self.random_task == 1:
                # Belief elicitation method
                for p in self.get_players():

                    if p.type == "agent":

                        print("the type is the agent", p.type)
                        print("this is the wage chosen for the strategy method",
                              self.in_round(self.random_round_payoff_2).wage)
                        print("this is the wagebelief " ,
                              p.in_round(self.random_round_payoff_2).wagebelief)

                        # belief accuracy
                        if p.in_round(self.random_round_payoff_2).wagebelief == self.in_round(
                                self.random_round_payoff_2).wage:
                            print("WORKER's beliefs is In the interval")
                            p.belief_in_interval = 1
                            # PAYOFF ASSIGNINIG
                            p.payoff_questionnaire = Constants.bonus_if_in_internal
                            p.final_payoff += Constants.bonus_if_in_internal
                            print("This is the payoff of questionnaire ", p.payoff_questionnaire)
                        else:
                            print("WORKER' belief is Out of interval")
                            p.payoff_questionnaire = 0
                            p.belief_in_interval = 0
                            print("This is the payoff of questionnaire ", p.payoff_questionnaire)

                    else:

                        print("the type is principal", p.type)

                        # draw a random line of the table
                        self.random_line_belief = random.randint(1,
                                                                          self.in_round(
                                                                              self.random_round_payoff_2).actuale)
                        agent = p.get_others_in_group()[0]

                        print("this is the random line chosen from the table in round 2 ",
                              self.random_line_belief)

                        # extract beliefs from the table
                        belief_effort = getattr(p.in_round(self.random_round_payoff_2),
                                                'eleffort{}'.format(self.random_line_belief))
                        print("this is belief effort", belief_effort)
                        #extract strategy effort
                        strategy_effort = getattr(agent.in_round(self.random_round_payoff_2),
                                                  'steffort{}'.format(self.random_line_belief))
                        print("this is strategy effort", strategy_effort)

                        # make the interval
                        upper_bound_belief_effort = strategy_effort + 0.25
                        lower_bound_belief_effort = strategy_effort - 0.25

                        # check if in interval
                        if lower_bound_belief_effort <= belief_effort <= upper_bound_belief_effort:
                            p.belief_in_interval = 1
                            p.payoff_questionnaire = Constants.bonus_if_in_internal
                            print("This is the payoff of questionnaire ", p.payoff_questionnaire)
                            p.final_payoff += Constants.bonus_if_in_internal
                            print("Employer's beliefs are in the interval")
                        else:
                            p.belief_in_interval = 0
                            p.payoff_questionnaire = 0
                            print("This is the payoff of questionnaire ", p.payoff_questionnaire)
                            p.final_payoff += 0
                            print("Employer's beliefs are NOT in the interval")
            else:
                # strategy effort
                print("This is the strategy method")

                # compute payoffs
                for p in self.get_players():
                    if p.type == "agent":
                        p.payoff_questionnaire = float(p.in_round(self.random_round_payoff_2).payoff)
                        print("This is the payoff of questionnaire ", p.payoff_questionnaire)
                        print("I'm here calculating WORKER PAYOFF")
                        p.final_payoff += float(p.in_round(self.random_round_payoff_2).payoff)
                        print("OKAY COMPUTED", p.final_payoff)

                    else:
                        print("I M here computing EMPLOYER's PAYOFF")
                        p.payoff_questionnaire = float(p.in_round(self.random_round_payoff_2).payoff)
                        print("This is the payoff of questionnaire ", p.payoff_questionnaire)
                        p.final_payoff += float(p.in_round(self.random_round_payoff_2).payoff)
                        print("OKAY COMPUTED", p.final_payoff)


    def calculate_payoff(self): #payoffs as the game unravels - not paid
        players= self.get_players()

        # this is to define the post shock endowment
        if self.round_number >= 13 and self.subsession.draw == 1:
            high=1
        else:
            high=0

        # this is to define thz agent's payoff both in normal and elicitation rounds
        for p in players:
            if p.type== 'agent':
                if self.round_number==8 or self.round_number==13 or self.round_number == 14 or self.round_number==18:
                    if self.wage > 0:
                        p.payoff = self.wage - ((self.steffort) ** 2) / 2
                    else:
                        p.payoff = 0
                else:
                    if self.wage > 0:
                        p.payoff = self.wage - ((self.effort) ** 2) / 2
                    else:
                        p.payoff = 0
            else:

                # this is to define the principal's payoff

                if self.round_number <= 13:
                    #if self.round_number != 1 and self.round_number !=5 and self.round_number != 10 and self.round_number != 11 and self.round_number != 15:
                    #    p.payoff = (Constants.Endowment - self.wage)*self.effort
                    if self.round_number == 8 :
                        if self.wage >0:
                            p.payoff = (Constants.Endowment - self.wage) * self.steffort
                            print("This is ACTUALE and the round is 1 or 5", self.actuale)
                        else:
                            p.payoff = Constants.Endowment/2
                    elif self.round_number == 13:
                        if self.wage >0:
                            p.payoff = (Constants.Endowment - self.wage) * self.steffort
                            print("This is ACTUALE and the round is 10", self.actuale)
                        else:
                            p.payoff = Constants.Endowment/2

                        # propagate the shock
                        if high==1:
                            for g in self.in_rounds(self.round_number+1, Constants.num_rounds):
                                g.actuale = Constants.Endowmenthigh
                        else:
                            for g in self.in_rounds(self.round_number+1, Constants.num_rounds):
                                g.actuale = Constants.Endowmentlow
                    else:
                        if self.wage >0:
                            p.payoff = (Constants.Endowment - self.wage) * self.effort
                        else:
                            p.payoff = Constants.Endowment/2
                else:

                    if (self.round_number == 14 or self.round_number == 18) and self.wage >0 :
                        p.payoff = (self.actuale - self.wage) * self.steffort
                    elif (self.round_number == 14 or self.round_number == 18) and self.wage ==0:
                        p.payoff = self.actuale/2
                    else :
                        if self.wage >0:
                            p.payoff = (self.actuale - self.wage) * self.effort
                        else:
                            p.payoff = self.actuale/2

    def rounding(self):
        players= self.get_players()
        for p in players:
            p.final_payoff=round(p.final_payoff,1)

    def check_payoff(self):
        players= self.get_players()
        for p in players:
            if p.payoff < 0:
                p.payoff=0
コード例 #24
0
class Group(BaseGroup):

    e_g = models.CurrencyField()

    shockround = models.IntegerField(min=0, max=Constants.num_rounds, initial=None)

    r = models.FloatField(
        widget=widgets.SliderInput(attrs={'step': '0.01', 'style': 'width:500px'}, show_value=False),
        min=0,
        initial=None,
        max=1,
    )

    #For Slider check in Stage 1
    checkr = models.FloatField(blank=True, initial=None)

    #History counter for Stage 1
    historyc1 = models.IntegerField(blank=True, initial=0)

    #History counter for Stage 2
    historyc2 = models.IntegerField(blank=True, initial=0)

    #History counter for results P1
    historyr1 = models.IntegerField(blank=True, initial=0)

    #History counter for results P1
    historyr2 = models.IntegerField(blank=True, initial=0)

    payoff1 = models.CurrencyField()

    payoff1f = models.FloatField(
        widget=widgets.SliderInput(attrs={'step': '0.01', 'style': 'width:500px'}, show_value=False),
        min=5,
        initial=None,
        max=15,
        blank=True
    )

    #For Slider check in Stage 2
    checkpayoff1f = models.FloatField(blank=True, initial=None)

    payoff2 = models.CurrencyField()

    rpayoff1 = models.CurrencyField()

    payoff_p1 = models.CurrencyField()
    payoff_p2 = models.CurrencyField()

    def define_e_group(self):
        p1 = self.get_player_by_id(1)
        self.e_g = p1.participant.vars.get('e')

    def define_shockround(self):
        p1 = self.get_player_by_id(1)
        self.shockround = p1.participant.vars.get('shockround')

    def calculate_rpayoff1(self):
        p1 = self.get_player_by_id(1)
        self.rpayoff1 = c(15) - self.e_g
        #p1.participant.vars.get('e')

    def calculate_payoff1(self):
        if self.r == 1:
            self.payoff1 = None
        else :
            self.payoff1 = c(self.payoff1f)

    def calculate_payoff2(self):
        if self.r == 1:
            self.payoff2 = None
        else :
            self.payoff2 = -1 * (self.payoff1 - c(20))

    #For history table
    def calculate_payoff_p1_p2(self):
        if self.r == 1:
            self.payoff_p1 = self.r * (c(15) - self.e_g)
            self.payoff_p2 = self.r * c(5)
        else:
            self.payoff_p1 = self.r * (c(15) - self.e_g) + (1-self.r) * self.payoff1
            self.payoff_p2 = self.r * c(5) + (1-self.r) * self.payoff2

    def set_payoffs(self):
        p1 = self.get_player_by_id(1)
        p2 = self.get_player_by_id(2)
        if self.r == 1 :
            p1.payoff = self.r * (c(15) - self.e_g)
            p2.payoff = self.r * c(5)
        else :
            p1.payoff = self.r * (c(15) - self.e_g) + (1 - self.r) * self.payoff1
            p2.payoff = self.r * c(5) + (1 - self.r) * self.payoff2
コード例 #25
0
class Player(BasePlayer):

    #Personal code
    tn = models.StringField(blank=False)
    # tn = models.CharField(
    #     blank=False,
    #     max_length=5,
    #     validators=
    #         [RegexValidator(
    #             r'^\d{5}$',
    #             message='Your personal code should have 5 digits',
    #             code='nomatch'
    #             )
    #         ]
    # )

    #Accept the conditions to participate
    accept_conditions = models.BooleanField(blank=False, widget=widgets.CheckboxInput)

    #Instruction1 checks
    Instr1a = models.IntegerField(blank=False, choices=[[1, 'True'],[2, 'False']], widget=widgets.RadioSelect)
    Instr1b = models.IntegerField(blank=False, choices=[[1, 'True'],[2, 'False']], widget=widgets.RadioSelect)
    Instr1c = models.IntegerField(blank=False, choices=[[1, 'True'],[2, 'False']], widget=widgets.RadioSelect)

    #Instructions 2 check
    accept_payoffs = models.BooleanField(blank=False, widget=widgets.CheckboxInput)

    #Instruction2a checks
    Instr2aa = models.IntegerField(blank=False, choices=[[1, 'True'],[2, 'False']], widget=widgets.RadioSelect)
    Instr2ab = models.IntegerField(blank=False, choices=[[1, 'True'],[2, 'False']], widget=widgets.RadioSelect)

    #Instruction2b checks
    Instr2ba = models.IntegerField(blank=False, choices=[[1, 'True'],[2, 'False']], widget=widgets.RadioSelect)
    Instr2bb = models.IntegerField(blank=False, choices=[[1, 'True'],[2, 'False']], widget=widgets.RadioSelect)
    Instr2bc = models.IntegerField(blank=False, choices=[[1, 'True'],[2, 'False']], widget=widgets.RadioSelect)

    Fakeslider2 = models.FloatField(
        widget=widgets.SliderInput(attrs={'step': '0.01', 'style': 'width:450px'}, show_value=False),
        min=0,
        initial=0.5,
        blank=True,
        max=1
    )

    #Instruction3 checks
    Instr3a = models.IntegerField(blank=False, choices=[[1, 'True'],[2, 'False']], widget=widgets.RadioSelect)
    Instr3b = models.IntegerField(blank=False, choices=[[1, 'True'],[2, 'False']], widget=widgets.RadioSelect)
    Instr3c = models.IntegerField(blank=False, choices=[[1, 'True'],[2, 'False']], widget=widgets.RadioSelect)
    Instr3d = models.IntegerField(blank=False, choices=[[1, 'True'],[2, 'False']], widget=widgets.RadioSelect)

    Fakeslider = models.FloatField(
        widget=widgets.SliderInput(attrs={'step': '0.01', 'style': 'width:450px'}, show_value=False),
        min=5,
        blank=True,
        initial=10,
        max=15
    )

    #History counter for Choice
    historyc = models.IntegerField(blank=True, initial=0)

    #History counter for Choice
    historyr = models.IntegerField(blank=True, initial=0)

    def get_partner(self):
        return self.get_others_in_group()[0]
コード例 #26
0
ファイル: models.py プロジェクト: LuK412/AEE
class Player(BasePlayer):

    payment = models.FloatField(
    	doc="Participant's payment"
    	)

    chocolate = models.CharField(
    	doc="which chocolate will participant get"
    	)

    prob = models.FloatField(
		doc="if larger .7 eco is conv."
		)

    Role = models.CharField(
    	doc="role of participant, treatment or control"
    	)
    
    chocolate_choice = models.CharField(
    	choices=["Bio" , "Konventionell"],
    	widget=widgets.RadioSelect(),
    	verbose_name="Welche Schokolade möchten Sie kaufen?",
    	doc="participant's chocolate choice"
    	)

    BDM_eco_WTP = models.FloatField(
    	min=0,
    	max=2,
    	widget=widgets.SliderInput(attrs={'step': '0.01'}),
    	verbose_name="Höchster Preis, den ich für Bio-Schokolade zahlen würde",
    	doc="Participant's WTP for eco chocolate"
    	)

    BDM_eco_price = models.FloatField(
    	doc="Randomly chosen price for eco"
    	)

    BDM_conventional_WTP = models.FloatField(
    	min=0,
    	max=2,
    	widget=widgets.SliderInput(attrs={'step': '0.01'}),
    	verbose_name="Höchster Preis, den ich für konventionelle Schokolade zahlen würde",
    	doc="Participant's WTP for conventional chocolate"
    	)

    BDM_conventional_price = models.FloatField(
    	doc="Randomly chosen price for conv"
    	)

    
    BDM_eco_buy = models.CharField(
    	doc="indicates whether participant will or will not buy at BDM price eco"
    	)

    BDM_conventional_buy = models.CharField(
    	doc="indicates whether participant will or will not buy at BDM price conv"
    	)

    relevant_decision = models.CharField(
    	doc="which decision determines payment"
    	)

    eco_buy = models.IntegerField(
    	min=1,
    	max=7,
    	verbose_name="Auf einer Skala von 1 bis 7, wie wichtig finden Sie es, Bio Produkte zu kaufen? (1 bedeutet 'gar nicht wichtig', 7 bedeutet 'sehr wichtig')",
    	doc="Participant's perceived importance of buying eco"
    	)

    eco_belief = models.IntegerField(
    	min=0,
    	max=100,
    	verbose_name="Schätzen Sie: Wie viel Prozent der Produkte im Handel mit Bio-Zertifikat erfüllen auch die Bio-Standards?",
    	doc="Participant's belief about how many eco are eco"
    	)

    eco_belief_experiment = models.IntegerField(
        min=0,
        max=100,
        verbose_name="Schätzen Sie: Wie hoch (in Prozent) war in diesem Experiment die Wahrscheinlichkeit, dass Sie bei der ersten Entscheidung konventionelle Schokolade bekommen, obwohl Sie Bio-Schokolade gekauft haben?",
        blank=True,
        doc="Participant's belief about how many eco are eco in experiment"
        )

##### Any other demographics? Other experiments also include that?#######
##### Riskaversion??####

    
    def BDM_eco_choice(self):
    	#self.BDM_eco_price = random.uniform(0, 4)
    	if self.BDM_eco_price <= self.BDM_eco_WTP:
    		self.BDM_eco_buy = "kaufen"
    	else:
    		self.BDM_eco_buy = "nicht kaufen"

    def BDM_conventional_choice(self):
    	#self.BDM_conventional_price = random.uniform(0, 4)
    	if self.BDM_conventional_price <= self.BDM_conventional_WTP:
    		self.BDM_conventional_buy = "kaufen"
    	else:
    		self.BDM_conventional_buy = "nicht kaufen"

    #def BDM_maybe_eco_choice(self):
    #	#self.BDM_maybe_eco_price = random.uniform(0, 4)
    #	if self.BDM_maybe_eco_price <= self.BDM_maybe_eco_WTP:
    #		BDM_maybe_eco_buy = "kaufen"
    #	else:
    #		BDM_maybe_eco_buy = "nicht kaufen"

    #def calculate_payment(self):
    #	self.relevant_decision = random.choice("choice", "BDM_eco", "BDM_conv")
    #	if self.relevant_decision == "choice" and self.chocolate_choice == "Bio":
    #		self.payment = Constants.endowment - Constants.eco_price
    #	elif self.relevant_decision == "choice" and self.chocolate_choice == "Konventionell":
    #		self.payment = Constants.endowment - Constants.conv_price
    #	elif self.relevant_decision == "BDM_eco" and self.BDM_eco_buy == "kaufen":
    #		self.payment = Constants.endowment - self.BDM_eco_price
    #	elif self.relevant_decision == "BDM_eco" and self.BDM_eco_buy == "nicht kaufen":
    #		self.payment = Constants.endowment
    #	elif self.relevant_decision == "BDM_conv" and self.BDM_conventional_buy == "kaufen":
    #		self.payment = Constants.endowment - self.BDM_conventional_price
    #	else:
    #		self.payment = Constants.endowment


   



    #BDM_maybe_eco_WTP = models.CurrencyField(
    #	min=0,
    #	max=Constants.endowment,
    #	widget=widgets.SliderInput(attrs={'step': '0.01'}),
    #	verbose_name="Hoechster Preis, den ich für Schokolade zahlen wuerde, bei der ich nicht genau weiss, ob sie wirklich bio ist",
    #	doc="Participant's WTP for eco chocolate with maybe conventional"
    #	)

    #BDM_maybe_eco_price = models.CurrencyField(
    #	doc="Randomly chosen price for maybe eco"
    #	)

    #BDM_maybe_eco_buy = models.CharField(
    #	doc="indicates whether participant will or will not buy at BDM price maybe eco"
    #	)
コード例 #27
0
class Group(BaseGroup):
    actuale = models.IntegerField(initial=Constants.Endowment, min=1,
                                  max=100)  #endowment
    wage = models.IntegerField(min=1)  #the wage snet by the firm
    effort = models.FloatField(
        min=0, max=4, widget=widgets.SliderInput(
            attrs={'step': '0.1'}))  #the effort of worker in normal rounds
    steffort = models.FloatField(min=0, max=4)  #effort from strategy method
    draw = models.IntegerField(initial=np.random.random_integers(
        low=0, high=1))  #random draw to decide whether + or - shock
    random_round_payoff_1 = models.IntegerField(
    )  #rnd draw to choose rounds to pay
    random_round_payoff_2 = models.IntegerField()
    random_line_belief_payoff_1 = models.IntegerField()
    random_line_belief_payoff_2 = models.IntegerField()
    paidinspecialround_draw1 = models.IntegerField(initial=0)
    paidinspecialround_draw2 = models.IntegerField(initial=0)

    def get_variables(
            self):  #function to get effort stated in the strategy method
        players = self.get_players()
        for p in players:
            if p.type == 'agent':
                if self.round_number == 8 or self.round_number == 13 or self.round_number == 14 or self.round_number == 18:
                    if self.wage == 10:
                        self.steffort = p.steffort10
                    elif self.wage == 2:
                        self.steffort = p.steffort2
                    elif self.wage == 3:
                        self.steffort = p.steffort3
                    elif self.wage == 4:
                        self.steffort = p.steffort4
                    elif self.wage == 5:
                        self.steffort = p.steffort5
                    elif self.wage == 6:
                        self.steffort = p.steffort6
                    elif self.wage == 7:
                        self.steffort = p.steffort7
                    elif self.wage == 8:
                        self.steffort = p.steffort8
                    elif self.wage == 9:
                        self.steffort = p.steffort9
                    else:
                        self.steffort = p.steffort1

    def calculate_payoff_final_1(self):  #compute payoffs in the final round
        # choose randomly a round
        Liste_round = random.sample(list(range(4, Constants.num_rounds + 1)),
                                    2)
        print("This is liste round", Liste_round)
        self.random_round_payoff_1 = 8  #Liste_round[0]
        self.random_round_payoff_2 = 5  #Liste_round[1]
        print("so round 1 is ", self.random_round_payoff_1)
        print("so round 2 is ", self.random_round_payoff_2)

        #if randomly choose round is in list then randomly choose a payoff method
        if self.random_round_payoff_1 in Constants.round_specials:
            self.paidinspecialround_draw1 = 1

            for p in self.get_players():
                if p.type == "agent":
                    strategy_effort = getattr(
                        p.in_round(self.random_round_payoff_1),
                        'steffort{}'.format(
                            self.in_round(self.random_round_payoff_1).wage))
            for p in self.get_players():
                if p.type == "agent":

                    print("the tye is the agent", p.type)
                    print("this is the wage chosen for the strategy method",
                          self.in_round(self.random_round_payoff_1).wage)
                    print("this is the effort chosen for the strategy method",
                          strategy_effort)
                    print("this is the endowment in that period",
                          self.in_round(self.random_round_payoff_1).actuale)

                    p.final_payoff = self.in_round(
                        self.random_round_payoff_1).wage - (
                            (strategy_effort)**2) / 2

                    #Step 3 belief accuracy
                    print("now let's add the belief accuracy")
                    if p.in_round(self.random_round_payoff_1
                                  ).wagebelief == self.in_round(
                                      self.random_round_payoff_1).wage:
                        print("WORKER In the interval")
                        p.belief_in_interval_1 = 1
                        p.final_payoff += Constants.bonus_if_in_internal
                    else:
                        print("Out of interval")
                        p.belief_in_interval_1 = 0

                else:

                    print("the type is principal", p.type)

                    p.final_payoff = (self.in_round(
                        self.random_round_payoff_1).actuale - self.in_round(
                            self.random_round_payoff_1).wage) * strategy_effort
                    agent = p.get_others_in_group()[0]
                    self.random_line_belief_payoff_1 = random.randint(
                        1,
                        self.in_round(self.random_round_payoff_2).actuale)

                    print("this is the first random line",
                          self.random_line_belief_payoff_1)

                    belief_effort = getattr(
                        p.in_round(self.random_round_payoff_1),
                        'eleffort{}'.format(self.random_line_belief_payoff_1))

                    print("this is belief effort", belief_effort)
                    print("this is strategy effort", strategy_effort)

                    # make the interval
                    upper_bound_belief_effort = strategy_effort + 0.1
                    lower_bound_belief_effort = strategy_effort - 0.1
                    # check if in interval
                    if lower_bound_belief_effort <= belief_effort <= upper_bound_belief_effort:
                        p.belief_in_interval_1 = 1
                        p.final_payoff += Constants.bonus_if_in_internal
                    else:
                        p.belief_in_interval_1 = 0
        else:
            print("Direct response method is going on")
            # direct-repsponse method
            for p in self.get_players():
                print("the type of the player", p.type)
                print("The information that we want",
                      self.in_round(self.random_round_payoff_1).wage)

                if p.type == "agent":
                    p.final_payoff = self.in_round(
                        self.random_round_payoff_1).wage - ((self.in_round(
                            self.random_round_payoff_1).effort)**2) / 2
                else:
                    p.final_payoff = (self.in_round(
                        self.random_round_payoff_1).actuale - self.in_round(
                            self.random_round_payoff_1).wage) * self.in_round(
                                self.random_round_payoff_1).effort

    def calculate_payoff_final_2(self):  # compute payoffs in the final round 2
        print(
            "***************** I'm in the method calculate payoff final 2 *****************"
        )
        # if randomly choose round is in list then randomly choose a payoff method
        if self.random_round_payoff_2 in Constants.round_specials:
            self.paidinspecialround_draw2 = 1

            for p in self.get_players():
                if p.type == "agent":
                    strategy_effort = getattr(
                        p.in_round(self.random_round_payoff_2),
                        'steffort{}'.format(
                            self.in_round(self.random_round_payoff_2).wage))
            for p in self.get_players():
                if p.type == "agent":
                    # make the interval

                    print("the tye is the agent", p.type)
                    print("this is the wage chosen for the strategy method",
                          self.in_round(self.random_round_payoff_2).wage)
                    print("this is the effort chosen for the strategy method",
                          strategy_effort)
                    print("this is the endowment in that period",
                          self.in_round(self.random_round_payoff_2).actuale)

                    p.final_payoff += self.in_round(
                        self.random_round_payoff_2).wage - (
                            (strategy_effort)**2) / 2

                    # check if in interval
                    if p.in_round(self.random_round_payoff_2
                                  ).wagebelief == self.in_round(
                                      self.random_round_payoff_2).wage:
                        print("WORKER In the interval")
                        p.belief_in_interval_2 = 1
                        p.final_payoff += Constants.bonus_if_in_internal
                    else:
                        print("Out of interval")
                        p.belief_in_interval_2 = 0
                else:

                    print("the type is principal", p.type)

                    p.final_payoff += (self.in_round(
                        self.random_round_payoff_2).actuale - self.in_round(
                            self.random_round_payoff_2).wage) * strategy_effort
                    agent = p.get_others_in_group()[0]
                    self.random_line_belief_payoff_2 = random.randint(
                        1,
                        self.in_round(self.random_round_payoff_2).actuale)

                    print("this is the second random line",
                          self.random_line_belief_payoff_2)

                    belief_effort = getattr(
                        p.in_round(self.random_round_payoff_2),
                        'eleffort{}'.format(self.random_line_belief_payoff_2))
                    strategy_effort = getattr(
                        agent.in_round(self.random_round_payoff_2),
                        'steffort{}'.format(self.random_line_belief_payoff_2))
                    print("this is belief effort", belief_effort)
                    print("this is strategy effort", strategy_effort)
                    # make the interval
                    upper_bound_belief_effort = strategy_effort + 0.1
                    lower_bound_belief_effort = strategy_effort - 0.1
                    # check if in interval
                    if lower_bound_belief_effort <= belief_effort <= upper_bound_belief_effort:
                        p.belief_in_interval_2 = 1
                        p.final_payoff += Constants.bonus_if_in_internal
                    else:
                        p.belief_in_interval_2 = 0
        else:
            print("Direct response method is going on")
            # direct-repsponse method
            for p in self.get_players():
                print("the type of the player", p.type)
                print("The information that we want",
                      self.in_round(self.random_round_payoff_2).wage)

                if p.type == "agent":
                    p.final_payoff += self.in_round(
                        self.random_round_payoff_2).wage - ((self.in_round(
                            self.random_round_payoff_2).effort)**2) / 2
                else:
                    p.final_payoff += (self.in_round(
                        self.random_round_payoff_2).actuale - self.in_round(
                            self.random_round_payoff_2).wage) * self.in_round(
                                self.random_round_payoff_2).effort

    def calculate_payoff(self):  #payoffs as the game unravels - not paid
        players = self.get_players()
        if self.round_number >= 13 and self.in_round(
                13
        ).draw == 1:  #important: the shock variable is defined in round 10
            high = 1
        else:
            high = 0
        for p in players:
            if p.type == 'agent':
                if self.round_number == 8 or self.round_number == 13 or self.round_number == 14 or self.round_number == 18:
                    p.payoff = self.wage - ((self.steffort)**2) / 2
                else:
                    p.payoff = self.wage - ((self.effort)**2) / 2

            else:

                if self.round_number <= 13:
                    #if self.round_number != 1 and self.round_number !=5 and self.round_number != 10 and self.round_number != 11 and self.round_number != 15:
                    #    p.payoff = (Constants.Endowment - self.wage)*self.effort
                    if self.round_number == 8:
                        p.payoff = (Constants.Endowment -
                                    self.wage) * self.steffort
                        print("This is ACTUALE and the round is 1 or 5",
                              self.actuale)
                    elif self.round_number == 13:
                        p.payoff = (Constants.Endowment -
                                    self.wage) * self.steffort
                        print("This is ACTUALE and the round is 10",
                              self.actuale)
                        if high == 1:
                            for g in self.in_rounds(self.round_number + 1,
                                                    Constants.num_rounds):
                                g.actuale = Constants.Endowmenthigh
                        else:
                            for g in self.in_rounds(self.round_number + 1,
                                                    Constants.num_rounds):
                                g.actuale = Constants.Endowmentlow
                    else:
                        p.payoff = (Constants.Endowment -
                                    self.wage) * self.effort
                else:

                    if (self.round_number == 14 or self.round_number == 18):
                        p.payoff = (self.actuale - self.wage) * self.steffort
                    else:
                        p.payoff = (self.actuale - self.wage) * self.effort

    def rounding(self):
        players = self.get_players()
        for p in players:
            p.final_payoff = round(p.final_payoff, 1)

    def check_payoff(self):
        players = self.get_players()
        for p in players:
            if p.payoff < 0:
                p.payoff = 0
コード例 #28
0
class Player(BasePlayer):
    type = models.CharField()
    belief_in_interval_1 = models.IntegerField()
    belief_in_interval_2 = models.IntegerField()

    #FIRM: elicited effort
    eleffort1 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    eleffort2 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    eleffort3 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    eleffort4 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    eleffort5 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    eleffort6 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    eleffort7 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    eleffort8 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    eleffort9 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    eleffort10 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    eleffort11 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    eleffort12 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")

    #WORKER: strategy method effort
    steffort1 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    steffort2 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    steffort3 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    steffort4 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    steffort5 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    steffort6 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    steffort7 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    steffort8 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    steffort9 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    steffort10 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    steffort11 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")
    steffort12 = models.FloatField(
        min=0,
        max=4,
        widget=widgets.SliderInput(attrs={'step': '0.1'}),
        verbose_name="")

    #WORKER: elicited wage
    wagebelief = models.IntegerField(min=1, verbose_name='')

    #Payment at the end of the experiment
    final_payoff = models.FloatField()
コード例 #29
0
class Player(BasePlayer):

    mid_question_1 = models.StringField(choices=['Right', 'Wrong'],
                                        widget=widgets.RadioSelect)

    mid_question_2 = models.StringField(choices=['Right', 'Wrong'],
                                        widget=widgets.RadioSelect)

    gender = models.StringField(choices=['Male', 'Female', 'Other'],
                                widget=widgets.RadioSelect)

    age = models.IntegerField()

    studies = models.StringField(choices=['Social Sciences', 'Hard Sciences'],
                                 widget=widgets.RadioSelect)

    question_4 = models.IntegerField(verbose_name='question_4',
                                     min=0,
                                     max=6,
                                     widget=widgets.SliderInput())

    question_5 = models.IntegerField(verbose_name='question_5',
                                     min=0,
                                     max=6,
                                     widget=widgets.SliderInput())

    question_6 = models.IntegerField(verbose_name='question_6',
                                     min=0,
                                     max=10,
                                     widget=widgets.SliderInput())

    #############################

    sent_amount = models.StringField(
        choices=['Exert restrain', 'Be assertive'], widget=widgets.RadioSelect)

    sent_belief = models.IntegerField(verbose_name='sent belief',
                                      min=0,
                                      max=100,
                                      initial=50,
                                      widget=widgets.SliderInput())

    sent_back_amount = models.StringField(
        choices=['Do not challenge', 'Challenge'], widget=widgets.RadioSelect)

    sent_back_belief = models.IntegerField(verbose_name='sent back belief',
                                           min=0,
                                           max=100,
                                           initial=50,
                                           widget=widgets.SliderInput())

    #############################

    lottery1 = models.StringField(choices=['Accept', 'Reject'],
                                  widget=widgets.RadioSelect)
    lottery2 = models.StringField(choices=['Accept', 'Reject'],
                                  widget=widgets.RadioSelect)
    lottery3 = models.StringField(choices=['Accept', 'Reject'],
                                  widget=widgets.RadioSelect)
    lottery4 = models.StringField(choices=['Accept', 'Reject'],
                                  widget=widgets.RadioSelect)
    lottery5 = models.StringField(choices=['Accept', 'Reject'],
                                  widget=widgets.RadioSelect)
    lottery6 = models.StringField(choices=['Accept', 'Reject'],
                                  widget=widgets.RadioSelect)

    #############################

    risk1 = models.StringField(choices=[
        '50% chance gaining 0 € and 50% chance of gaining 10 €.', '0'
    ],
                               widget=widgets.RadioSelect)
    risk2 = models.StringField(choices=[
        '50% chance gaining 0 € and 50% chance of gaining 10 €.', '1'
    ],
                               widget=widgets.RadioSelect)
    risk3 = models.StringField(choices=[
        '50% chance gaining 0 € and 50% chance of gaining 10 €.', '2'
    ],
                               widget=widgets.RadioSelect)
    risk4 = models.StringField(choices=[
        '50% chance gaining 0 € and 50% chance of gaining 10 €.', '3'
    ],
                               widget=widgets.RadioSelect)
    risk5 = models.StringField(choices=[
        '50% chance gaining 0 € and 50% chance of gaining 10 €.', '4'
    ],
                               widget=widgets.RadioSelect)
    risk6 = models.StringField(choices=[
        '50% chance gaining 0 € and 50% chance of gaining 10 €.', '5'
    ],
                               widget=widgets.RadioSelect)
    risk7 = models.StringField(choices=[
        '50% chance gaining 0 € and 50% chance of gaining 10 €.', '6'
    ],
                               widget=widgets.RadioSelect)
    risk8 = models.StringField(choices=[
        '50% chance gaining 0 € and 50% chance of gaining 10 €.', '7'
    ],
                               widget=widgets.RadioSelect)
    risk9 = models.StringField(choices=[
        '50% chance gaining 0 € and 50% chance of gaining 10 €.', '8'
    ],
                               widget=widgets.RadioSelect)
    risk10 = models.StringField(choices=[
        '50% chance gaining 0 € and 50% chance of gaining 10 €.', '9'
    ],
                                widget=widgets.RadioSelect)
    risk11 = models.StringField(choices=[
        '50% chance gaining 0 € and 50% chance of gaining 10 €.', '10'
    ],
                                widget=widgets.RadioSelect)

    ############################ test buttons ############################
    test_button1 = models.IntegerField(choices=['1'],
                                       widget=widgets.RadioSelect)
コード例 #30
0
class Player(BasePlayer):
    type = models.CharField()
    belief_in_interval = models.IntegerField()

    #FIRM: elicited effort
    eleffort1 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}),verbose_name="")
    eleffort2 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}),verbose_name="")
    eleffort3 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}),verbose_name="")
    eleffort4 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}),verbose_name="")
    eleffort5 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}),verbose_name="")
    eleffort6 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}),verbose_name="")
    eleffort7 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}),verbose_name="")
    eleffort8 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}),verbose_name="")
    eleffort9 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}),verbose_name="")
    eleffort10 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}),verbose_name="")
    eleffort11 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}),verbose_name="")
    eleffort12 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}),verbose_name="")
    eleffort13 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}),verbose_name="")
    eleffort14 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}),verbose_name="")
    eleffort15 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}),verbose_name="")
    eleffort16 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}),verbose_name="")

    #WORKER: strategy method effort
    steffort1 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}), verbose_name="")
    steffort2 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}), verbose_name="")
    steffort3 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}), verbose_name="")
    steffort4 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}), verbose_name="")
    steffort5 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}), verbose_name="")
    steffort6 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}), verbose_name="")
    steffort7 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}), verbose_name="")
    steffort8 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}), verbose_name="")
    steffort9 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}), verbose_name="")
    steffort10 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}), verbose_name="")
    steffort11 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}), verbose_name="")
    steffort12 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}), verbose_name="")
    steffort13 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}), verbose_name="")
    steffort14 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}), verbose_name="")
    steffort15 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}), verbose_name="")
    steffort16 = models.FloatField(min=0, max=6, widget=widgets.SliderInput(attrs={'step': '0.25'}), verbose_name="")

    #WORKER: elicited wage
    wagebelief = models.IntegerField(min=1, verbose_name='')
    #payoff from questionnaire period chosen randomly
    payoff_questionnaire = models.FloatField(initial=0)
    #payoff from decisional period chosen randomly
    payoff_decisional = models.FloatField(initial=0)
    #Payment at the end of the experiment
    final_payoff = models.FloatField(initial=0)
    #gender
    gender = models.IntegerField(choices=[[1,'Male'], [2,'Female'], [3,'Other']], verbose_name='')
    #education
    undergrad = models.IntegerField(choices=[[1,'Yes'], [0,'No']],verbose_name='')
    #comments
    comments = models.TextField(
        blank=True,
        max_length=3000,
        verbose_name = 'Please, write here any comment concerning the experiment (for example: game length, instructions, game). We would love to hear your opinion about it.'

    )