This program generates a cook schedule given a list of date preferences for each cook. In particular, it uses linear programming to select a schedule minimizing the average cook preference.
> python cook_scheduler.py --help
usage: cook_scheduler.py [-h] [-e [EXCLUDE [EXCLUDE ...]]]
[-c [COMMUNITY [COMMUNITY ...]]] [--csv CSV]
[--ical ICAL] [--preference_power PREFERENCE_POWER]
[--begin_column BEGIN_COLUMN]
[--end_column END_COLUMN]
start end preferences
generate an cook cycle assignment from ranked date preferences
positional arguments:
start date to start the cook cycle on (inclusive)
end date to end the cook cycle on (inclusive)
preferences path to preferences csv file
optional arguments:
-h, --help show this help message and exit
-e [EXCLUDE [EXCLUDE ...]], --exclude [EXCLUDE [EXCLUDE ...]]
dates to exclude from cook cycle
-c [COMMUNITY [COMMUNITY ...]], --community [COMMUNITY [COMMUNITY ...]]
dates requiring two cooks
--csv CSV file to save schedule to
--ical ICAL file to save ical to
--preference_power PREFERENCE_POWER
power to raise the cost of preference rankings to
(default=1)
--begin_column BEGIN_COLUMN
index of the first preference column in the csv
(default=2)
--end_column END_COLUMN
index of the last preference column in the csv
(default=7)
The repository contains sample preferences in the data
directory. For example, to generate an optimal cook schedule for July and save it to output.csv
and save an iCalendar to calendar.ics
:
> python cook_scheduler.py 2016-07-31 2016-08-20 data/july_2016.csv -c 2016-08-17 --exclude 2016-08-03 2016-08-10 --csv output.csv --ical calendar.ics
WARNING:root:Sony selected excluded dates: ['21-08-2016']
WARNING:root:There 20 slots but only 18 cooks
Status: Optimal
Average preference: 1.88888888889
WARNING:root:Unassigned dates: ['31-07-2016', '01-08-2016']
name preference
date
2016-07-31 None NaN
2016-08-01 None NaN
2016-08-02 Joey Brink 3.0
2016-08-04 Laura 3.0
2016-08-05 Sarah 3.0
2016-08-06 Sophia 1.0
2016-08-07 Kara 2.0
2016-08-08 Noah 1.0
2016-08-09 geoff 1.0
2016-08-11 Kevin Casto 1.0
2016-08-12 Kayla 1.0
2016-08-13 Will 2.0
2016-08-14 Asa 2.0
2016-08-15 Eric 1.0
2016-08-16 Chris q 4.0
2016-08-17 Jeff 2.0
2016-08-17 Michael 3.0
2016-08-18 Magnolia 1.0
2016-08-19 David Nekimken 1.0
2016-08-20 Sony 2.0
- add wildcard preferences for cooks who have insufficient preferences
- allow weighting of cook preferences this cycle by assignments last cycle