otree_jp
  • oTreeとは:
  • 基本的な考え方
    • oTreeとは:
    • Python環境の整備:
    • oTreeのインストールと起動:
    • oTreeのアップグレードや再インストール:
  • プログラムの組み方
    • oTreeでのSurveyの作り方:
    • 信頼ゲームを作ってみる
    • 公共財ゲーム
  • 概念的な把握
    • Sessions
    • Models
    • Pages
    • Templates
    • Forms
  • 番外編
    • oTreeをAmazon EC2で使ってみる
Powered by GitBook
On this page
  • Models
  • Model fields
  • Constants
  • Subsession
  • Group
  • Player
  • Session
  • Participant

Was this helpful?

  1. 概念的な把握

Models

Models

models.pyはアプリケーション内で用いられるデータを定義しているものです.以下の3つからなります.

  • Subsession

  • Group

  • Player

1人のPlayerはグループの構成要員であり,subsessionの一部です.詳細は"Conceptual overview"でご確認ください.

Model fields

models.pyの主な定義は,データベース上における列を定義するものです.以下のような表を作ってみましょう.

name

age

is_student

John

30

False

Alice

22

True

Bob

35

False

...

このようなテーブル構造は,以下のように定義することができます.

class Player(BasePlayer):
    ...
    name = models.CharField()
    age = models.PositiveIntegerField()
    is_student = models.BooleanField()

otree resetdbを実行した時,models.pyを分析して,その通りにデータベーステーブルを作成します.(だから,models.pyに追加したり,削除したり,項目に変更を加えた際にresetdbを実行する必要があります.)

Settng a field's initial/default value

あなたが定義したどんなフィールドも,初期値はNoneであり,何も定義されていません.もし,何らかの初期値を定義したいのであれば,initial =を使ってください.

class Player(BasePlayer):
    some_number = models.IntegerField(initial=0)

min, max. choices

Constants

Constantsクラスは,プレイヤーに共通するアプリケーションのパラメータと定数を設定するのに適したものです.

以下がアプリケーションに必要となる定数です.

  • name_in_url:この名前は実験参加者のURLにおいて,アプリケーションを特定するために用いられます.例えば,public_goodsを設定したのであれば,実験参加者のURLは以下のようになります.http://otree-demo.herokuapp.com/p/zuzepona/public_goods/Introduction/1/

  • players_per_group:(Groupsの欄で述べます.)

  • num_rounds:(Roundsの欄で述べます.)

Subsession

以下には,Subsessionオブジェクトの属性とメソッドのリストを示します.

session

sessionの中にはsubsessionがあります.詳細は"Self"に関する説明を確認してください.

round_number

現在のラウンド数を表示します.ただし,これは複数ラウンド実施するゲーム実験のみに関係します.(Constants.num_roundsで定義されます.)詳細は"Rounds"に関する説明を確認してください.

before_session_starts

creating_session

このメソッドはbefore_session_startsと呼ばれていたものです.詳細はそちらをご確認ください.

このメソッドは管理者が"create session"をクリックした際に実行されます.

creating_sessionはplayer,Groups,subsessionsなどのフィールドを初期値に戻すものです.例は以下のとおりです.

class Subsession(BaseSubsession):

def creating_session(self):
    for p in self.get_players():
        p.some_field = some_value

もし,アプリケーションが1ラウンドだけであれば,creating_sessionは一度だけ実行されます.もし,アプリケーションがNラウンドあれば,N回実行されます.すなわち,各subsessionに1つずつ必要となるのです.

group_randomly()

group_like_round()

get_group_matrix()

get_groups()

subsessionにおける全てのグループのリストを返します.

get_players()

subsessionにおける全てのプレイヤーのリストを返します.

in_previous_rounds()

in_all_rounds()

in_round(round_number)

in_rounds(self, first, last)

Group

以下には,Groupオブジェクトの属性とメソッドのリストを示します.

sessions/subsession

sessionの中にはsubsessionがあります.詳細は"Self"に関する説明を確認してください.

get_players()

get_player_by_role(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)

