otree入门常见问题

otree入门常见问题

学弟/学妹,别慌!刚接触oTree的时候,大家问的问题都差不多。我把你这些问题,用咱们学生之间聊天的方式,整理了一下。这感觉就像你在宿舍楼下,碰到了一个刚做完实验的学长,他告诉你的一些“血泪经验”。


1. 救命!oTree这玩意儿到底怎么装?官方文档第一步就劝退了…

这绝对是第一道坎,90%的人都在这卡过。官方文档是给有经验的程序员看的。

我的建议:

  • 第一步: 别管官方文档,直接跟着我的教程来安装 https://otree.xindamate.xyz/?p=99

  • 常见巨坑: 如果报错 otree_startup_failed。99%的可能是Python环境问题。记住一条咒语:“为oTree创建一个独立的虚拟环境 (virtual environment)”。把oTree相关的包都装在这个“隔离区”里,就不会和你电脑上其他Python项目打架了。

  • Python水平? 你会 if/else 就够了。oTree编程更像是“填空题”,而不是“写作文”。大部分时候,你都是在改官方给的模板。

2. 老师让我做个“最后通牒博弈”,我一个字都写不出来… 有没有模板给我抄…啊不,参考一下?

哈哈哈,我懂!没人一上来就会自己写。你的“宝藏库”有两个:

高效“参考”方法:

  1. 把你看中的项目代码下载下来。

  2. otree zipserver [你下载的压缩包文件名.zip] 这个命令,把它在你电脑上跑起来。

  3. 关键一步: 把你的项目窗口和范例项目的窗口并排放在屏幕上,对着看!看它的 models.py 是怎么定义变量的,pages.py 是怎么写页面逻辑的。先模仿,再理解,最后才是创新。

3. 我怎么知道代码有没有bug?总不能直接找同学来测,万一崩了多尴尬…

信我,直接找真人测,一定会崩,特别尴尬(别问我怎么知道的)。

你必须用oTree的 Bots (机器人) 功能。它不是简单帮你点“下一页”,而是你代码的“压力测试员”。

  • 具体场景: 比如你做公共品博弈,要求玩家投入0-10个币。你可以在机器人的脚本里故意让它提交一个 -5 或者 100。如果你的代码没做限制,机器人就会在这里报错。这时候你就知道,得在 Playercontribution 字段里加上 min=0, max=10 这个参数了。

  • Pro Tip: 在测试阶段,把 SESSION_CONFIGS 里的 num_demo_participants 改成你实验的人数,比如20人。然后点一下 Start bots,它就能瞬间模拟20个人跑完你的实验,什么奇奇怪怪的bug都能帮你炸出来。

4. session, app, page, round 这些词到底啥意思啊?我被绕晕了。

忘掉官方定义,把它想象成一个闯关游戏

  • Session (一场实验): 你和你的小伙伴们 “开始玩这整个游戏”。比如“周三下午三点场”。

  • App (一个大关卡): 游戏里有好几个大关卡。比如第一关是“新手教程”(填个人信息),第二关是“Boss战”(主实验博弈),第三关是“领取奖励”(问卷调查)。

  • Round (关卡里的重复挑战): 你的“Boss战”可能要打好几轮。每一轮都是一个 Round

  • Page (关卡里的每个房间): 每一关里,你都要经过好几个房间。比如“游戏说明”房间、“做出选择”房间、“看结果”房间。每个房间就是一张 Page

记住这个顺序:Session > App > Round > Page。这么一想,结构就清晰了。

5. 我改了代码,刷新页面怎么没反应?

这是个超级常见,但文档里几乎不提的坑!

oTree为了性能,会缓存很多东西。你改了Python代码(比如 models.pypages.py),简单地刷新网页是没用的

正确做法: 回到你的命令行/终端,按 Ctrl+C 停止oTree服务器,然后按“向上”方向键,找到你上次输入的 otree devserver 命令,回车,重启服务器。每次修改 .py 文件后,都要这么做。修改HTML模板文件通常不需要重启。

6. 我做好了想发给别人填,怎么放到网上?是不是得租服务器,很贵吧?

对于学生的小规模实验,用 Heroku 是标准答案。

  • 价格: 别被“服务器”吓到。Heroku的基础方案一个月7-10美元,大概就是两杯奶茶钱,就能撑起你几十上百人的小实验了。

  • 关键文件: 第一次部署到Heroku,大概率会失败。失败原因通常是少了几个关键的配置文件。检查你的项目根目录里有没有这三个文件:Procfile, requirements_base.txt, runtime.txt。oTree官方文档有教你怎么生成它们,照着做就行。

  • HTTPS/数据库: Heroku默认就给你搞定了HTTPS安全链接,添加数据库也是点几下鼠标,非常方便。

7. 实验做完了,怎么把数据导出来啊?

这个问题的频率绝对是Top 3!

实验顺利跑完,恭喜!现在是收获的时候了:

  1. 用管理员身份登录你的oTree实验后台。

  2. 顶部导航栏有一个“Data”选项卡。

  3. 点进去,你会看到所有Session的数据。你可以选择导出“all_apps_wide”这个CSV文件,它会把一个被试所有的数据都放在同一行里,这是最常用的格式,方便用Stata或Excel分析。

  4. 旁边还有一个“Page times”的CSV,可以导出每个被试在每个页面停留了多久,有时候可以用来判断他是不是在划水。

8. 在主实验前面加一个同意书,最后加一个问卷,怎么实现?

这个思路非常对,就是把它们做成独立的app。

  1. 在你的项目里,创建三个app,比如 app1_consent (同意书), app2_main_game (主实验), app3_survey (问卷)。

  2. 打开项目根目录的 settings.py 文件。

  3. 找到 SESSION_CONFIGS 这个设置。在你的实验配置里,有一个叫 app_sequence 的列表。

  4. 把它的顺序改成 ['app1_consent', 'app2_main_game', 'app3_survey']

  5. 重启服务器,搞定!oTree就会像播放列表一样,按顺序执行这几个app。

9. 实验里的“ECU”、“虚拟币”最后怎么算成真钱?

这是oTree的核心功能,比你想象的简单。

  1. settings.py 里,定义好你的 REAL_WORLD_CURRENCY_PER_POINT,比如 0.5,代表1个虚拟币 = 0.5元。

  2. 在实验的每一轮,你把玩家挣的虚拟币存到一个叫 player.payoff 的特殊变量里。oTree会自动帮你累加每一轮的 payoff

  3. 实验结束后,oTree会自动计算出 总虚拟币 * 兑换率 的金额。

  4. 关键: 别忘了实验还有 参与费 (participation fee)。你可以在 SESSION_CONFIGS 里设置它。最终被试看到的钱,是 player.payoff 换算后的钱 + 参与费。oTree后台的支付页面会帮你把这两项加好,清清楚楚。


最后,给你的几句心里话:

  • 学会看报错: 满屏红字很吓人,但永远只看最后一行。它会告诉你哪个文件的哪一行出错了。

  • 多用 print() 不确定一个变量的值是什么?就在代码里 print(self.player.my_variable),答案会直接显示在你的命令行窗口里。这是最简单粗暴但极其有效的调试方法。

  • 耐心和Google是你的超能力: 你遇到的99%的问题,Google上都有人问过。把报错信息复制粘贴到Google,通常第一个结果就是oTree官方论坛或StackOverflow的答案。

加油!搞定oTree,不仅能让你的实验顺利完成,这个解决问题的过程本身,也会让你收获巨大。祝实验顺利,数据给力,早日发paper!