Tratamientos
Para asignar participantes a diferentes grupos de tratamiento, puedes usar creating_session. Por ejemplo:
def creating_session(subsession):
import random
for player in subsession.get_players():
player.time_pressure = random.choice([True, False])
print('set time_pressure to', player.time_pressure)
También puedes asignar tratamientos a nivel de grupo (coloca el BooleanField en Group y cambia el código anterior para usar get_groups() y group.time_pressure).
creating_session se ejecuta inmediatamente cuando haces clic en el botón «create session», incluso si la aplicación no es la primera en la app_sequence.
Grupos de tratamiento y múltiples rondas
Si tu juego tiene múltiples rondas, un jugador podría tener diferentes tratamientos en diferentes rondas, porque creating_session se ejecuta para cada ronda de manera independiente. Para evitar esto, configúralo en el participante, en lugar de en el jugador:
def creating_session(subsession):
if subsession.round_number == 1:
for player in subsession.get_players():
participant = player.participant
participant.time_pressure = random.choice([True, False])
Grupos de tratamiento equilibrados
El código anterior realiza un sorteo aleatorio de manera independiente para cada jugador, por lo que puedes terminar con un desequilibrio. Para resolver esto, puedes usar itertools.cycle:
def creating_session(subsession):
import itertools
pressures = itertools.cycle([True, False])
for player in subsession.get_players():
player.time_pressure = next(pressures)
Eligiendo qué tratamiento jugar
En un experimento en vivo, a menudo quieres asignar a un jugador un tratamiento aleatorio. Pero cuando estás probando tu juego, a menudo es útil elegir explícitamente qué tratamiento jugar. Supongamos que estás desarrollando el juego del ejemplo anterior y quieres mostrar a tus colegas ambos tratamientos. Puedes crear 2 configuraciones de sesión que sean iguales, excepto por un parámetro (en oTree Studio, añade un «custom parameter»):
SESSION_CONFIGS = [
dict(
name='my_game_primed',
app_sequence=['my_game'],
num_demo_participants=1,
time_pressure=True,
),
dict(
name='my_game_noprime',
app_sequence=['my_game'],
num_demo_participants=1,
time_pressure=False,
),
]
Entonces, en tu código, puedes obtener el tratamiento de la sesión actual con:
session.config['time_pressure']
Incluso puedes combinar esto con el enfoque de aleatorización. Puedes verificar if 'time_pressure' in session.config:; si es así, úsalo; si no, elígelo al azar.
Configurar sesiones
Puedes hacer que tu sesión sea configurable, para que puedas ajustar los parámetros del juego en la interfaz de administración.
Por ejemplo, supongamos que tienes un parámetro «num_apples». El enfoque habitual sería definirlo en C, por ejemplo, C.NUM_APPLES. Pero para hacerlo configurable, puedes definirlo en la configuración de tu sesión. Por ejemplo:
dict(
name='my_session_config',
display_name='My Session Config',
num_demo_participants=2,
app_sequence=['my_app_1', 'my_app_2'],
num_apples=10
),
Cuando creas una sesión en la interfaz de administración, habrá un cuadro de texto para cambiar este número. También puedes agregar texto de ayuda con 'doc':
dict(
name='my_session_config',
display_name='My Session Config',
num_demo_participants=2,
app_sequence=['my_app_1', 'my_app_2'],
num_apples=10,
doc="""
Edit the 'num_apples' parameter to change the factor by which
contributions to the group are multiplied.
"""
),
En el código de tu aplicación, puedes hacer session.config['num_apples'].
Notas:
Para que un parámetro sea configurable, su valor debe ser un número, booleano o cadena.
En la sección «Demo» del administrador, las sesiones no son configurables. Solo está disponible al crear una sesión en «Sessions» o «Rooms».