from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import random import itertools import numpy as np from django import forms from django.forms import widgets as django_widgets import math author = 'Jindi Huang' doc = """ Reference Dependent: Real Effort """ class Constants(BaseConstants): name_in_url = 'real_effort' players_per_group = None #### Task Settings #### num_rounds = 30 # The maximum tasks to complete max_tasks = 30 # The maximum tasks to complete slide_task_payment = 0.1 # payment per slide task rp_low = 2 rp_high = 5 ####################### list1 = np.arange(1 * 20, - 1, -1) list2 = [] list2.append(0) for x in range(20): list2.append((x+1)*5) class Subsession(BaseSubsession): def creating_session(self): if self.round_number == 1: for p in self.get_players(): p.participant.vars['pages_num'] = 0 p.participant.vars['continue'] = True p.participant.vars['credited'] = 0 p.participant.vars['rp'] = random.choice([Constants.rp_low, Constants.rp_high]) p.participant.vars['confidence_anchor'] = 0 p.participant.vars['confidence_noanchor'] = 0 p.participant.vars['chance'] = random.choice([0,1]) p.participant.vars['task_payment'] = 0 p.participant.vars['total_payment'] = 0 p.participant.vars['fixed_bonus'] = self.session.config['question_num']*self.session.config['fixed_payment_per_question'] class Group(BaseGroup): pass class Player(BasePlayer): confidence_noanchor = models.FloatField() confidence_anchor = models.FloatField() rp = models.IntegerField() continue_work = models.BooleanField(initial=True,widget=widgets.RadioSelect, label="") work_completed = models.IntegerField(initial=0) task_num = models.IntegerField(initial=0) def set_payoff(self): if not self.participant.vars['failed_comprehension'] and not self.participant.vars['failed_answer']: if self.participant.vars['chance']: self.payoff = self.participant.vars['credited'] else: self.payoff = self.participant.vars['rp']