-
Notifications
You must be signed in to change notification settings - Fork 0
Home
This scheduler is based on ILP (integer linear programming), allows for the optimal distribution of shifts among workers, and guarantees an optimal solution (within constraints). It allows for complete control of the process and has adaptable constraints and objectives, as well as a simple UI to allow for fast, replicable results.
The scheduler follows a simple structure:
- each week has days,
- every day has time slots, and
- every time slot has shifts.
The time slots specifically are an abstraction to allow for multiple concurrent shifts. To illustrate this, let's think of a hospital where we need a schedule. The hospital has three major working blocks each day (namely: early, late, and night shifts). In every working block, both the ER and OR need to be staffed. I.e. the working blocks are represented by time slots, while the shifts could account for different workplaces or differing departments when sharing one worker pool.
There are a couple of parameters one can access in the scheduler. Like other ILP problems, this one requires a target function and constraints. All parameters for the problem can be accessed via the checkbox menu.
This constraint only permits the scheduling of employees for the shifts their qualifications match. It is also the case for hybrid shifts. Both employees and shifts can require mixed qualifications. For example, employee "Jeff" is both doctor and OR-qualified. That would qualify him for the OR Shift, which requires one doctor with OR qualifications, one anesthesiologist, and one surgeon. Employee "Hannah" on the other hand, is both a doctor, OR-qualified, and a surgeon and is, therefore, eligible for two of the positions in that shift.
Expense Minimizing is used to set the target function to minimize the objective value of staffing costs. Staffing costs are just the sum of the product of every employee's hourly wage and the length of the shifts in which they work.
This constraint is straightforward and limits the working hours per week of every employee.
This constraint limits the use of every employee to 1 time per day. It should nearly always be turned on, unless you know what you are doing, as this might lead to workers' rights violations (in Europe, at least).
To allow for approximate fairness between each employee, we introduced a strain value associated with each shift. Strain incentivizes the scheduler to distribute shifts more equally within the given constraints. The target function is, similar to the Expense Minimizing objective, just a sum of the sum of strain in the shifts they worked for every employee.
If your model is solvable within the constraints (you will receive an error message if it isn't), a solution tree will appear. This solution tree consists of a list of the weeks, days, time slots, and shifts. If you expand it fully, you will then be able to see the names of the employees designated for a specific shift. Alternatively, you can use the box to input an employee's name and filter their working days and shifts.