# Distributing a shift evenly amongst employees

For employee scheduling, I am writing a MIP. I am trying to distribute the shifts amongst the employees with the same skills as even as possible.

e.g.

=============================

Three employees with the same skill: Bob, Michel, Terry

Bob payroll 10\$/hour; Michel payroll 15\$/hour; Terry payroll 20\$/hour Prefered Assigning: Monday: Bob -> 9 to 5; Tuesday: Michel -> 9 to 5; Wednesday: Terry -> 9 to 5 ============================= In my MIP it is possible to count the hours that an employee is working. Is it possible to write a constraint in order to evenly distribute the shifts? Does this idea even make sense if my objective function is to target the minimization of costs or prioritization of some employees? I am not sure that in this case, multi-objective optimization would work properly. • Could you explain your employee scheduling problem? e.g. what does 'preferred assigning' mean? What shifts need to be evenly distributed and what do you mean by 'evenly distributed'? Jun 9, 2019 at 15:40 • @AngelaRichardson It is similar to the nurse scheduling problem. By preferred assigning, is meant that instead of giving all three shifts to bob (if available) since his payroll is the lowest, to distribute these shifts to Bob, Michel and Terry (=evenly). Jun 9, 2019 at 15:49 • or.stackexchange.com Jun 9, 2019 at 15:50 ## 1 Answer Assuming your original objective is to minimize payroll costs, you could create constraints limiting the maximum discrepancy in hours between the most and least used workers, or you could create constraints limiting the absolute difference between the hours of any worker and the average hours per worker overall (total hours divided by number of workers). If neither of those alternatives appeals to you, you could combine some measure of inequality with the cost function, but that would require you to quantify the trade-off (e.g., getting one hour closer to equality in workloads is worth $$K$$ dollars in increased staffing cost). • How could such constraints look like though? I would probably know how to implement the two constraints recommended from you as an objective function but not as constraints. Could you perhaps give an example? For example, the two values (most and least used worker) should be smaller than which value? Jun 20, 2019 at 17:19 • Here's how to do the first option. Create two new variables$H_{max}$,$H_{min}$representing maximum and minimum hours of any worker. For each worker$j$, add the constraints$H_{min} \le h_j \le H_{max}$, where$h_j$is the variable representing hours worked by$j$. Finally, add a constraint$H_{max} - H_{min} \le M$where$M\$ is largest difference in hours that you are willing to tolerate. Jun 21, 2019 at 18:39
• Yess. This seems right :) Jul 2, 2019 at 15:00