🧩 Constraint Solving POTD:Job-Shop Scheduling #32799
Closed
Replies: 1 comment
-
|
This discussion has been marked as outdated by Constraint Solving — Problem of the Day. A newer discussion is available at Discussion #33026. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Problem Statement
In the Job-Shop Scheduling Problem (JSSP), you have
njobs andmmachines. Each job consists of an ordered sequence of operations, where operation(i,k)must be processed on a specific machineμ(i,k)for a known durationp(i,k). The constraints are:The goal is to assign a start time
s(i,k)to each operation so that all constraints are satisfied and the makespan (completion time of the last operation) is minimized.Concrete Instance (3 jobs × 3 machines)
Input: processing times and machine routes per job.
Output: start times
s(i,k)minimisingCmax = max_i C_i(whereC_iis the completion time of jobi).Why It Matters
Modeling Approaches
1. Constraint Programming (CP)
Decision variables:
s[i][k]— start time of operation(i,k), domain[0, H]whereHis a horizon upper bound.Core constraints:
Trade-offs: The
NoOverlap(orCumulative(capacity=1)) global constraint enables powerful edge-finding and not-first/not-last propagation. Horizon tightening via critical-path analysis reduces domains significantly before search.2. Mixed-Integer Programming (MIP)
Introduce binary variables
y[i][j][m] = 1if operationiprecedes operationjon machinem:Trade-offs: MIP benefits from LP relaxation bounds and branch-and-bound, but the big-M weakens LP relaxations. Choosing tight
M(e.g., horizon from critical path) is essential. MIP solvers scale poorly beyond ~20 jobs × 20 machines without additional cuts.Example Model — OR-Tools CP-SAT (Python snippet)
Key Techniques
1. Edge-Finding Propagation
Given a set of tasks on one machine, edge-finding detects when a task
tmust execute before (or after) an entire group of other tasks, even if no individual pairwise constraint forces it. This quadratic-time algorithm (Vilím 2004) dramatically tightens start-time bounds and is the backbone of modern CP JSSP solvers.2. Critical-Path / Energetic Reasoning
The critical path gives a lower bound on makespan by summing the longest chain of dependent operations. Energetic reasoning extends this: if the total work of tasks assigned to a time window exceeds the available machine capacity in that window, adjustments are mandatory. These bounds drive both propagation and branch-and-bound.
3. Disjunctive Scheduling & Branching Strategies
Search for JSSP typically uses disjunctive branching — at each node, pick a pair of conflicting operations on the same machine and branch on their relative order. The Shifting Bottleneck heuristic identifies the most-loaded machine first, solving sub-problems sequentially to guide search. Combined with Large Neighbourhood Search (LNS), this yields strong anytime performance on benchmark instances like the Taillard or Lawrence sets.
Challenge Corner
References
Beta Was this translation helpful? Give feedback.
All reactions