AddNoOverlap with Optional Intervals

Extending the single-machine AddNoOverlap constraint to optional intervals, whose participation in the schedule is controlled by a presence Boolean. Covers feasibility checking, identifying conflicting pairs, and maximizing the number of present optional intervals (including with mandatory intervals).

Step 1 of 157%

Tutorial

Optional Intervals and AddNoOverlap

An optional interval is a scheduling interval whose existence is governed by a Boolean variable pi,p_i, called its presence literal. When pi=True,p_i = \text{True}, the interval is present and occupies the half-open window [si,ei)[s_i, e_i) on the resource; when pi=False,p_i = \text{False}, the interval is absent and contributes nothing to the schedule.

The AddNoOverlap constraint, applied to a list of intervals on a single machine, now requires only that any two present intervals be non-overlapping:

pipj    (eisj)    (ejsi).p_i \land p_j \;\Longrightarrow\; (e_i \le s_j) \;\lor\; (e_j \le s_i).

Absent intervals impose no restriction. Adding optional intervals to a model can therefore never turn a feasible schedule into an infeasible one — it only enlarges the search space.

For example, consider three optional intervals on one machine:

  • AA: [2,5),[2, 5), presence pAp_A
  • BB: [4,7),[4, 7), presence pBp_B
  • CC: [6,9),[6, 9), presence pCp_C

The assignment pA=T, pB=F, pC=Tp_A = T,\ p_B = F,\ p_C = T is feasible: the only present intervals are AA and C,C, and 56,5 \le 6, so they don't overlap. The assignment pA=T, pB=T, pC=Fp_A = T,\ p_B = T,\ p_C = F is infeasible because AA and BB are both present and overlap on [4,5).[4, 5).

navigate · Enter open · Esc close · ⌘K/Ctrl K toggle