Every year I volunteer at SUUSI, and this year is no different. One of the changes this year is that I’m responsible for the scheduling of volunteers for the Teen Dorm. Usually we do this by hand but it is an incredibly tedious process that tends to result in extremely suboptimal results.
In hoping to come up with a better solution, I’m approaching it as a systems of constraints which can be solved (or approximately solved) using the magic of computing. An ideal schedule would have the following attributes (note “must” and “should”):
- Each volunteer’s activity schedules must be worked around (these are known in advance).
- Each volunteer must have a consistent (beginning 24 hours apart) contiguous 9 hours for sleep which may only preclude one mealtime.
- Each shift should be at least four hours in length.
- Each shift should be no longer than eight hours in length.
- Multiple shifts in one 24 hour period should be separated by at least three hours.
- A part time volunteer must work 20 hours during the week.
- A full time volunteer must work 40 hours during the week.
- At all times one person on duty must have at least two years of experience.
Taking those constraints into account I need to fill a schedule that is primarily defined by needed coverage at a particular hour of the day. I’m looking at using Drools Planner to do this. Is there anything else I should be looking at?
Coverage needed will look something like this (extended to a full week):
From | To | Staffing |
---|---|---|
0:00 | 1:00 | 5 |
1:00 | 2:00 | 4 |
2:00 | 3:00 | 4 |
3:00 | 4:00 | 4 |
4:00 | 5:00 | 4 |
5:00 | 6:00 | 3 |
6:00 | 7:00 | 2 |
7:00 | 8:00 | 2 |
8:00 | 9:00 | 2 |
9:00 | 10:00 | 2 |
10:00 | 11:00 | 2 |
11:00 | 12:00 | 3 |
12:00 | 13:00 | 3 |
13:00 | 14:00 | 3 |
14:00 | 15:00 | 3 |
15:00 | 16:00 | 3 |
16:00 | 17:00 | 4 |
17:00 | 18:00 | 4 |
18:00 | 19:00 | 5 |
19:00 | 20:00 | 5 |
20:00 | 21:00 | 6 |
21:00 | 22:00 | 6 |
22:00 | 23:00 | 6 |
23:00 | 0:00 | 6 |