otree의 유연한 실험실 실험


2

실험실 실험을 통해 otree "멀티 플레이어 의사 결정 전략 게임을 구현하기위한 장고 기반 프레임 워크"

otree의 양식에 대한 기본 사항

다음은 otree가 플레이어가 자신의 선택을보고하게하는 방법의 예입니다 (otree가 제공하는 템플릿의 일부인 "matching_pennies"게임을 기반으로 함).

이름이 지정된 파일 model.py, 다음 코드를 찾습니다.

class Player(otree.models.BasePlayer):

[...]

penny_side = models.CharField(choices=['Heads', 'Tails'])

[...]

그런 다음 views.py 사람이 찾는다.

class Choice(Page):

form_model = models.Player
form_fields = ['penny_side']

마지막으로, 양식은 다음을 통해 최종 사용자에게 표시됩니다. choice.html 삽입하여

{% formfield player.penny_side with label="I choose:" %}

내가 무엇을하고 싶은지

플레이어가해야하는 선택의 수는 매개 변수에 따라 가변적 인 유연한 실험을 만듭니다. x. 즉, 전체 프레임 워크가 생성되기를 원합니다. x 매개 변수 설정만으로 가능한 선택 가능 x, 모든 파일을 수동으로 업데이트 할 필요가 없습니다. 이것은 우리가 실험 설계를 변경하고 내 실험 설계가 다른 사람들에게 유용하도록 코드를 만들면 내 인생을 더 쉽게 만들어 줄 것입니다. (어느 시점에서 Github에 공개 할 계획입니다).

두 개의 루프를 사용하는 것이 상당히 쉬워야하는 것처럼 보이지만, 주어진 방법으로 주어진 목록을 사용하는 데 문제가 있습니다. otree 구조화되어 있습니다.

내가 이해하는 것으로부터, 나는 단지 하나만 본다. 매우 고약한 선택의 수를 매개 변수에 의존하는 방법 x. 먼저 각 선택 사항마다 다른 이름을 지정합니다. model.py예를 들어

class Player(otree.models.BasePlayer):

[...]

for i in range(x):
        exec("""choice%d = models.IntegerField(
        choices= ['Heads','Tails'])""" %i)

[...]

그 다음에 모든 선택의 이름을 view.py예를 들어

class Choice(Page):

all_forms = list()
for i in range(x):
    all_forms.append('choice%d' %i)

form_model = models.Player
form_fields = all_forms

마지막으로 Choice.html의 모든 양식을 반복하는 방법을 찾으십시오. 뭔가 (아래 코드가 작동하지 않는다는 것을 알고, 단지 그 요지를 제공)

{% for p in range(x)  %}

{% formfield player.choice{{p}} with label="I choose:" %}

{% endfor %}

내 질문은 :

  • 이것은 매우 더럽고 지나치게 복잡해 보입니다. 이런 종류의 미친 명명 과정을 피하기 위해 목록이 만들어졌습니다. 목록으로이 작업을 대신 수행하는 방법을 알고 있습니까?
  • 그것이 나무를 해킹하고 매개 변수에 따라 선택의 수를 결정하는 유일한 방법 인 경우 x, 그러면 그렇게 해. 그러나 나는 장고에서 루프를 통해 원하는 폼 세트를 생성하는 방법을 아직 이해할 수 없다. (분명히 위의 예제는 여러 가지 이유로 작동하지 않는다.).

만나다 meta.economics.stackexchange.com/questions/1432/... 이런 종류의 질문이 여기에 적합한 지에 대한 토론이 필요합니다.
Martin Van der Linden

난 당신이 더 나은 결과를 정기적으로 스택 교환을 사용하여 얻을 것이라고 생각합니다. 내 파이썬 질문에 신속하게 답변을 얻을. 이것은 분명히 경제보다 언어 문제에 더 가깝습니다.
lost

@lost : 나는 너무나 생각하고 Stackoverflow에 관한 첫 번째 질문을 게시했다. 그러나 문제는 아무런 관심을받지 못했다. 그것을 게시하는 나의 희망은 otree에 익숙한 사용자를 만나러 오는 것이 었습니다. 내가이 문제에 대해 잘 알고있는 사람이라면 otree에 대한 지식이있는 사람이 Pythton / Django를 아는 사람보다 더 잘 대답 할 것입니다. 어쨌든, 결국 Stackoverflow에서 또 다른 시도를해야 할 수도 있습니다 ...
Martin Van der Linden

1
나는 이것이 완벽하게 유효한 Econ.SE 질문이라고 생각합니다. oTree와 zTree는 경제학에서 거의 독점적으로 사용되는 언어입니다 (아마도 polsci). 그러나 나는 많은 실험 경제학자들이 있다고 생각하지 않는다. 그래서 나는이 질문에 대한 답을 보는 것에 놀랄 것이다.
The Almighty Bob

Btw, 실험실 실험은 실험 경제학과 너무 비슷하다고 생각하지만 실제로이 문제에 대한 질문을 수정하고 싶지는 않았습니다.
The Almighty Bob

답변:


1

질문의 두 번째 부분에 대한 답을 찾았습니다. https://github.com/oTree-org/otree-docs/issues/2 .

그것은 oTree, 변수 form 템플릿으로 전달되는 파일은 반복 가능합니다. 따라서 다음 코드가 작업을 수행합니다.

{% for field in form %}
        {% formfield field %}
    {% endfor %}

질문의 첫 번째 부분에 관해서, 나는 oTree에서 일하는 프로그래머에게 연락했다. 그는 현재 버전에서 oTree는 고정 된 수의 필드 만 정의 할 수 있음을 확인했습니다. 그는 다음과 같이 정의 할 것을 권고했다. model.py 큰 수의 필드를 사용한 다음 사용하십시오. get_form_fields fields.py의 원하는 하위 집합으로 동적으로 목록을 반환하는 views.py.

정말 큰 최대 수의 필드를 만들려는 경우, loopexec 남아 있습니다 - 나는 믿습니다 - 진행하는 가장 쉬운 방법입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.