Player

以下には,Playerオブジェクトの属性とメソッドのリストを示します.

id_in_group

整数であり,1から始まります.複数人ゲームの場合,この数値はプレイヤー1に割り振られているのか,プレイヤー2に割り振られているのかなどを示します.

payoff

session/subsession/group/participant

get_others_in_group()

get_others_in_subsession()

role()

in_previous_rounds()

in_all_rounds()

in_round(round_number)

in_rounds(self, first, last)

Session

num_participants

そのセッションの参加者の人数を示しています.

config

vars

Participant

vars

label

id_in_session

セッションにおける実験参加者のIDを示しています.このIDはプレイヤーのid_in_subsessionと同じものです.

payoff

payoff_plus_participation_fee

oTreeコードの実行方法

メソッド内にないコードは基本的には全てglobalであり,サーバ起動時に一度だけ実行されます.

一部の人々は新しいセッションが実行される度にコードが実行されると勘違いしているようです.例えば,コイントスで表が出るようなランダム確率を発生させたい人は以下のようなコードをmodels.pyに書くかもしれません.

class Constants(BaseConstants):
    heads_probability = random.random() # wrong

サーバが起動した時にmodels.pyを起動します.そしてrandom.random()を一度だけ実行します.そしてランダムな数字,例えば“0.257291”を評価します.

class Constants(BaseConstants):
    heads_probability = 0.257291

なぜならば,Constantsはglobal変数であり,“0.257291”が全てのセッションにおいて全プレイヤーに共有されます.

同じ理由で,以下のコードも起動しません.

class Player(BasePlayer):

    heads_probability = models.FloatField(
        # wrong
        initial=random.random()
    )
PreviousSessionsNextPages

Last updated 6 years ago

Was this helpful?

利用可能なfieldsのリストはDjangoドキュメンテーションのにあります.最もよく使われるのはCharField/TextField(文字列),FloatField(実数),BooleanField(真偽値),IntegerFieldとPositiveIntegerFieldです.FloatFieldとDecimalFieldの違いを十分に理解しない限り,そして使う必要がない限りは使わないようにしてください.

さらに,oTreeはCurrencyFieldがあります.詳細はを御覧ください.

min(最小値),max(最大値)やchoices(選択肢)を設定したいのであれば,をごらんください.

before_session_startsはからotree-core1.3.2(June 2017)より変更したものです.しかしながら,before_session_startsも下位互換性を保つために,現在でも利用可能です.

詳細ない情報はとにあります.

この方法は各ラウンドの始まりには実行されます.そのために,ページの進行を止めるためにはを使ってください.

を確認してください.

を確認してください.

を確認してください.

詳細はを確認してください.

詳細はを確認してください.

詳細はを確認してください.

詳細はを確認してください.

を確認してください.

を確認してください.

を確認してください.

を確認してください.

詳細はを確認してください.

詳細はを確認してください.

詳細はを確認してください.

詳細はを確認してください.

プレイヤーのそのラウンドにおける利得を示します.詳細はを確認してください.

を確認してください.

を確認してください.

詳細はを確認してください.

詳細はを確認してください.

詳細はを確認してください.

詳細はを確認してください.

とを確認してください.

を確認してください.

を確認してください.

を確認してください.

を確認してください.

を確認してください.

この解決策は,のように,メソッドの内部でランダム変数を発生させることです.

ココ
お金と利得
コチラ
creating_session
treatments
group shuffling
after_all_players_arrive()
Group matching
Group matching
Group matching
Passing data between rounds or apps
Passing data between rounds or apps
Passing data between rounds or apps
Passing data between rounds or apps
Groups
Groups
Groups
Group matching
Passing data between rounds or apps
Passing data between rounds or apps
Passing data between rounds or apps
Passing data between rounds or apps
payoffs
Groups
Groups
Passing data between rounds or apps
Passing data between rounds or apps
Passing data between rounds or apps
Passing data between rounds or apps
Configure sessions
Choosing which treatment to play
session.vars
participants.vars
participants.labels
payoffs
payoffs
creating_session