diff --git a/p500_activities.csv b/p500_activities.csv new file mode 100644 index 0000000..aadb684 --- /dev/null +++ b/p500_activities.csv @@ -0,0 +1,64 @@ +group,activity,type,duration +1,BCS,assessment,26 +2,BM,assessment,25 +3,BSAC,assessment,26 +4,BSAC,assessment,26 +5,BSAC,assessment,22 +6,BSAC,assessment,11 +7,DS,assessment,10 +8,ML,assessment,21 +9,MOT,assessment,11 +10,MOT,assessment,18 +11,NB,assessment,32 +12,OC,assessment,15 +13,OOO,assessment,8 +14,PC,assessment,17 +15,RE,assessment,20 +16,RE,assessment,50 +17,SART,assessment,8 +18,SMC,assessment,25 +19,SMC,assessment,22 +20,SOS,assessment,7 +21,SRM,assessment,35 +22,SRT,assessment,8 +23,SS,assessment,10 +24,TH,assessment,16 +25,TH,assessment,10 +26,TH,assessment,15 +27,TOVA,assessment,10 +28,UFOV,assessment,40 +29,WO,assessment,15 +30,WO,assessment,15 +31,WO,assessment,15 +32,acs,survey,3.5 +33,adc,survey,2 +34,aiss,survey,3 +35,arces,survey,2 +36,asrs,survey,1 +37,avgp,survey,3 +38,bfi2,survey,6 +39,bis11,survey,3.5 +40,bisbas,survey,4 +41,cfq,survey,4 +42,cfs,survey,2 +43,ehi-sf,survey,1 +44,erq,survey,2.5 +45,grit,survey,1 +46,iam,survey,1 +47,i-panas-sf,survey,2 +48,ipaq-sf,survey,3 +49,maas,survey,2.5 +50,mfs,survey,2 +51,mindset,survey,1 +52,mmi,survey,11 +53,mmi-sf,survey,3.5 +54,mw,survey,1.5 +55,mwq,survey,0.5 +56,ncs-6,survey,1 +57,psqi,survey,3 +58,rei,survey,4.5 +59,sss,survey,0.5 +60,upps-sf,survey,3 +61,webexec,survey,1 +62,who5,survey,1 +63,xcit-typing,survey,3 diff --git a/p500_activities.csv b/p500_activities.csv new file mode 100644 index 0000000..aadb684 --- /dev/null +++ b/p500_activities.csv @@ -0,0 +1,64 @@ +group,activity,type,duration +1,BCS,assessment,26 +2,BM,assessment,25 +3,BSAC,assessment,26 +4,BSAC,assessment,26 +5,BSAC,assessment,22 +6,BSAC,assessment,11 +7,DS,assessment,10 +8,ML,assessment,21 +9,MOT,assessment,11 +10,MOT,assessment,18 +11,NB,assessment,32 +12,OC,assessment,15 +13,OOO,assessment,8 +14,PC,assessment,17 +15,RE,assessment,20 +16,RE,assessment,50 +17,SART,assessment,8 +18,SMC,assessment,25 +19,SMC,assessment,22 +20,SOS,assessment,7 +21,SRM,assessment,35 +22,SRT,assessment,8 +23,SS,assessment,10 +24,TH,assessment,16 +25,TH,assessment,10 +26,TH,assessment,15 +27,TOVA,assessment,10 +28,UFOV,assessment,40 +29,WO,assessment,15 +30,WO,assessment,15 +31,WO,assessment,15 +32,acs,survey,3.5 +33,adc,survey,2 +34,aiss,survey,3 +35,arces,survey,2 +36,asrs,survey,1 +37,avgp,survey,3 +38,bfi2,survey,6 +39,bis11,survey,3.5 +40,bisbas,survey,4 +41,cfq,survey,4 +42,cfs,survey,2 +43,ehi-sf,survey,1 +44,erq,survey,2.5 +45,grit,survey,1 +46,iam,survey,1 +47,i-panas-sf,survey,2 +48,ipaq-sf,survey,3 +49,maas,survey,2.5 +50,mfs,survey,2 +51,mindset,survey,1 +52,mmi,survey,11 +53,mmi-sf,survey,3.5 +54,mw,survey,1.5 +55,mwq,survey,0.5 +56,ncs-6,survey,1 +57,psqi,survey,3 +58,rei,survey,4.5 +59,sss,survey,0.5 +60,upps-sf,survey,3 +61,webexec,survey,1 +62,who5,survey,1 +63,xcit-typing,survey,3 diff --git a/python/20200221_experiment_scheduling.py b/python/20200221_experiment_scheduling.py index 9beec24..63d7f36 100644 --- a/python/20200221_experiment_scheduling.py +++ b/python/20200221_experiment_scheduling.py @@ -8,7 +8,7 @@ # # Note: Use the following command to install dependencies: `pip install pyschedule` -#%% +# %% from math import ceil from pyschedule import Scenario, plotters, alt @@ -85,13 +85,14 @@ # 1. define the study s = Scenario('Prolific500', horizon=session_duration) # 2. sessions -sessions = s.Resources('Session', num = n_sessions) +sessions = s.Resources('Session', num=n_sessions) def _duration(questions): t = ceil(questions * duration_per_question) return t + # 3. games games = s.Tasks('Game',length=game_duration, num=n_sessions, is_group=False, delay_cost=1) games += alt(sessions) @@ -99,7 +100,7 @@ # 3. questionnaires for q in n_questions.keys(): n = n_questions.get(q, 0) - task = s.Task(q, length= _duration(n), delay_cost=1) + task = s.Task(q, length=_duration(n), delay_cost=1) if q in prestudy_tasks: task += sessions[0] # first session @@ -130,12 +131,65 @@ plot(s, fig_size=(50,5)) #%% +from pyschedule import Scenario, plotters, alt +from pyschedule.solvers.mip import solve +from pyschedule.plotters.matplotlib import plot + +import pandas as pd +from math import ceil + + +# load the study design data +activities = pd.read_csv('p500_activities.csv') +activities['activity'] = activities.apply( + lambda r: + r['activity'] + '_g' + str(r['group']) if r['type'] == 'assessment' else r['activity'], axis=1) + + +# 1. define the study +n_sessions = 10 +session_duration = 60 + +# OR infer session duration from data +# session_duration = ceil(activities['duration'].sum() / n_sessions) + +scenario = Scenario('p500_activities', horizon=session_duration) + +# 2. define the sessions +sessions = scenario.Resources('Bucket', num=n_sessions) + +# 3. define the tasks +for _, _, activity, activity_type, duration in activities.itertuples(): + # fixes for the pyschedule resolver to work + duration = ceil(duration) + activity = activity.replace('-', '_') + + # create the task + task = scenario.Task(activity, length=duration, delay_cost=1) + + # naive constraint (all buckets) + task += alt(sessions) + +# 4. solve resource allocation +solve(scenario) + +# 5. print last computed solution +print(scenario.solution()) + +# 6. pot gantt +plot(scenario, fig_size=(50, 10)) + +#%% # MPILX Scheduling from pyschedule import Scenario, solvers, plotters, alt # experiment duration for each subject in minutes study_duration = 12 * 24 * 60 # days * hours * minutes n_subjects = 2 + + + + task_durations = { 'pretest_presurvey': 30, 'pretest_DWI': 15, @@ -167,8 +221,8 @@ task += alt(subject) tasks.append(task) -for i in range(len(tasks)-1): - s += tasks[i] < tasks[i+1] +for i in range(len(tasks) - 1): + s += tasks[i] < tasks[i + 1] # compute and print session schedules solvers.mip.solve(s) diff --git a/p500_activities.csv b/p500_activities.csv new file mode 100644 index 0000000..aadb684 --- /dev/null +++ b/p500_activities.csv @@ -0,0 +1,64 @@ +group,activity,type,duration +1,BCS,assessment,26 +2,BM,assessment,25 +3,BSAC,assessment,26 +4,BSAC,assessment,26 +5,BSAC,assessment,22 +6,BSAC,assessment,11 +7,DS,assessment,10 +8,ML,assessment,21 +9,MOT,assessment,11 +10,MOT,assessment,18 +11,NB,assessment,32 +12,OC,assessment,15 +13,OOO,assessment,8 +14,PC,assessment,17 +15,RE,assessment,20 +16,RE,assessment,50 +17,SART,assessment,8 +18,SMC,assessment,25 +19,SMC,assessment,22 +20,SOS,assessment,7 +21,SRM,assessment,35 +22,SRT,assessment,8 +23,SS,assessment,10 +24,TH,assessment,16 +25,TH,assessment,10 +26,TH,assessment,15 +27,TOVA,assessment,10 +28,UFOV,assessment,40 +29,WO,assessment,15 +30,WO,assessment,15 +31,WO,assessment,15 +32,acs,survey,3.5 +33,adc,survey,2 +34,aiss,survey,3 +35,arces,survey,2 +36,asrs,survey,1 +37,avgp,survey,3 +38,bfi2,survey,6 +39,bis11,survey,3.5 +40,bisbas,survey,4 +41,cfq,survey,4 +42,cfs,survey,2 +43,ehi-sf,survey,1 +44,erq,survey,2.5 +45,grit,survey,1 +46,iam,survey,1 +47,i-panas-sf,survey,2 +48,ipaq-sf,survey,3 +49,maas,survey,2.5 +50,mfs,survey,2 +51,mindset,survey,1 +52,mmi,survey,11 +53,mmi-sf,survey,3.5 +54,mw,survey,1.5 +55,mwq,survey,0.5 +56,ncs-6,survey,1 +57,psqi,survey,3 +58,rei,survey,4.5 +59,sss,survey,0.5 +60,upps-sf,survey,3 +61,webexec,survey,1 +62,who5,survey,1 +63,xcit-typing,survey,3 diff --git a/python/20200221_experiment_scheduling.py b/python/20200221_experiment_scheduling.py index 9beec24..63d7f36 100644 --- a/python/20200221_experiment_scheduling.py +++ b/python/20200221_experiment_scheduling.py @@ -8,7 +8,7 @@ # # Note: Use the following command to install dependencies: `pip install pyschedule` -#%% +# %% from math import ceil from pyschedule import Scenario, plotters, alt @@ -85,13 +85,14 @@ # 1. define the study s = Scenario('Prolific500', horizon=session_duration) # 2. sessions -sessions = s.Resources('Session', num = n_sessions) +sessions = s.Resources('Session', num=n_sessions) def _duration(questions): t = ceil(questions * duration_per_question) return t + # 3. games games = s.Tasks('Game',length=game_duration, num=n_sessions, is_group=False, delay_cost=1) games += alt(sessions) @@ -99,7 +100,7 @@ # 3. questionnaires for q in n_questions.keys(): n = n_questions.get(q, 0) - task = s.Task(q, length= _duration(n), delay_cost=1) + task = s.Task(q, length=_duration(n), delay_cost=1) if q in prestudy_tasks: task += sessions[0] # first session @@ -130,12 +131,65 @@ plot(s, fig_size=(50,5)) #%% +from pyschedule import Scenario, plotters, alt +from pyschedule.solvers.mip import solve +from pyschedule.plotters.matplotlib import plot + +import pandas as pd +from math import ceil + + +# load the study design data +activities = pd.read_csv('p500_activities.csv') +activities['activity'] = activities.apply( + lambda r: + r['activity'] + '_g' + str(r['group']) if r['type'] == 'assessment' else r['activity'], axis=1) + + +# 1. define the study +n_sessions = 10 +session_duration = 60 + +# OR infer session duration from data +# session_duration = ceil(activities['duration'].sum() / n_sessions) + +scenario = Scenario('p500_activities', horizon=session_duration) + +# 2. define the sessions +sessions = scenario.Resources('Bucket', num=n_sessions) + +# 3. define the tasks +for _, _, activity, activity_type, duration in activities.itertuples(): + # fixes for the pyschedule resolver to work + duration = ceil(duration) + activity = activity.replace('-', '_') + + # create the task + task = scenario.Task(activity, length=duration, delay_cost=1) + + # naive constraint (all buckets) + task += alt(sessions) + +# 4. solve resource allocation +solve(scenario) + +# 5. print last computed solution +print(scenario.solution()) + +# 6. pot gantt +plot(scenario, fig_size=(50, 10)) + +#%% # MPILX Scheduling from pyschedule import Scenario, solvers, plotters, alt # experiment duration for each subject in minutes study_duration = 12 * 24 * 60 # days * hours * minutes n_subjects = 2 + + + + task_durations = { 'pretest_presurvey': 30, 'pretest_DWI': 15, @@ -167,8 +221,8 @@ task += alt(subject) tasks.append(task) -for i in range(len(tasks)-1): - s += tasks[i] < tasks[i+1] +for i in range(len(tasks) - 1): + s += tasks[i] < tasks[i + 1] # compute and print session schedules solvers.mip.solve(s) diff --git a/python/p500_activities.csv b/python/p500_activities.csv new file mode 100644 index 0000000..aadb684 --- /dev/null +++ b/python/p500_activities.csv @@ -0,0 +1,64 @@ +group,activity,type,duration +1,BCS,assessment,26 +2,BM,assessment,25 +3,BSAC,assessment,26 +4,BSAC,assessment,26 +5,BSAC,assessment,22 +6,BSAC,assessment,11 +7,DS,assessment,10 +8,ML,assessment,21 +9,MOT,assessment,11 +10,MOT,assessment,18 +11,NB,assessment,32 +12,OC,assessment,15 +13,OOO,assessment,8 +14,PC,assessment,17 +15,RE,assessment,20 +16,RE,assessment,50 +17,SART,assessment,8 +18,SMC,assessment,25 +19,SMC,assessment,22 +20,SOS,assessment,7 +21,SRM,assessment,35 +22,SRT,assessment,8 +23,SS,assessment,10 +24,TH,assessment,16 +25,TH,assessment,10 +26,TH,assessment,15 +27,TOVA,assessment,10 +28,UFOV,assessment,40 +29,WO,assessment,15 +30,WO,assessment,15 +31,WO,assessment,15 +32,acs,survey,3.5 +33,adc,survey,2 +34,aiss,survey,3 +35,arces,survey,2 +36,asrs,survey,1 +37,avgp,survey,3 +38,bfi2,survey,6 +39,bis11,survey,3.5 +40,bisbas,survey,4 +41,cfq,survey,4 +42,cfs,survey,2 +43,ehi-sf,survey,1 +44,erq,survey,2.5 +45,grit,survey,1 +46,iam,survey,1 +47,i-panas-sf,survey,2 +48,ipaq-sf,survey,3 +49,maas,survey,2.5 +50,mfs,survey,2 +51,mindset,survey,1 +52,mmi,survey,11 +53,mmi-sf,survey,3.5 +54,mw,survey,1.5 +55,mwq,survey,0.5 +56,ncs-6,survey,1 +57,psqi,survey,3 +58,rei,survey,4.5 +59,sss,survey,0.5 +60,upps-sf,survey,3 +61,webexec,survey,1 +62,who5,survey,1 +63,xcit-typing,survey,3 diff --git a/p500_activities.csv b/p500_activities.csv new file mode 100644 index 0000000..aadb684 --- /dev/null +++ b/p500_activities.csv @@ -0,0 +1,64 @@ +group,activity,type,duration +1,BCS,assessment,26 +2,BM,assessment,25 +3,BSAC,assessment,26 +4,BSAC,assessment,26 +5,BSAC,assessment,22 +6,BSAC,assessment,11 +7,DS,assessment,10 +8,ML,assessment,21 +9,MOT,assessment,11 +10,MOT,assessment,18 +11,NB,assessment,32 +12,OC,assessment,15 +13,OOO,assessment,8 +14,PC,assessment,17 +15,RE,assessment,20 +16,RE,assessment,50 +17,SART,assessment,8 +18,SMC,assessment,25 +19,SMC,assessment,22 +20,SOS,assessment,7 +21,SRM,assessment,35 +22,SRT,assessment,8 +23,SS,assessment,10 +24,TH,assessment,16 +25,TH,assessment,10 +26,TH,assessment,15 +27,TOVA,assessment,10 +28,UFOV,assessment,40 +29,WO,assessment,15 +30,WO,assessment,15 +31,WO,assessment,15 +32,acs,survey,3.5 +33,adc,survey,2 +34,aiss,survey,3 +35,arces,survey,2 +36,asrs,survey,1 +37,avgp,survey,3 +38,bfi2,survey,6 +39,bis11,survey,3.5 +40,bisbas,survey,4 +41,cfq,survey,4 +42,cfs,survey,2 +43,ehi-sf,survey,1 +44,erq,survey,2.5 +45,grit,survey,1 +46,iam,survey,1 +47,i-panas-sf,survey,2 +48,ipaq-sf,survey,3 +49,maas,survey,2.5 +50,mfs,survey,2 +51,mindset,survey,1 +52,mmi,survey,11 +53,mmi-sf,survey,3.5 +54,mw,survey,1.5 +55,mwq,survey,0.5 +56,ncs-6,survey,1 +57,psqi,survey,3 +58,rei,survey,4.5 +59,sss,survey,0.5 +60,upps-sf,survey,3 +61,webexec,survey,1 +62,who5,survey,1 +63,xcit-typing,survey,3 diff --git a/python/20200221_experiment_scheduling.py b/python/20200221_experiment_scheduling.py index 9beec24..63d7f36 100644 --- a/python/20200221_experiment_scheduling.py +++ b/python/20200221_experiment_scheduling.py @@ -8,7 +8,7 @@ # # Note: Use the following command to install dependencies: `pip install pyschedule` -#%% +# %% from math import ceil from pyschedule import Scenario, plotters, alt @@ -85,13 +85,14 @@ # 1. define the study s = Scenario('Prolific500', horizon=session_duration) # 2. sessions -sessions = s.Resources('Session', num = n_sessions) +sessions = s.Resources('Session', num=n_sessions) def _duration(questions): t = ceil(questions * duration_per_question) return t + # 3. games games = s.Tasks('Game',length=game_duration, num=n_sessions, is_group=False, delay_cost=1) games += alt(sessions) @@ -99,7 +100,7 @@ # 3. questionnaires for q in n_questions.keys(): n = n_questions.get(q, 0) - task = s.Task(q, length= _duration(n), delay_cost=1) + task = s.Task(q, length=_duration(n), delay_cost=1) if q in prestudy_tasks: task += sessions[0] # first session @@ -130,12 +131,65 @@ plot(s, fig_size=(50,5)) #%% +from pyschedule import Scenario, plotters, alt +from pyschedule.solvers.mip import solve +from pyschedule.plotters.matplotlib import plot + +import pandas as pd +from math import ceil + + +# load the study design data +activities = pd.read_csv('p500_activities.csv') +activities['activity'] = activities.apply( + lambda r: + r['activity'] + '_g' + str(r['group']) if r['type'] == 'assessment' else r['activity'], axis=1) + + +# 1. define the study +n_sessions = 10 +session_duration = 60 + +# OR infer session duration from data +# session_duration = ceil(activities['duration'].sum() / n_sessions) + +scenario = Scenario('p500_activities', horizon=session_duration) + +# 2. define the sessions +sessions = scenario.Resources('Bucket', num=n_sessions) + +# 3. define the tasks +for _, _, activity, activity_type, duration in activities.itertuples(): + # fixes for the pyschedule resolver to work + duration = ceil(duration) + activity = activity.replace('-', '_') + + # create the task + task = scenario.Task(activity, length=duration, delay_cost=1) + + # naive constraint (all buckets) + task += alt(sessions) + +# 4. solve resource allocation +solve(scenario) + +# 5. print last computed solution +print(scenario.solution()) + +# 6. pot gantt +plot(scenario, fig_size=(50, 10)) + +#%% # MPILX Scheduling from pyschedule import Scenario, solvers, plotters, alt # experiment duration for each subject in minutes study_duration = 12 * 24 * 60 # days * hours * minutes n_subjects = 2 + + + + task_durations = { 'pretest_presurvey': 30, 'pretest_DWI': 15, @@ -167,8 +221,8 @@ task += alt(subject) tasks.append(task) -for i in range(len(tasks)-1): - s += tasks[i] < tasks[i+1] +for i in range(len(tasks) - 1): + s += tasks[i] < tasks[i + 1] # compute and print session schedules solvers.mip.solve(s) diff --git a/python/p500_activities.csv b/python/p500_activities.csv new file mode 100644 index 0000000..aadb684 --- /dev/null +++ b/python/p500_activities.csv @@ -0,0 +1,64 @@ +group,activity,type,duration +1,BCS,assessment,26 +2,BM,assessment,25 +3,BSAC,assessment,26 +4,BSAC,assessment,26 +5,BSAC,assessment,22 +6,BSAC,assessment,11 +7,DS,assessment,10 +8,ML,assessment,21 +9,MOT,assessment,11 +10,MOT,assessment,18 +11,NB,assessment,32 +12,OC,assessment,15 +13,OOO,assessment,8 +14,PC,assessment,17 +15,RE,assessment,20 +16,RE,assessment,50 +17,SART,assessment,8 +18,SMC,assessment,25 +19,SMC,assessment,22 +20,SOS,assessment,7 +21,SRM,assessment,35 +22,SRT,assessment,8 +23,SS,assessment,10 +24,TH,assessment,16 +25,TH,assessment,10 +26,TH,assessment,15 +27,TOVA,assessment,10 +28,UFOV,assessment,40 +29,WO,assessment,15 +30,WO,assessment,15 +31,WO,assessment,15 +32,acs,survey,3.5 +33,adc,survey,2 +34,aiss,survey,3 +35,arces,survey,2 +36,asrs,survey,1 +37,avgp,survey,3 +38,bfi2,survey,6 +39,bis11,survey,3.5 +40,bisbas,survey,4 +41,cfq,survey,4 +42,cfs,survey,2 +43,ehi-sf,survey,1 +44,erq,survey,2.5 +45,grit,survey,1 +46,iam,survey,1 +47,i-panas-sf,survey,2 +48,ipaq-sf,survey,3 +49,maas,survey,2.5 +50,mfs,survey,2 +51,mindset,survey,1 +52,mmi,survey,11 +53,mmi-sf,survey,3.5 +54,mw,survey,1.5 +55,mwq,survey,0.5 +56,ncs-6,survey,1 +57,psqi,survey,3 +58,rei,survey,4.5 +59,sss,survey,0.5 +60,upps-sf,survey,3 +61,webexec,survey,1 +62,who5,survey,1 +63,xcit-typing,survey,3 diff --git a/solution.csv b/solution.csv new file mode 100644 index 0000000..3c4fc6d --- /dev/null +++ b/solution.csv @@ -0,0 +1,64 @@ +activity,bucket,start,end +asrs,Bucket9,0,1 +ehi_sf,Bucket1,0,1 +grit,Bucket8,0,1 +iam,Bucket6,0,1 +mindset,Bucket5,0,1 +mwq,Bucket7,0,1 +ncs_6,Bucket2,0,1 +sss,Bucket3,0,1 +webexec,Bucket4,0,1 +who5,Bucket0,0,1 +adc,Bucket8,1,3 +aiss,Bucket4,1,4 +arces,Bucket5,1,3 +avgp,Bucket6,1,4 +cfs,Bucket3,1,3 +erq,Bucket2,1,4 +i_panas_sf,Bucket7,1,3 +mfs,Bucket1,1,3 +mw,Bucket0,1,3 +upps_sf,Bucket9,1,4 +bis11,Bucket5,3,7 +cfq,Bucket7,3,7 +ipaq_sf,Bucket0,3,6 +maas,Bucket3,3,6 +psqi,Bucket8,3,6 +xcit_typing,Bucket1,3,6 +bfi2,Bucket9,4,10 +bisbas,Bucket2,4,8 +mmi_sf,Bucket4,4,8 +rei,Bucket6,4,9 +DS_g7,Bucket1,6,16 +SOS_g20,Bucket8,6,13 +SRT_g22,Bucket0,6,14 +acs,Bucket3,6,10 +OOO_g13,Bucket7,7,15 +SS_g23,Bucket5,7,17 +SART_g17,Bucket2,8,16 +TOVA_g27,Bucket4,8,18 +TH_g25,Bucket6,9,19 +MOT_g9,Bucket3,10,21 +mmi,Bucket9,10,21 +OC_g12,Bucket8,13,28 +BSAC_g6,Bucket0,14,25 +MOT_g10,Bucket7,15,33 +PC_g14,Bucket2,16,33 +WO_g31,Bucket1,16,31 +TH_g24,Bucket5,17,33 +TH_g26,Bucket4,18,33 +WO_g30,Bucket6,19,34 +ML_g8,Bucket9,21,42 +WO_g29,Bucket3,21,36 +RE_g15,Bucket0,25,45 +BSAC_g5,Bucket8,28,50 +SMC_g18,Bucket1,31,56 +BCS_g1,Bucket2,33,59 +BSAC_g3,Bucket5,33,59 +BSAC_g4,Bucket4,33,59 +SMC_g19,Bucket7,33,55 +BM_g2,Bucket6,34,59 +RE_g16,Bucket3,36,86 +SRM_g21,Bucket9,42,77 +NB_g11,Bucket0,45,77 +UFOV_g28,Bucket8,50,90