Otree怎么读,Otree文化传媒

  Otree怎么读,Otree文化传媒

  型号models.py是您定义应用程序数据模型的地方:

  SubsionGroupPlayer是Group的一部分,Group是Subsession的一部分。请参见概念概述。

  primary models.py是定义数据库表的列。假设您希望实验生成如下数据:

  下面是如何定义上面的表结构:

  定义列字段类型以下是主要的字段类型:

  BooleanField(用于真/假值和是/否值)

  货币字段货币金额;看钱和支付。IntegerFieldFloatField(用于实数)StringField(用于文本字符串)LongStringField(用于长文本字符串;其表单小部件为多行textarea)StringField,LongStringField为新增(2018年1月新增)。有关更多信息,请参见oTree 2.0。

  初始/默认值除非您设置None,否则字段的初始值将为initial=:

  最小,最大,选择有关如何设置字段最小值、最大值或选项的信息,请参见简单表单字段验证。

  内置字段和方法(内置字段和方法))中定义的字段和方法。比如Player表中有一个名为payroll和id_in_group的列,在_all_rounds()和get_others_in_group()中有类似的方法。

  下面列出了这些内置字段和方法。

  子进程session

  此会话所属的会话。看什么是自我。

  round_number

  根据目前的回合数。仅在应用程序有多轮(set Constants.num_rounds)时相关。参见Rounds。

  creating_session()

  与大多数其他内置的子会话方法不同,这个方法是一个您必须自己定义的方法。创建会话时,将执行您在此处放置的任何代码:

  creating_session允许您通过设置玩家、组、参与者或子会话字段的初始值来初始化子级别。例如:

  有关治疗和分组洗牌的更多信息。

  注意self是一个subsession对象,因为我们在Subsession类中。所以,你不能做self.player,因为子会话中有1个以上的玩家。而是用self.get_players()来获取所有这些。

  如果您的应用程序有多轮,creating_session会连续运行几次:

  将输出

  before_session_starts

  之前会话启动已重命名为创建会话()。但是,为了向后兼容,before_session_starts仍将执行新版本的oTree。

  group_randomly()

  请参见组匹配。

  group_like_round()

  请参见组匹配。

  get_group_matrix()

  请参见组匹配。

  set_group_matrix()

  请参见组匹配。

  get_groups()

  返回子会话中所有组的列表。

  get_players()

  返回子会话中所有玩家的列表。

  in_previous_rounds()

  请参见在轮次或应用程序之间传递数据。

  in_all_rounds()

  请参见在轮次或应用程序之间传递数据。

  in_round(round_number)

  请参见在轮次或应用程序之间传递数据。

  in_rounds(self,first,last)

  请参见在轮次或应用程序之间传递数据。

  会议/子会话

  该组所属的会话/子会话。看什么是“自我”?

  get_players()

  参见群组。

  get_player_by_role(角色)

  参见群组。

  get_player_by_id(id_in_group)

  参见群组。

  set_players(players_list)

  请参见组匹配。

  in_previous_rounds()

  请参见在轮次或应用程序之间传递数据。

  in_all_rounds()

  请参见在轮次或应用程序之间传递数据。

  in_round(round_number)

  请参见在轮次或应用程序之间传递数据。

  in_rounds(self,first,last)

  请参见在轮次或应用程序之间传递数据。

  玩家id_in_group

  从1开始自动分配整数。在多人游戏中,指明这是玩家1,玩家2,等等。

  支付

  玩家在这一轮的奖励。看到好处。

  会话/子会话/组/参与者

  该玩家所属的会话/子会议/组/参与者。看什么是“自我”?

  get_others_in_group()

  参见群组。

  get_others_in_subsession()

  参见群组。

  角色()

  与大多数其他内置播放器方法不同,这是您自己的方法。

  这个函数应该返回带有玩家角色的标签,通常取决于id_in_group。

  例如:

  然后就可以通过_player_by_role(卖家)来获取玩家。2.参见群组。

  此外,玩家的角色将显示在oTree管理界面的“结果”选项卡中。

  in_previous_rounds()

  请参见在轮次或应用程序之间传递数据。

  in_all_rounds()

  请参见在轮次或应用程序之间传递数据。

  in_round(round_number)

  请参见在轮次或应用程序之间传递数据。

  in_rounds(self,first,last)

  请参见在轮次或应用程序之间传递数据。

  会话NUM_PARTICIPANTS

  会议的参与者人数。

  配置

  请参阅配置会话和选择要播放的进程。

  vars

  请参见session.vars.

  参加者vars

  参见participant.vars.

  标签

  请参见参与者选项卡。

  id_in_session

  会话中的参与者ID。与该玩家相同的id_in_subsession。

  支付

  看到好处。

  payoff_plus_participation_fee()

  看到好处。

  常数常量建议使用这个类来放置应用程序的参数和常量,这些参数和常量不会因播放器而异。

  以下是必需的常量:

  Name_in_url:用于在参与者的url中标识您的应用程序的名称。

  例如,如果您将其设置为public_goods,则参与者的URL可能如下所示:

  http://otree-demo . heroku app . com/p/zuzepona/public _ goods/Introduction/1/

  每组玩家(在组中描述)

  Num_Rounds(以轮数描述)

  杂项主题(杂项)定义自己的方法您可以在模型上定义自己的方法。这可以帮助您在代码变得更加复杂时保持代码有序。例如,您可以定义一个函数来设置玩家的收入:

  请记住从某个地方调用这个函数,比如您的页面:

  因为不会自动执行,不像creating_session()、after_all_players_arrive()等内置函数。

  oTree如何执行代码任何不在方法中的代码基本上都是全局的,只会执行一次——当服务器启动时。

  有些人错误地认为代码会在每个新的会话中重新执行。例如,想要生成硬币投掷的随机概率的人可以在models.py中这样做:

  从打印输出可以看出,P只计算一次:服务器启动时:

  这意味着所有会议的所有参与者都是相同的。

  出于同样的原因,这也行不通:

  解决方案是在方法内生成随机变量,比如creating_session()。

  “玩家”和“玩家”之间有什么区别?在你的代码中,你应该总是使用小写的player,group和subsession。唯一的例外是类是在models.py中定义的,你使用classPlayer(BasePlayer)等等。

  Player在引用整个玩家表时使用大写(例如),在引用特定玩家即表中的一行时使用小写()。在Python中,player是一个类,Player是该类的一个实例。

  例如,在模板中,为了显示玩家的收益,我们必须使用{ { player . payroll } }而不是{ { player . payroll } }。

  但是,因为常数的原因,我们总是使用大写。那是因为常数不是一个有实例/行的数据库表,因为所有玩家的常数都是一样的。

  IntegerField和Integer有什么区别?IntegerField是数据库表中的一列。Integer是此表中的一个值。

  如何制作多个字段假设您的应用程序有许多几乎相同的字段,例如:

  很复杂;你应该寻找一种简化的方法。

  这些字段都显示在不同的页面上吗?如果有,请考虑转换成只有一个场的10回合游戏。请参考真功夫示例游戏,学习如何进行多轮一页循环,改变每轮显示的问题。

  如果那是不可能的,那么你可以通过定义一个返回字段的函数来减少重复代码的数量(make_field这只是一个例子名称;什么都可以叫)。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: