房间

oTree允许你配置”房间”,它提供了下面的特性:

  • 在session之间保持不变的链接,你可以将其分发给参与人或者实验室电脑
  • “等待房间”允许你查看哪些参与者目前正在等待session开始。
  • 易于参与人输入的短链接,利于快速现场演示。

下面是屏幕截图:

_images/room-combined.png

创建房间

你可以创建多个房间——比如说,对应你教学的不同班级,你管理的不同实验室。

如果使用oTree Studio

在侧边栏,前往”Settings”并在底部添加一个房间。

如果使用PyCharm

前往 settings.py 并设置 ROOMS

例如:

ROOMS = [
    dict(
        name='econ101',
        display_name='Econ 101 class',
        participant_label_file='_rooms/econ101.txt',
        use_secure_urls=True
    ),
    dict(
        name='econ_lab',
        display_name='Experimental Economics Lab'
    ),
]

如果你使用了参与人标签(参见下文),你需要一个 participant_label_file ,它是一个相对(或绝对)路径,指向一个保存着参与人标签的文本文件。

配置房间

参与人标签

这是房间的”访客列表”。它应当每一行包含一个参与人标签。例如:

LAB1
LAB2
LAB3
LAB4
LAB5
LAB6
LAB7
LAB8
LAB9
LAB10

如果你没有指定参与人标签,那么任何人都可以进入房间,只要他知道了房间的URL。参见 如果不使用participant_label_file

use_secure_urls (可选的)

这一设置提供了 participant_label_file 之上额外的安全性。举例来说,不使用安全URL时,你的开始链接看起来就像下面这样:

http://localhost:8000/room/econ101/?participant_label=Student1
http://localhost:8000/room/econ101/?participant_label=Student2

如果Student1是恶意的,他可能会将他URL中的参与人标签从”Student1”改为”Student2”,这样它就可以冒充Student2。然而,如果你使用了 use_secure_urls,每个URL会获得一个唯一的代码,像下面这样:

http://localhost:8000/room/econ101/?participant_label=Student1&hash=29cd655f
http://localhost:8000/room/econ101/?participant_label=Student2&hash=46d9f31d

这样,Student1由于不知道这一代码就无法冒充Student2。

使用房间

在admin界面,单击导航栏的”Rooms”,然后点击你创建的房间。向下滑动到参与人URL的那一部分。

如果使用participant_label_file

在房间的admin页面,观察哪些参与人已经到达,当你准备完毕后,创建一个你指定人数的会话。

你可以使用指定参与人的URL,也可以使用房间的URL。

指定参与人的URL已经包含参与人标签。例如:

http://localhost:8000/room/econ101/?participant_label=Student2

房间的URL并不包含参与人标签:

http://localhost:8000/room/econ101/

所以如果你使用了房间的URL,参与人会被要求输入他们的参与人标签:

_images/room-combined.png

如果不使用participant_label_file

直接让每位参与人打开房间URL。然后,在房间的admin页面,查看多少人已经到场,然后创建你指定人数的会话。

尽管这一方案很简单,但是它相对使用参与人标签的方案有些不可靠。因为有些人可能会通过在两个不同的浏览器里打开链接的方式玩两次。

为多个会话复用

房间的URL被设计为可在不同会话间复用。在实验室中,你可以将其设置为浏览器的主页(使用房间的URL或指定参与人的URL)。

在教学实验中,你可以给每一位学生他们可以使用整个学期的URL。

如果参与人没有都到场怎么办?

如果你在进行一项实验室实验并且参与者的人数是难以预测的,你可以考虑使用房间URL,并要求参与者手动输入他们的参与人标签。参与者仅在输入他们的参与者标签之后才被算为到场。

或者,你可以打开浏览器并输入特定参与人的URL,在会话开始之前关闭那些未参加者的电脑。

参与人可以在会话开始之后加入,只要还有位置。

预分配标签到参与者

oTree按照到达时间分配参与者顺序,例如第一个到达的人就是参与者1。然而,这在某些情况下并不是我们所期望的,举例来说:

  • 你希望参与者标签按照oTree ID排成固定的顺序,例如LAB29总是参与者29。
  • 你希望Alice/Bob/Charlie总是参与者1/2/3,这样他们就会在同一组中进行游戏。

creating_session 中分配参与者标签即可:

def creating_session(subsession):
    labels = ['alice', 'bob', 'charlie']
    for player, label in zip(subsession.get_players(), labels):
        player.participant.label = label

如果有人打开了含有 participant_label=alice 的开始链接,oTree会检查是否会话中已经有参与人拥有那个标签。(这是必须的为了点击开始链接两次会分配标签给同一个参与者。)

向oTree传递参与人的数据

参见 “Participant vars for room” endpoint