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




MinimizeHighCover

Keep high cover to a minimum



0,20

MinimizeLowCover

Keep low cover to a minimum



0,20

Interaction of
MinimizeHighCover and MinimizeLowCover
with the demand curve

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:




MinimizeNumberOfShifts

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

DifferenShiftEnds

Prefer same shift ends



0,00

MinimumShiftLengths

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 (MinimizesNumberOfDutiesPerWeek, MinimizeNumberOfShifts)might work to the same effect.



1,00

PreferredShiftLengthInMinutes

Preferred shift length in minutes


240,00


MinimizesNumberOfDutiesPerWeek

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




MaximumNumbeOfWorkingHours

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.
Eg, if you have no more than 2.500 employees that can each work 40 per week, this constraint can keep the number of work hours a solution uses to max. 100.000.

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




bMaximumNumberOfEmployees

missing (checkbox)




MaximumNumberOfEmployees

Maximum number of employees scheduled

The constraint on the maximum number of duties in normal shifts aims at a similar direction as MinimizesNumberOfDutiesPerWeek, but allows you to formulate an upper bound.
Eg, if you have no more than 20 employees that can each work 5 duties per week, this constraint can keep the number of duties a solution uses to max. 100.



400,00

missing




MinimumDemandOfStaff 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

MaximumDemandOfStaff missing

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

SimilaritWithDemandCurve missing

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

AverageWorkingHoursPerWeek

Average working hours per week


48,00


OptimumNumberOfDutiesPerWeek

Optimum number of duties per week


3,50


DesiredMaximalDutiesPerWeek

Desired maximal duties per week


6,00


PreferredShiftEndInMinutes

Preferred shift end in minutes


15,00


bMaximumNumberOfPersons

Consider desired maximum number of persons (checkbox)

  • 0-no
  • 1-yes

0,00


MaximumNumberOfPersons

Desired maximum number of persons

e.g. call center having limited number of workstations


100,00


bMaximumNumberOfShifts

Consider desired maximum number of shifts (checkbox)

  • 0-no
  • 1-yes

0,00


MaximumNumberOfShifts

Desired maximum number of shifts


10,00


bMaximumNumberOfPersonsOnCallShifts

Consider desired maximum number of persons in on call shifts

  • 0-no
  • 1-yes

0,00


MaximumNumberOfPersonsOnCallShifts

Desired maximum number of persons in on call shifts



100,00


bMaximumNumberOnCallShifts

Consider desired maximum number of on call shift (checkbox)

  • 0-no
  • 1-yes

0,00


MaximumNumberOnCallShifts

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
  • For Check Cover select MINCOSTMAXFLOW (considers only demand and shift types, weights for over-/understaffing but no other constraints) (warning) Day Start Time should be "02:00" instead of "05:00" in order fix the Monday problem
  • For Find New Solution or Improve Solution select TABUSEARCH

  • TABUSEARCH
  • MINCOSTMAXFLOW



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

Shift ID

Start

Length

Mon

Tue

Wed

Thu

Fri

Sat

Sun

Shift type ID + Number

Time

hh:mm

#

#

#

#

#

#

#


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.


Related topics