I'm writing a application that will decide the scheduling plan for a few dozen people according to their occupation (role) and availability (week day and hours).
I've used a excel spreadsheet to help solve this problem, I was then able to devise a logical and decision based approach to assign these people to shifts and roles, following a few set of constraints.
When I was about to write this into code, I was suggested to try Microsoft Solver. I've read a while about it's capabilities but I'm unfamiliar with some terminology encountered.
Well, suffice it to say that I never used Microsoft Solver and I do not even know if the following scheduling problem can be solved with it or not. So far I've found very few examples about scheduling problems and even those are simple by comparison.
So my question is, can Microsoft Solver solve the following scheduling problem?
Assign people to shifts for an entire week based on their availability and what role they are qualified to fill following a few set of constraints and goals.
- Weeks are composed of seven days.
- Days are composed of shifts (dawn, morning, afternoon and night sifts are the most common). Shifts are specified in this way:
- Dawn: 00:00 AM -> 08:00 AM
- Morning: 08:00 AM -> 12:00 AM
- Afternoon: 01:00 PM -> 07:00 PM
- Night: 07:00 PM -> 00:00 AM
- There are some weekdays which might not have any shifts while others can have one, two or more.
- Each person has a weekly availability following the same week day / shift structure.
- Example: Peter is only available on Monday night's (Monday 07:00 PM -> 00:00 AM).
- Sometimes people have two or more days on which they are available and would like their schedule to rotate through these.
- Example: Kyle is only available on Wednesday night's and Thursday morning's, also he would like to rotate them. One week Wednesday another week Thursday.
- Each person has a set of roles he or she can fill (one or more).
- Each shift must have at least: two drivers, one doctor and three medics.
- Every person with availability must be assigned to a shift, it does not matter if one shift has three drivers while another only has two.
- A person can only fill one role per shift.
- A person can only be assigned to a shift if he or she has availability to perform it.
- A person can only be assigned to a role if he or she is qualified to perform it.
- A person can only be assigned to one shift per week, unless when the organization is understaffed (by understaffed means we need more people to fill shifts to meet goal #1). If thats the case one additional condition applies when assigning people to shifts after the first one.
- A person assigned to a second shift in the same week must be the person that hasn't performed a second shift for the longest time, while still meeting the person's availability and role capability.
Moderator note: Could not find the appropriate tags.