#1 by Anwesha
Hello there, So, I have finished coding the group treatment. Things seem to be working well except the payoff part. Well, a part of it is working well. But not entirely. So each group has two players and each one of then can select two assets: A and B. If both players select asset A or asset B and a random number gets generated, they get paid accordingly. However, if one player selects A and the other B and the same random number gets generated, the player who selected asset A gets paid for that asset and the player who selected asset B, gets paid for asset B. This is where things are not working. My code is mentioned below. Could you kindly advise me on this? The ultimate decision variable is decision2. class C(BaseConstants): NAME_IN_URL = 'group_esg' PLAYERS_PER_GROUP = 2 NUM_ROUNDS = 1 ENDOWMENT_PER_PLAYER = 100 payment_assetA = 110 payment_assetB = 115 payment_otherwise = 30 class Player(BasePlayer): decision1 = models.BooleanField( label="Please make a selection between Asset A and Asset B", choices=[ [True, "Asset A"], [False, "Asset B"], ], widget=widgets.RadioSelect, ) time1 = models.FloatField() decision2 = models.BooleanField( label="Please make a selection between Asset A and Asset B", choices=[ [True, "Asset A"], [False, "Asset B"], ], widget=widgets.RadioSelect, ) time2 = models.FloatField() class Results(Page): @staticmethod def vars_for_template(player: Player): pchoice = np.random.random() if pchoice <= 0.5: Group.get_payoff = 1 else: Group.get_payoff = 0 if player.decision2 == True: player.payoff += C.payment_assetA * Group.get_payoff if player.decision2 == False: player.payoff += C.payment_assetB * Group.get_payoff if Group.get_payoff == 0: player.payoff += C.payment_otherwise return dict( earning=format(Decimal(player.payoff) / Decimal(10), '.2f') )
#2
by
MouliModak
Hi, I think player.payoff does not allow +=. It's a round-specific variable. I hope this helps. Best wishes, Mouli Modak
#3 by Anwesha
Thank you.