A Scheduling Problem

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):

FromToStaffing
0:001:005
1:002:004
2:003:004
3:004:004
4:005:004
5:006:003
6:007:002
7:008:002
8:009:002
9:0010:002
10:0011:002
11:0012:003
12:0013:003
13:0014:003
14:0015:003
15:0016:003
16:0017:004
17:0018:004
18:0019:005
19:0020:005
20:0021:006
21:0022:006
22:0023:006
23:000:006

One thought on “A Scheduling Problem”

  1. hadn’t seen drools planner (embarrassingly?), looks like a Great option, depending on how long it takes to get it running. One thing: the approach right now, is top-down. Could do bottom-up: specify a bunch of time slots and have the volunteers choose the ones they want, and then just make sure that they don’t like double-book themselves). Bottom-up can be nice bc it let’s the individual worry about their constraints (they may have more constraints than they are willing or able to report), but of course it could be difficult for them from a usability standpoint to keep their constraints in mind while trying to choose. Although it seems to me that it might be a nice way to do things to like show the whole schedule of empty blocks and then if they hover over a block they are considering volunteering for, it could somewhere display the other things happening at that time. (this would also be Great for http://svportal.rubyforge.org/ )

Comments are closed.