Motivation
PARTIALLY ORDERED KNAPSACK (P218) from Garey & Johnson, A6 MP12. An NP-complete (strong sense) knapsack variant where items are subject to a partial order: including an item in the knapsack requires including all its predecessors. This models precedence-constrained selection problems arising in manufacturing scheduling, project selection, mining operations, and network design. The precedence constraints make the problem significantly harder than standard 0-1 Knapsack — it is NP-complete in the strong sense even when s(u) = v(u) for all u, whereas standard 0-1 Knapsack is only weakly NP-complete. Also known as the Precedence Constrained Knapsack Problem (PCKP) in the optimization literature.
Associated rules:
- R162: CLIQUE -> PARTIALLY ORDERED KNAPSACK (establishes NP-completeness via Garey and Johnson)
Definition
Name: PrecedenceOrderedKnapsack
Reference: Garey & Johnson, Computers and Intractability, A6 MP12
Mathematical definition:
INSTANCE: Finite set U, partial order < on U, for each u ∈ U a size s(u) ∈ Z⁺ and a value v(u) ∈ Z⁺, positive integer B (capacity).
OBJECTIVE: Find a subset U' ⊆ U that maximizes Σᵤ∈U' v(u) subject to: (1) U' is downward-closed (if u ∈ U' and u' < u, then u' ∈ U'), and (2) Σᵤ∈U' s(u) ≤ B.
The constraint "if u ∈ U' and u' < u, then u' ∈ U'" means U' must be a downward-closed set (lower set / order ideal) in the partial order.
Variables
- Count: n = |U| binary variables (one per item)
- Per-variable domain: binary {0, 1} — whether item u is included in U'
- Meaning: x_u = 1 if item u is selected. The configuration (x₁, ..., xₙ) encodes a candidate subset U' ⊆ U. A configuration is feasible if: (a) U' is a downward-closed set (for every u ∈ U', all predecessors of u are also in U'), and (b) Σ s(u)·x_u ≤ B. The objective is to maximize Σ v(u)·x_u over all feasible configurations. Infeasible configurations (violating precedence or capacity) evaluate to
SolutionSize::Invalid.
Schema (data type)
Type name: PrecedenceOrderedKnapsack
Variants: none
| Field |
Type |
Description |
sizes |
Vec<i64> |
Size s(u) for each item u ∈ U |
values |
Vec<i64> |
Value v(u) for each item u ∈ U |
precedences |
Vec<(usize, usize)> |
Precedence relations: (u', u) means u' < u (u' must be included before u) |
capacity |
i64 |
Knapsack capacity B |
Notes:
- This is an optimization problem:
Metric = SolutionSize<i64>, direction = Maximize. The evaluate() method returns SolutionSize::Valid(total_value) when the configuration is feasible (downward-closed and within capacity), and SolutionSize::Invalid when the configuration violates precedence or capacity constraints.
- The
precedences field encodes the Hasse diagram (cover relations) of the partial order. The full partial order is the transitive closure.
- An alternative representation stores the partial order as a DAG adjacency list.
- Key getter methods needed:
num_items() (= |U|), num_precedences() (= number of cover relations), capacity() (= B).
Complexity
- Decision complexity: NP-complete in the strong sense (Garey and Johnson; transformation from CLIQUE). Remains NP-complete in the strong sense even when s(u) = v(u) for all u.
- Best known exact algorithm: Branch-and-bound with Lagrangian relaxation bounds. Dynamic programming approaches work when the partial order has special structure. For general partial orders, the problem is strongly NP-hard, so no pseudo-polynomial algorithm exists unless P = NP.
- Special cases:
- Tree partial orders (Hasse diagram is a tree): solvable in pseudo-polynomial time O(n · B) by tree DP (Garey and Johnson; Johnson and Niemi, 1983).
- 2-dimensional partial orders: FPTAS exists with running time O(n⁴/ε) for any ε > 0 (Kolliopoulos and Steiner, 2007).
- Bipartite orders (all elements are either minimal or maximal): NP-complete in the strong sense.
- Approximation: For general partial orders, no FPTAS exists (strongly NP-hard). Johnson and Niemi (1983) gave an FPTAS for tree orders. Kolliopoulos and Steiner extended this to 2-dimensional orders.
- References:
- M. R. Garey and D. S. Johnson. "Computers and Intractability." Original NP-completeness result.
- D. S. Johnson and K. A. Niemi (1983). "On Knapsacks, Partitions, and a New Dynamic Programming Technique for Trees." Mathematics of Operations Research 8(1), pp. 1–14. Tree DP and FPTAS for tree orders.
- O. H. Ibarra and C. E. Kim (1975). As cited by Garey & Johnson. (Technical report, University of Minnesota.)
- S. G. Kolliopoulos and G. Steiner (2007). "Partially-Ordered Knapsack and Applications to Scheduling." Discrete Applied Mathematics 155(8), pp. 889–897.
Extra Remark
Full book text:
INSTANCE: Finite set U, partial order < on U, for each u ∈ U a size s(u) ∈ Z⁺ and a value v(u) ∈ Z⁺, positive integers B and K.
QUESTION: Is there a subset U' ⊆ U such that if u ∈ U' and u' < u, then u' ∈ U', and such that Σᵤ∈U' s(u) ≤ B and Σᵤ∈U' v(u) ≥ K?
Reference: [Garey and Johnson, ——]. Transformation from CLIQUE. Problem is discussed in [Ibarra and Kim, 1975b].
Comment: NP-complete in the strong sense, even if s(u) = v(u) for all u ∈ U. General problem is solvable in pseudo-polynomial time if < is a "tree" partial order [Garey and Johnson, ——].
How to solve
Example Instance
Input:
U = {a, b, c, d, e, f} (n = 6 items)
Partial order (Hasse diagram):
Precedences: a < c, a < d, b < e, d < f, e < f
(Meaning: to include c, must include a; to include f, must include both d and e, hence also a and b.)
Sizes: s(a) = 2, s(b) = 3, s(c) = 4, s(d) = 1, s(e) = 2, s(f) = 3
Values: v(a) = 3, v(b) = 2, v(c) = 5, v(d) = 4, v(e) = 3, v(f) = 8
Capacity B = 11
Optimal solution: U' = {a, b, d, e, f}
- Downward-closed check:
- f ∈ U': predecessors d, e, a, b all in U' ✓
- d ∈ U': predecessor a ∈ U' ✓
- e ∈ U': predecessor b ∈ U' ✓
- a, b: no predecessors ✓
- Total size: 2 + 3 + 1 + 2 + 3 = 11 ≤ 11 ✓
- Total value: 3 + 2 + 4 + 3 + 8 = 20 (maximized)
Why not include c? U' = {a, b, c, d, e, f} has total size = 2+3+4+1+2+3 = 15 > 11 = B. Exceeds capacity. evaluate() returns SolutionSize::Invalid.
Invalid subset: U' = {d, f} — includes f but not e and not b (predecessors of f via e). Not downward-closed. evaluate() returns SolutionSize::Invalid.
Suboptimal feasible subset: U' = {a, d} has size 3 ≤ 11, value 7. evaluate() returns SolutionSize::Valid(7). Feasible but not optimal.
Motivation
PARTIALLY ORDERED KNAPSACK (P218) from Garey & Johnson, A6 MP12. An NP-complete (strong sense) knapsack variant where items are subject to a partial order: including an item in the knapsack requires including all its predecessors. This models precedence-constrained selection problems arising in manufacturing scheduling, project selection, mining operations, and network design. The precedence constraints make the problem significantly harder than standard 0-1 Knapsack — it is NP-complete in the strong sense even when s(u) = v(u) for all u, whereas standard 0-1 Knapsack is only weakly NP-complete. Also known as the Precedence Constrained Knapsack Problem (PCKP) in the optimization literature.
Associated rules:
Definition
Name:
PrecedenceOrderedKnapsackReference: Garey & Johnson, Computers and Intractability, A6 MP12
Mathematical definition:
INSTANCE: Finite set U, partial order < on U, for each u ∈ U a size s(u) ∈ Z⁺ and a value v(u) ∈ Z⁺, positive integer B (capacity).
OBJECTIVE: Find a subset U' ⊆ U that maximizes Σᵤ∈U' v(u) subject to: (1) U' is downward-closed (if u ∈ U' and u' < u, then u' ∈ U'), and (2) Σᵤ∈U' s(u) ≤ B.
The constraint "if u ∈ U' and u' < u, then u' ∈ U'" means U' must be a downward-closed set (lower set / order ideal) in the partial order.
Variables
SolutionSize::Invalid.Schema (data type)
Type name:
PrecedenceOrderedKnapsackVariants: none
sizesVec<i64>valuesVec<i64>precedencesVec<(usize, usize)>capacityi64Notes:
Metric = SolutionSize<i64>, direction = Maximize. Theevaluate()method returnsSolutionSize::Valid(total_value)when the configuration is feasible (downward-closed and within capacity), andSolutionSize::Invalidwhen the configuration violates precedence or capacity constraints.precedencesfield encodes the Hasse diagram (cover relations) of the partial order. The full partial order is the transitive closure.num_items()(= |U|),num_precedences()(= number of cover relations),capacity()(= B).Complexity
Extra Remark
Full book text:
INSTANCE: Finite set U, partial order < on U, for each u ∈ U a size s(u) ∈ Z⁺ and a value v(u) ∈ Z⁺, positive integers B and K.
QUESTION: Is there a subset U' ⊆ U such that if u ∈ U' and u' < u, then u' ∈ U', and such that Σᵤ∈U' s(u) ≤ B and Σᵤ∈U' v(u) ≥ K?
Reference: [Garey and Johnson, ——]. Transformation from CLIQUE. Problem is discussed in [Ibarra and Kim, 1975b].
Comment: NP-complete in the strong sense, even if s(u) = v(u) for all u ∈ U. General problem is solvable in pseudo-polynomial time if < is a "tree" partial order [Garey and Johnson, ——].
How to solve
Example Instance
Input:
U = {a, b, c, d, e, f} (n = 6 items)
Partial order (Hasse diagram):
Precedences: a < c, a < d, b < e, d < f, e < f
(Meaning: to include c, must include a; to include f, must include both d and e, hence also a and b.)
Sizes: s(a) = 2, s(b) = 3, s(c) = 4, s(d) = 1, s(e) = 2, s(f) = 3
Values: v(a) = 3, v(b) = 2, v(c) = 5, v(d) = 4, v(e) = 3, v(f) = 8
Capacity B = 11
Optimal solution: U' = {a, b, d, e, f}
Why not include c? U' = {a, b, c, d, e, f} has total size = 2+3+4+1+2+3 = 15 > 11 = B. Exceeds capacity. evaluate() returns
SolutionSize::Invalid.Invalid subset: U' = {d, f} — includes f but not e and not b (predecessors of f via e). Not downward-closed. evaluate() returns
SolutionSize::Invalid.Suboptimal feasible subset: U' = {a, d} has size 3 ≤ 11, value 7. evaluate() returns
SolutionSize::Valid(7). Feasible but not optimal.