- Cover all days, hours and units for which a demand forecast is provided.
- Minimize total costs given by regular labor costs and overtime bonus. (Calculation of the overtime bonus: If employees work more than more than 40 hours per week, they receive the overtime bonus (on top of their regular compensation) for these additional hours.)
- Fulfill the predicted demand.
- Meet labor regulations in that no employee works more than 10 hours per day and 50 hours per week.
- Only assign employees to a given period if they are available for that period.
- Only assign employees to a given unit if they possess the required skill for that unit (unit = skill). E.g. an employee must have the skill “kitchen” to work in unit “kitchen”.
- Only assign an employee to one unit at the same time. E.g. an employee cannot work in the kitchen and at the bar in parallel.
- The roster is given by set of key value pairs (i.e. a Python dictionary).
- Its key is a tuple that identifies each element of the roster by the day, hour and unit, e.g. (day, hour, unit)
- Its value is a list of employees assigned to that particular element of the roster, e.g. [employeeID1, employeeID2, ...]
- E.g. {(day, hour, unit): [employeeID1, employeeID2, ...], ...}.