diff --git a/py/20200221_experiment_scheduling.py b/py/20200221_experiment_scheduling.py index 0916bb8..09b439a 100644 --- a/py/20200221_experiment_scheduling.py +++ b/py/20200221_experiment_scheduling.py @@ -15,81 +15,94 @@ sns.set_style('white') # experiment duration in minutes session_duration = 60 +game_duration = 45 n_subjects = 2 n_sessions = 12 duration_per_question = .1666667 # minutes (~10sec) -questionnaires = { - "study_level": { - "xcit_demographics": 20, - "aiss": 20, - "arces": 12, - "asrs": 18, - "avg2019": 16, - "bfi_2": 60, - "bisbas": 24, - "bis11": 12, - "cfq": 25, - "cfs": 12, - "dyslexia": 15, - "ehi_sf": 4, - "grit12": 12, - "i_panas_sf": 10, - "ipaq_sf": 7, - "maas": 15, - "mfs": 12, - "mw": 8, - "mwq": 5, - "ncs_6": 6, - "nfc": 18, - "psqi": 9, - "rei": 40, - "sci": 8, - "sqs": 28, - "upps_sf": 20, - "webexec": 12, - "who5": 5, - "whoqol": 26, - "xcit_poststudy_debrief": 20 # only in session 12 - }, - "session_level": { - 'nasa_tlx': 6, # after game - "xcit_postgame_debrief": 15 #after game - } + +prestudy_tasks = [ + "xcit_demographics" +] + +postgame_tasks = [ + "nasa_tlx", + "xcit_postgame_debrief" +] + +poststudy_tasks = [ + "xcit_poststudy_debrief" +] + +n_questions = { + "xcit_demographics": 20, + "aiss": 20, + "arces": 12, + "asrs": 18, + "avg2019": 16, + "bfi_2_par1": 30, + "bfi_2_part2": 30, + "bisbas": 24, + "bis11": 12, + "cfq": 25, + "cfs": 12, + "dyslexia": 15, + "ehi_sf": 4, + "grit12": 12, + "i_panas_sf": 10, + "ipaq_sf": 7, + "maas": 15, + "mfs": 12, + "mw": 8, + "mwq": 5, + "ncs_6": 6, + "nfc": 18, + "psqi": 9, + "rei": 40, + "sci": 8, + "sqs": 28, + "upps_sf": 20, + "webexec": 12, + "who5": 5, + "whoqol": 26, + "xcit_poststudy_debrief": 20, + "nasa_tlx": 6, + "xcit_postgame_debrief": 15 } + +# 1. define the study s = Scenario('Prolific500', horizon=session_duration) - -sessions = s.Resources('Session', num=n_sessions) +# 2. sessions +sessions = s.Resources('Session', num = n_sessions) -# one-time questionnaires -pregame_tasks = [] -for q in questionnaires['study_level'].keys(): - n_questions = questionnaires['study_level'].get(q, 0) - duration = ceil(n_questions * duration_per_question) +# 2. games +games = s.Tasks('Game',length=game_duration, num=n_sessions, is_group=False) +games += alt(sessions) + +# questionnaires +for q in n_questions.keys(): + n = n_questions.get(q, 0) + duration = ceil(n * duration_per_question) task = s.Task(q, length= duration, delay_cost=1) - task += alt(sessions) - # not really a pregame task - # pregame_tasks.append(questionnaire) + if q in poststudy_tasks: + print(q, 1) + task += sessions[-1] + s += games < task + elif q in prestudy_tasks: + print(q, 2) + task += sessions[0] + s += task < games + elif q in postgame_tasks: + print(q, 3) + task += sessions + s += games < task + else: + print(q, 4) + task += alt(sessions) -# game -games = s.Task('Game',length=45, delay_cost=1, is_group=False) -games += sessions +print(s.tasks) -# post-tasks -postgame_tasks = [] -for q in questionnaires['session_level'].keys(): - n_questions = questionnaires['session_level'].get(q, 0) - duration = ceil(n_questions * duration_per_question) - task = s.Task(q, length= duration, delay_cost=1) - task += sessions - postgame_tasks.append(task) - -# add constraints on precedences -#s += pregame_tasks < games -s += games < postgame_tasks - -# compute and print session schedules solvers.mip.solve(s) print(s.solution())