1. 程式人生 > >oTree學習教程(一)概念性概述

oTree學習教程(一)概念性概述

概念概述

Sessions

在oTree中,會話是指多個參與者參與一系列任務或遊戲的事件。會話的一個例子是:

“許多參與者將來到實驗室並進行公共產品遊戲,然後進行問卷調查。參與者獲得的獎金為10.00歐元,加上他們從遊戲中獲得的收入。“

Subsessions

會話是一系列的子會話; 子會話是構成會話的“部分”或“模組”。例如,如果一個會話由一個公共產品遊戲和一個問卷調查組成,那麼公共產品遊戲將是子會話1,而調查問卷將是一個子會話2.反過來,每個子會話都是一系列頁面。例如,如果你有一個4頁的公共產品遊戲,然後是一個2頁的問卷:

_images/session_subsession.png

如果遊戲重複多輪,則每輪都是一個子會話。

Groups

每個子會話可以進一步劃分為一組玩家; 例如,你可以擁有30名玩家,分為15組,每組2名玩家。(注意:組可以在子會話之間進行混洗。)

Object hierarchy(物件層次結構)

oTree的實體可以安排在以下層次結構中:

  • 會話是一系列子會話
  • 子會話包含多個組
  • 一組包含多個玩家
  • 每個玩家通過多個頁面進行

Participant

在oTree中,術語“玩家”和“參與者”具有不同的含義。參與者和玩家之間的關係與會話和子會話之間的關係相同:

_images / participant_player.png

玩家是一個特定子級別中的參與者的例項。玩家就像是參與者扮演的臨時“角色”。參與者可以是第一個子賽中的球員2,下一個賽季中的球員1等。

What is “self”?

在Python中,self是您當前所在類的例項。如果您想知道self特定上下文中的含義,請向上滾動,直到看到該類的名稱。

例如,在此程式碼中,self是一個玩家(Player該類的一個例項)。

這個名字selfplayer它更短更方便。

這類似於人們在談論自己時不使用自己的名字的方式; 他們只使用“我”,“我自己”和“我”之類的代詞。所以,self基本上是一個代名詞。

Functions vs. attributes

類具有屬性功能

以下是具有屬性的頁面示例

這意味著此頁面的時間限制為60秒。

但是,如果您希望時間限制是動態的呢?也許它應該取決於當前的輪數,或者取決於玩家到目前為止的表現。

要解決這個問題,我們需要使它成為當前頁面的函式,如下所示:

首先,讓我們看一下def get_timeout_seconds(self)行: def意味著我們定義了一個名為get_timeout_seconds的函式。它是一個函式,因此它具有輸入和輸出。 輸入(即引數)稱為self,它是頁面的當前例項。“例項”是什麼意思? 雖然許多玩家會多次檢視“Results”頁面,但是self具有關於當前頁面檢視的特定屬性。例如,self.round_number為我們提供當前的輪數,self.player為我們提供當前正在檢視頁面的玩家,self.session為我們提供了當前正在進行的會話。

總之,如果你定義一個屬性,那麼它對所有玩家都是一樣的。 如果你想要一個與玩家不同的東西,你需要使用一個帶引數self的函式。 有時,oTree提供兩種選擇。 例如,oTree提供timeout_seconds屬性(對於具有固定時間限制的簡單頁面)和get_timeout_seconds函式(對於具有動態時間限制的複雜頁面)。

Self: extended examples(Self:擴充套件示例)

您可以訪問哪些屬性self

下面是一個如何在程式碼中引用層次結構中的物件的圖表:

_images / object_model_self.png

例如,如果您使用的是Player類中的方法,則可以使用self.payoff訪問玩家的回報(因為self是玩家)。 但是如果你在pages.py中的Page類中,則等效表示式是self.player.payoff,它將指標從“page”遍歷到“player”。

以下是一些程式碼示例:

在你的 models.py

在你的 pages.py