Docs
  • Solver
  • Models
    • Field Service Routing
    • Employee Shift Scheduling
    • Pick-up and Delivery Routing
  • Platform
Try models
  • Employee Shift Scheduling
  • Employee resource constraints
  • Employee activation

Employee Shift Scheduling

    • Introduction
    • Getting started: Hello world
    • User guide
      • Terms
      • Use case guide
      • Planning AI concepts
      • Constraints
      • Understanding the API
      • Demo datasets
      • Planning window
      • Time zones and Daylight Saving Time (DST)
      • Tags and tag types
      • Validation
      • Metrics and optimization goals
      • Score analysis
    • Employee resource constraints
      • Employee availability
      • Employee contracts
      • Pairing employees
      • Shift travel and locations
      • Employee activation
      • Work limits
        • Minutes worked per period
        • Minutes worked in a rolling window
        • Minutes logged per period
        • Days worked per period
        • Days worked in a rolling window
        • Consecutive days worked
        • Shifts worked per period
        • Shifts worked in a rolling window
        • Weekend minutes worked per period
        • Weekends worked per period
        • Weekends worked in a rolling window
        • Consecutive weekends worked
      • Time off
        • Days off per period
        • Consecutive days off per period
        • Consecutive days off in a rolling window
        • Consecutive minutes off in a rolling window
        • Shifts to avoid close to day off requests
      • Shift rotations and patterns
        • Shift rotations
        • Single day shift sequence patterns
        • Minimize gaps between shifts
        • Multi-day shift sequence patterns
        • Daily shift pairings
        • Overlapping shifts
        • Shift start times differences
        • Minutes between shifts
      • Shift type diversity
        • Shift types worked per period
        • Unique tags per period
      • Fairness
        • Balance time worked
        • Balance shift count
    • Shift service constraints
      • Alternative shifts
      • Cost management
      • Demand-based scheduling
      • Mandatory and optional shifts
      • Shift assignments
      • Skills and risk factors
    • Recommendations
    • Real-time planning
    • Real-time planning (preview)
    • Scenarios
      • Configuring labor law compliance
    • Changelog
    • Upgrade to the latest version
    • Feature requests

Employee activation

When scheduling employees, particularly when dealing with external contractors, temporary staff, or managing labor costs, it’s important to optimize which employees are activated and how many shifts they work. For instance, to make sure full-time employees are assigned to shifts before adding contractors.

Employee activation constraints help you:

  • Minimize the number of employees needed to staff a schedule.

  • Reduce costs when using contractors with fixed activation fees.

  • Maintain optimal ratios between different employee groups.

  • Maximize the utilization of activated employees.

This guide explains how to manage employee activation with the following constraints:

  • Minimize activated employees

  • Maximize activated employee saturation

  • Keep employee activation ratio

1. Minimize activated employees

Employee cost groups can define an activation cost that represents the fixed cost incurred when an employee is assigned to at least one shift. The goal of this constraint is to minimize the total activation cost across all employees. The constraint adds a soft penalty per employee based on the number of shifts they are assigned.

This constraint is useful for:

  • Estimating the minimum number of employees needed to staff a schedule.

  • Minimizing costs when using external contractors or temporary staff who have fixed activation fees.

  • Reducing overhead costs associated with activating employees.

1.1. Configuration

Define employee cost groups with activation costs on the top level of the input dataset:

{
  "employeeCostGroups": [
    {
      "id": "external-contractors",
      "employeeActivationCost": 200,
      "activationShiftInclude": "MANDATORY_SHIFTS"
    },
    {
      "id": "regular-employees",
      "employeeActivationCost": 100,
      "activationShiftInclude": "MANDATORY_AND_OPTIONAL_SHIFTS"
    }
  ]
}

Assign employees to cost groups:

{
  "employees": [
    {
      "id": "Ann",
      "costGroup": "external-contractors"
    },
    {
      "id": "Beth",
      "costGroup": "regular-employees"
    }
  ]
}

1.2. Activation shift include

The activationShiftInclude field determines which shift types count toward employee activation:

  • MANDATORY_SHIFTS: Only mandatory shift assignments trigger activation costs (default).

  • MANDATORY_AND_OPTIONAL_SHIFTS: Both mandatory and optional shift assignments trigger activation costs.

By default, every constraint has a weight of 1, meaning that all constraints are equally important.

Learn about changing the weight of this constraint:

Use the constraint configuration’s minimizeActivatedEmployeesWeight attribute to update the weight of the constraint. 0 disables the constraint. A constraint weight of 10, means the constraint is 10 times more important than a constraint with a weight of 1.

"overrides": { "minimizeActivatedEmployeesWeight": 10 }

2. Maximize activated employee saturation

This constraint rewards assigning more shifts to activated employee, encouraging their fuller utilization.

The constraint adds a soft reward proportional to the number of shifts assigned to each activated employee. This creates a strong incentive to consolidate shifts among fewer employees rather than spreading them thinly across many employees.

The constraint automatically applies to all employees with a cost group that has an employeeActivationCost defined. The constraint considers shifts based on the activationShiftInclude setting of each cost group.

By default, every constraint has a weight of 1, meaning that all constraints are equally important.

Learn about changing the weight of this constraint:

Use the constraint configuration’s maximizeActivatedEmployeeSaturationWeight attribute to update the weight of the constraint. 0 disables the constraint. A constraint weight of 10, means the constraint is 10 times more important than a constraint with a weight of 1.

"overrides": { "maximizeActivatedEmployeeSaturationWeight": 10 }

3. Keep employee activation ratio

Employee cost groups can define an activation ratio weight that helps maintain desired proportions of activated employees between different groups.

This constraint aims to maintain the specified ratio of activated employees across cost groups. For example, if "regular-employees" has a ratio weight of 3 and "external-contractors" has a ratio weight of 1, the solver will try to activate three regular employees for every external contractor.

This constraint is useful for:

  • Maintaining a healthy mix of permanent and temporary staff.

  • Ensuring core employees form the majority of the workforce.

  • Meeting contractual or policy requirements about staff composition.

  • Balancing experience levels by maintaining ratios between senior and junior staff.

3.1. Configuration

Define employee cost groups with activation ratio weights:

{
  "employeeCostGroups": [
    {
      "id": "regular-employees",
      "employeeActivationRatioWeight": 3,
      "activationShiftInclude": "MANDATORY_SHIFTS"
    },
    {
      "id": "external-contractors",
      "employeeActivationRatioWeight": 1,
      "activationShiftInclude": "MANDATORY_SHIFTS"
    }
  ]
}

In this example, the solver will attempt to maintain a 3:1 ratio of regular employees to external contractors among activated staff.

The constraint calculates the actual percentage of activated employees in each cost group and compares it to the target percentage derived from the ratio weights. If the actual ratio deviates from the target, a soft penalty is applied. The penalty is proportional to the deviation from the target ratio.

By default, every constraint has a weight of 1, meaning that all constraints are equally important.

Learn about changing the weight of this constraint:

Use the constraint configuration’s keepEmployeeActivationRatioWeight attribute to update the weight of the constraint. 0 disables the constraint. A constraint weight of 10, means the constraint is 10 times more important than a constraint with a weight of 1.

"overrides": { "keepEmployeeActivationRatioWeight": 10 }

  • © 2025 Timefold BV
  • Timefold.ai
  • Documentation
  • Changelog
  • Send feedback
  • Privacy
  • Legal
    • Light mode
    • Dark mode
    • System default