Available starting from v 6.5
Requires an OPA licence. Please contact XIMES-Office for further information.
Summary
Searches for a good shift schedule for an entered staffing level.
Configuration
-
Input table structure
Parameter | Description | Values | Default Value | Default Factor |
---|---|---|---|---|
Demand | Demand for the specified hour per day of the week in the following table structure space separated From To Mon Tue Wed Thu Fri Sat Sun | |||
Demand minimum and maximum missing | ||||
Shift type | Shift type constraints in the following table structure space separated Name Earliest_Start Best_Start Latest_Start Min_Dur Best_Dur Max_Dur The allowed shift types influence the possible over- and/or understaffing by the solution: | |||
Shift type: On call duty missing | ||||
Shift type: Travel to work missing | ||||
Shift type: Day(s) of the week | ||||
Shift type: Unpaid breaks missing | ||||
Contraints | ||||
Further settings |
| |||
| Keep high cover to a minimum | 0,20 | ||
| Keep low cover to a minimum | 0,20 | ||
Interaction of | If a demand curve can not be covered without over- and/or understaffing, eg in this example where only 8-h-shifts are allowed either over- or understaffing has to result, then the relativ weights decide the outcome of the solution: | |||
| Keep number of types of shift types to a minimum Example: If the demand increases from 06:00 onwards every 15 min by 1 or 2 persons, it would be efficient to use many different shift types starting at 06:00, 06:15, 06:30, ... However, for some organisations the handling of many different shift types causes difficulties eg in adminstration, communication, leadership, ... . So they might be interested in accepting some over- and/or understaffing in exchange for fewer shift types. Eg starting only every 30 min like 06:00, 06:30, ... | 12,00 | ||
| Prefer same shift ends | 0,00 | ||
| Prefer shifts of length equal or greater to Often employees prefer eg longer shifts because they reduce time for commuting to work. This parameters help to increase the likelyhood of such shifts to be chosen for the solution. Other parameters ( | 1,00 | ||
| Preferred shift length in minutes | 240,00 | ||
| Keep number of average duties per week to a minimum per employee (FTE) | 200,00 | ||
bMaximumNumbeOfWorkingHours | Maximum number of working hours scheduled (checkbox) | |||
Weight for MaximumNumberOfWorkingHours | missing | |||
| Maximum number of working hours scheduled The constraint on the maximum number of working hours in normal shifts allows you to formulate an upper bound on your available capacity. The default value here is chosen especially high so that you don´t inflict your solution by accidentally activating the check-box. | 40,00 | ||
missing | ||||
b | missing (checkbox) | |||
| Maximum number of employees scheduled The constraint on the maximum number of duties in normal shifts aims at a similar direction as | 400,00 | ||
missing | ||||
| Weight for Minimum workforce requirements If in the Desktop Solution of OPA a minimum curve (eg because due to saftey at least always 3 employees per time interval have to be scheduled) has been entered, a weight can be attached so that the solution is not below this minimum demand per interval. | 4,00 | ||
| Weight for Maximum workforce requirements If in the Desktop Solution of OPA a maximum curve (eg because the unit has not more than 100 workplaces so even if 110 employes might be useful cannot dispatch more then 100) has been entered, a weight can be attached so that the solution is not below this minimum demand per interval. | 4,00 | ||
| Similarity between cover and operating hours curves If an understaffing has to be accepted (eg because the overall personnel capacity is 10% lower than the demand), then often it is better to have eg 10% less coverage at any time interval than more than enough in the morning and very few in the afternoon. By setting this weight a relatively even distribution of over-/understaffing in the resulting solution is furthered. | 5,00 | ||
| Average working hours per week | 48,00 | ||
| Optimum number of duties per week | 3,50 | ||
| Desired maximal duties per week | 6,00 | ||
| Preferred shift end in minutes | 15,00 | ||
| Consider desired maximum number of persons (checkbox) |
| 0,00 | |
| Desired maximum number of persons e.g. call center having limited number of workstations | 100,00 | ||
| Consider desired maximum number of shifts (checkbox) |
| 0,00 | |
| Desired maximum number of shifts | 10,00 | ||
| Consider desired maximum number of persons in on call shifts |
| 0,00 | |
| Desired maximum number of persons in on call shifts | 100,00 | ||
| Consider desired maximum number of on call shift (checkbox) |
| 0,00 | |
| Desired maximum number of on call shifts | 10,00 | ||
missing | Employees per team If a demand curve changes in steps of 1, 2, ... persons per interval, but an operation needs to work in teams of eg 4 persons each (meaning either 4 persons are dispatched at the same time or not because eg 3 are to few for a given task) then you can enter 4 here and the staffing levels in the solution will always be a multiple of 4, eg 4, 8, 12, ... Alternatively, you could modify the demand curve in advance so that it expresses the number of teams per interval (instead of persons per intervall). | |||
Algorithm |
|
| ||
StopAfterSeconds | 600 | |||
StopAfterSecondsNoImprovement | 15 | |||
JobGUID | SUPERUSER_COMPLEX | |||
JobDirectory | TIS\$System\OPA_SUPERUSER_COMPLEX |
Output table structure
CalculationStartTime | ||||||||||||||||||||||
CalculationEndTime | ||||||||||||||||||||||
ErrorCode | see error codes table below | |||||||||||||||||||||
LowCover | The deviation from cover to necessary demand (excluding on call duties) is calculated. Low Cover means that fewer persons than required are working. Related to operating hours (excluding on call duties) | |||||||||||||||||||||
HighCover | The deviation from cover to necessary demand (excluding on call duties) is calculated. High cover means that more persons than required are working. Related to operating hours (excluding on call duties) | |||||||||||||||||||||
NumberOfShifts | ||||||||||||||||||||||
AverageWorkingHours | ||||||||||||||||||||||
Solution |
|
Error Codes
Error | Error Code | Description |
---|---|---|
0 | Successfully executed | |
General (ErrorCodes bis 99) | ||
ERR_GeneralError | 1 | not further specified error (wird im Zwei onError goto:.. abgefangen) |
ERR_NoRequirements | 10 | No requirements specified |
ERR_NoShiftTypes | 11 | No ShiftTypes specified |
ERR_NoWeights | 12 | No Weights specified |
Requirements (ErrorCodes von 100-199) | ||
ERR_InvalidRequirementsArguments | 100 | Invalid Requirements: wrong number of arguments. 9 arguments are required |
ERR_InvalidRequirementDuty | 101 | Duties must be numeric! |
ERR_InvalidRequirements | 102 | Invalid Requirements: not further specified error |
ShiftTypes (ErrorCodes von 200-299) | ||
ERR_InvalidShiftTypeEarliestStartTime | 200 | Invalid earliest start time of a shift type |
ERR_InvalidShiftTypeLatestStartTime | 201 | Invalid latest start time of a shift type |
ERR_InvalidShiftTypeOptimalStartTime | 207 | Invalid latest start time of a shift type |
ERR_InvalidShiftTypeLength | 202 | Invalid length of a shift type |
ERR_InvalidShiftTypesArguments | 203 | Invalid ShiftTypes: wrong number of arguments. 5 arguments are required |
ERR_InvalidShiftTypeLengthDefinition | 204 | the minimum and maximum length of a shift type is not clearly defined |
ERR_AmbiguousShiftType | 205 | one shift type abbreviation is used more often than once |
ERR_InvalidShiftType | 206 | Invalid shift type: not further specified error |
ERR_InvalidUnfixedBreak | 208 | Invalid shifttype: |
ERR_InvalidNewComing | 209 | Invalid shift type: not further specified error |
ERR_InvalidPercentage | 210 | Invalid shift type: not further specified error |
ERR_InvalidColor | 211 | Invalid shift type: not further specified error |
ERR_InvalidOverlappingTime | 212 | Invalid shift type: Übergabezeit |
ERR_InvalidPercentageStandby | 213 | Invalid shift type: not further specified error |
ERR_InvalidReserveNecessary | 214 | Invalid shift type: not further specified error |
BreakTypes (ErrorCodes von 300-399) | ||
ERR_InvalidBreakTypeArgument | 300 | one of the passed arguments is invalid |
ERR_InvalidBreakDistance | 301 | max distance from start is smaller than min distance" |
ERR_InvalidBreakTypeArgNumber | 302 | wrong number of arguments. 6 args are required |
ERR_InvalidBreakType | 303 | not further specified error |
ERR_SpecifiedShiftTypeInvalid | 304 | the shift type specified in the break type doesn |
ERR_OverlappingBreakTypes | 306 | two break types that are assigned to one shift type are overlapping! |
ERR_InvalidNumberOfBreakTypes | 307 | maximal 3 PausenTypen pro SchichtType sind erlaubt! |
ERR_BreakTypeDoesNotFitInShifttype | 308 | maximal 3 PausenTypen pro SchichtType sind erlaubt! |
Weights (ErrorCodes von 400-499) | ||
ERR_InvalidWeights | 400 | invalid weight (muß positiv sein) |
ERR_InvalidNumberOfWeights | 401 | ungültige Anzahl von Gewichten => müssen 3 sein!! |
ERR_InvalidNumberOfOtherConstraints | 402 | ungültige Anzahl von Gewichten => müssen 3 sein!! |
ERR_InvalidOtherConstraints | 403 | |
StopAfterSeconds (ErrorCodes von 500-599) | ||
ERR_InvalidStopAfterSecondsTime | 500 | invalid stopAfterSecondsSpecification (must be positive!) |
Time (ErrorCodes von 600-699) | ||
ERR_InvalidNumberOfCharactersInTimeString | 600 | Zeitstring muß aus 5 Zeichen bestehen |
ERR_InvalidTimeCharacter | 601 | der Zeitstring darf nur aus Ziffern und ":" bestehen |
ERR_InvalidTimeString | 602 | ungültiger TimeString |
ERR_TimeMustBeLessThan24 | 603 | Zeit muß zwischen 00:00 und 23:59 sein |
ERR_MinutesInTimeCauseInvalidInterval | 604 | die Minuten im Zeitstring müssen durch 5 teilbar |
ERR_InvalidDayStartTime | 605 | Invalid day start time |
Solution (Eingabe) (ErrorCodes von 700-799) | ||
ERR_InvalidSolutionTime | 700 | Zeitstring muß aus 5 Zeichen bestehen |
ERR_InvalidSolutionDuty | 701 | Besetzungsstärken müssen eine Zahl sein |
ERR_InvalidSolutionArgs | ||
ERR_SolutionHasNoShiftType | 703 | die Input-Solution hat keinen Schichttyp, der passt!! |
ERR_InvalidSolutionUnfixedBreak | 704 | |
ERR_InvalidSolutionPercentage | 705 | |
ERR_InvalidSolutionNewComing | 706 | |
ERR_InvalidSolutionStandby | 707 | |
ERR_InvalidSolutionColor | 708 | |
ERR_InvalidSolution | 709 | |
ERR_InvalidSolutionShiftStatus | 710 | |
Plausibilität der LÖSUNG überprüfen (ErrorCodes ab 1000) | ||
ERR_InvalidShiftGenerated | 1000 | eine Schicht wurde erzeugt, die nicht zu den Spezifikationen des Schichttyps passt |
ERR_InvalidBreakGenerated | 1001 | mindestens eine erzeugte Pause liegt nicht innerhalb der Schicht |
ERR_UnfixedBreakGenerated | 1002 | mindestens eine nicht fixe Pause wurde erzeugt |
ERR_NotEnoughGeneratedBreaks | 1003 | es wurde nicht für jede Person eine Pause erzeugt! |
ERR_TooManyGeneratedBreaks | 1004 | es wurden Pausen für mehr Personen als am entsprechenden Wochentag anwesend sind erzeugt. |
ERR_InvalidNumberOfBreaks | 1005 | einer Person ist eine ungültige Anzahl von Pausen zugeteilt worden |
ERR_BreaksNotAllowed | 1006 | Bei der Generierung dürften keine Pausen erzeugt werden (Aufruf ohne Pause)" |
ERR_SameShiftabbreviation | 1007 | |
ERR_ShiftHasNoFittingShifttype | 1008 | |
ERR_OptimizeBreaks_TimePeriodToOptimize | 2000 | |
ERR_OptimizeBreaks_BreakLunchQty | 2001 | |
ERR_OptimizeBreaks_BreakType2Qty | 2002 | |
ERR_OptimizeBreaks_BreakLengthVar | 2003 | |
ERR_OptimizeBreaks_BreakLengthFix | 2004 | |
ERR_OptimizeBreaks_BreakPosVar | 2005 | |
ERR_OptimizeBreaks_BreakPosFix | 2006 | |
ERR_OptimizeBreaks_MissingBreakDefinitons | 2007 | |
ERR_OptimizeBreaks_MeetingsDefiniton | 2009 | |
ERR_OptimizeBreaks_MeetingsOutside | 2010 | |
ERR_OptimizeBreaks_IntervalTooSmall | 2011 | |
ERR_OptimizeBreaks_RuleBreaksWeights | 2012 | |
ERR_OptimizeBreaks_BreakDistance | 2008 | |
ERR_OptimizeBreaks_NoINIFile | 2050 | |
ERR_OptimizeBreaks_COMETNoInitalSolution | 2051 | |
ERR_OptimizeBreaks_COMETPROCESSTerminated | 2052 | |
ERR_OptimizeBreaks_COMETInternalError | 2053 | |
ERR_OptimizeBreaks_COMETNoSolution | 2054 | |
ERR_OptimizeBreaks_COMETUserRights | 2055 | |
ERR_OptimizeBreaks_COMETProcessStartInvalid | 2056 | |
ERR_OptimizeBreaks_NoBreakRules | 2500 |
Want to learn more?
Examples
Example: Shift generation
Situation | For a given demand, shift type constraints and optimization parameter set an optimal coverage is calculated. |
---|---|
Settings | Input table |
Result | |
Project File | - |
Troubleshooting
Nothing known up to now.