A workforce scheduling problem MIP formulation Decision variable $x_{ij} = 1$ if shift $i$ is assigned to worker $j$, $0$ otherwise.
Objective is a sum of multiple objectives
- Maximize demand coverage
- Minimize cost
- Staggered meal breaks (penalize when meal breaks overlap for two shifts within an overlapping time period)
- Maximize worker preferences ...
Subject to
- One shift per day
- Worker min/max daily and weekly hours
- Worker max work days ...
For this MIP, we have a set of shifts generated by a heuristic considering the min and max shift length config from the customers. There are multiple ways to come up with this initial set of assignable shifts
- All possible permutations of shifts wihin min and max shift lengths and demand lengths. For example, for a set of 30 min demands starting at 9am and ending at 5pm and min shift = 2hrs and max shift = 8 hours we generate shifts like 9am-11am, 9:30am-11:30am, ..., 9am-5pm.
- Make the shift generation smarter by generating shifts of varying sizes and shapes for peak period but for lul periods generate only essential size and shapes (only 8 hrs shifts with a demand period deemed as 1 hr demand)
- Make the shift generation even smarter by incorporating worker availability and qualification -- generate less flexible shifts for the workers that are avaiable all time and for the roles that don't have varying demand
We have done #2 and #3 already but still see a huge number of shifts sent over to the optimization solver. Are there any better techniques that we can use to reduce it further. I know column generation can be a way to combine shift generation + assignment but if we want to keep the two separate, are there any ways to generate only an essential set of shifts?