#1 by Ben (edited )
Hi,
I would like to create 3 groups given the following condition:
group 1 : only participant with a score above the mean
group 2: only participants with a score below the mean
group 3: both participants with a score above and below the mean
The "score" in question is determined by the answer from a survey on the previous app, and stored in a player.participant.vars
I looked on the different ressources, but I was not able to find a way to do it.
If anyone have a idea on how I should proceed it will help me a lot !
Thanks in advance for your answers
(I attached the code if it might help)
edit : I try that but i only get "Mix"
def creating_group(player: Player, timeout_happened):
if player.roole == 'A' and (player.group.g1 < 4 or player.group.g3 < 2):
if player.group.g3 < 2:
if random.randint(1, 2) == 1:
player.group.groupe = "Mix"
player.group.g3 += 1
else:
player.group.groupe = "Pro"
player.group.g1 += 1
else:
if player.group.g4 < 2:
if random.randint(1, 2) == 1:
player.group.groupe = "Mix"
player.group.g4 += 1
else:
player.group.groupe = "Against"
player.group.g2 += 1
#2 by Ben
And I manage to do it that way:
class Results(Page):
@staticmethod
def before_next_page(player: Player, timeout_happened):
if player.rank <= player.group.med:
if random.randint(1,2) == 1 and player.group.G3 < 2:
player.roole = "C"
player.group.G3 += 1
elif player.group.G1 < 4:
player.roole = "A"
player.group.G1 += 1
else:
player.roole = "C"
player.group.G3 += 1
else:
if random.randint(1, 2) == 1 and player.group.G4 < 2:
player.roole = "C"
player.group.G4 += 1
elif player.group.G2 < 4:
player.roole = "B"
else:
player.roole = "C"
player.group.G3 += 1
player.participant.vars['roole'] = player.roole
#3 by Daniel_Frey
Hi Ben
I'd suggest you set a group matrix after all players arrive at the WaitPage: https://otree.readthedocs.io/en/latest/multiplayer/groups.html#set-group-matrix
There you could do something like this:
def after_all_players_arrive(subsession)
for p in subsession.get_players()
*your if-statement*
Add each player-id to one of three lists: score_above_mean / mix / score_below_mean
and set the group matrix accordingly:
subsession.set_group_matrix([score_above_mean, mix, score_below_mean])
I have not tested this, but that should lead you to the right path :)
Best,
Daniel
#4 by Ben
Thank you Daniel, it works very well!