diff --git a/py/20200221_experiment_scheduling.py b/py/20200221_experiment_scheduling.py index 9ef163d..9d6f8f7 100644 --- a/py/20200221_experiment_scheduling.py +++ b/py/20200221_experiment_scheduling.py @@ -6,32 +6,89 @@ # Use the following command to install dependencies: `pip install pyschedule` #%% - +from math import ceil from pyschedule import Scenario, solvers, plotters, alt +import seaborn as sns + +sns.color_palette("muted") +sns.set_style('white') # experiment duration in minutes -duration = 60 -questionnaires = ["xcit-demographics", "aiss", "arces", "asrs", "avg2019", "bfi-2", "bisbas", "bis11", "cfq", "cfs", "dyslexia", "ehi-sf", "grit12", "i-panas-sf", "ipaq-sf", "maas", "mfs", "mw", "mwq", "ncs-6", "nfc", "psqi", "rei", "sci", "sqs", "upps-sf", "webexec", "who5", "whoqol","nasa-tlx", "xcit-postgame-debrief"] +session_duration = 60 +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 + } +} + +s = Scenario('Prolific500', horizon=session_duration) + +sessions = s.Resources('Session', num=n_sessions) -# the planning horizon has -s = Scenario('Prolific500', horizon=duration) +# 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) + print(duration) + task = s.Task(q, length= duration, delay_cost=1) + task += alt(sessions) + # not really a pregame task + # pregame_tasks.append(questionnaire) -session = s.Resource('session', num=12) +# game +games = s.Task('Game',length=45, delay_cost=1, is_group=False) +games += sessions -mmi = s.Task('mmi', length=3, delay_cost=1) -mmi += alt(session) - -games = s.Task('games',length=45, delay_cost=1, is_group=True) -games += alt(session) - -nasa_tlx = s.Task('nasa_tlx', length=1, delay_cost=1) -nasa_tlx += alt(session) +# 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 += mmi < games -s += games < nasa_tlx - +#s += pregame_tasks < games +s += games < postgame_tasks # compute and print session schedules solvers.mip.solve(s)