Skip to main content

Resumable Jobs

resumable lets a long job be interrupted by a period in which the resource is unavailable, and resumed once that period ends. Without it, a job can never straddle an unavailability: the solver pushes the whole job until after the unavailability ends.
resumable only applies to UNAVAILABILITY breaks.WINDOWED, DRIVE and DUTY breaks are inserted between jobs, never inside one, so they can never interrupt a job and resumable has no effect on them. If you set resumable: true on a resource whose only breaks are WINDOWED, the flag is silently ignored.

Overview

Setting resumable: true on a job enables:
  • The job to be paused by an overlapping UNAVAILABILITY break and resumed afterward
  • Long jobs to fit into shifts that contain a fixed unavailability
  • Any travel to and from the unavailability’s own location to be accounted for

Basic Configuration

Mark the job resumable, and express the interruption as an UNAVAILABILITY break:
Default Behavior: jobs are non-resumable (resumable: false). Only mark a job resumable when pausing the work halfway is operationally acceptable.
An UNAVAILABILITY break has no duration field — it is a fixed interval, and its length is simply to minus from. This is the trade-off versus a WINDOWED break: you gain the ability to interrupt a job, and you give up the solver’s freedom to choose when within a window the break is taken.

How Resumable Jobs Work

Break interruption

1

Job starts

The resource arrives and begins the resumable job.
2

Unavailability begins

The unavailability’s fixed from time arrives and the job is paused.
3

Break is taken

If the break defines start/end locations, travel from the job to start and back from end to the job is added to the job’s duration. With no locations, the pause costs only the interval itself.
4

Job resumes and completes

The remaining work is carried out after to, and the job’s departure time is pushed by the length of the interruption.

Example timeline

A 4-hour resumable job started at 08:00, with an unavailability from 12:00 to 13:00:
The same job with resumable: false cannot straddle 12:00–13:00 at all: the solver either starts it early enough to finish before 12:00, or pushes its start to 13:00.

Interaction with break types

Unavailability break

The interruption mechanism. Optionally give it start/end locations when the resource has to be somewhere specific (end requires start, and defaults to it):
Omit both locations when the pause happens wherever the resource already is — no detour travel is then added.

Windowed break

Flexible in when it is taken, but it never interrupts a job:
Note that a WINDOWED break is attached to the first job whose ready time falls after from, so with a single break per shift the to bound has little effect, and if no job follows within the shift the break is not placed at all. Use UNAVAILABILITY when the break must be honoured.

Drive break

Triggered by accumulated driving time, between jobs:

Use Cases

Long service appointments

A 6-hour job in a shift that contains a fixed midday unavailability:
Without resumable: true this instance is infeasible: 6 hours of work cannot fit into any gap between the unavailabilities.

Mixed job types

Constraints and Behavior

Important considerations:
  • resumable is ignored unless the resource has UNAVAILABILITY breaks
  • A non-resumable job is not rejected by an overlapping unavailability — it is pushed until after the unavailability ends, which may in turn push it out of its time window
  • Travel to a break’s start location and back from its end location is added to the job’s duration; travel between start and end during the break is not modelled
  • A job can be interrupted by several consecutive unavailabilities
Solver behavior: unavailability intervals are fixed input, not decisions — the solver does not choose when they occur. What it optimises is which jobs sit around them, and whether a resumable job is worth starting before one.

Troubleshooting

Cause: the resource’s breaks are WINDOWED, DRIVE or DUTY. Those are placed between jobs and never interrupt one, so the flag is never consulted.Solution: model the interruption as an UNAVAILABILITY break with an explicit from/to.
Causes:
  • The time window is too tight for the job plus the interruption
  • The break’s start/end locations add too much detour travel
  • Other constraints (hard tags, shift end, overtime limit) prevent assignment
Solutions:
  • Widen the job’s time windows, or extend the shift / allow overtime
  • Omit start/end on the unavailability so the pause adds no travel
  • Enable options.explanation to see which constraint is binding
Cause: UNAVAILABILITY is a fixed interval by design — the solver cannot move it.Solution: if the timing is genuinely flexible and no job needs interrupting, use a WINDOWED break instead and let the solver choose the moment.

Performance Impact

Break Management

Configure the four break types and their rules

Time Windows

Coordinate job timing with breaks

Job Complexity

Balance workload across resources

Advanced Constraints

Additional scheduling constraints