Skip to content

Formulate and solve integer and combinatorial optimization problems using graph structure, valid relaxations, polyhedral arguments, dynamic programming, cuts, branching, and approximation evidence.

Textbook draft, not yet final-ready; pending independent review. Builds on: Discrete Mathematics · Continuous Optimization

Chapters

  1. Discrete Models, Encodings, and Complexity A charter aircraft carries two kinds of pallet. 5 worked examples · 18 exercises
  2. Shortest Paths and Network Flows 5 worked examples · 18 exercises Builds on Chapter 1
  3. Max Flow, Min Cut, and Integrality 4 worked examples · 18 exercises Builds on Chapter 2
  4. Bipartite Matching and Assignment Five interpreters are available for five meetings, and each interpreter is qualified for only some of the meetings. 4 worked examples · 18 exercises Builds on Chapter 3
  5. Integer Programming Formulations and Strength Two analysts model the same warehouse-location decision. 5 worked examples · 18 exercises Builds on Chapter 4
  6. Polyhedra, Extreme Points, and Total Unimodularity Three times now a linear program has returned whole numbers without being asked. 5 worked examples · 18 exercises Builds on Chapter 5
  7. Branch-and-Bound Chapter 1 left the cargo problem in an unsatisfying state. 4 worked examples · 18 exercises Builds on Chapter 6
  8. Cutting Planes and Separation Example 7.4 ended with a small scandal. 4 worked examples · 18 exercises Builds on Chapter 7
  9. Knapsack Dynamic Programming and Approximation Branch-and-bound solved the four-item knapsack of Chapter 7 in thirteen nodes, and two cover cuts solved it in three linear programs. 5 worked examples · 18 exercises Builds on Chapter 8
  10. Approximation Algorithms, Decomposition, and Certificates A telecommunications planner must place monitoring equipment on network nodes so that every link has a monitor at one end, using as few monitors as possible. 5 worked examples · 18 exercises Builds on Chapter 9
  11. Cumulative Review Mixed problems drawn from every chapter of Discrete Optimization. 16 exercises

Maps

How the chapters build on each other: an arrow runs from a chapter to a later one that cites it.
How the chapters of Discrete Optimization build on each other Chapter 2 cites Chapter 1 4 times Chapter 3 cites Chapter 2 1 time Chapter 4 cites Chapter 3 5 times Chapter 5 cites Chapter 4 4 times Chapter 6 cites Chapter 5 4 times Chapter 7 cites Chapter 6 2 times Chapter 8 cites Chapter 7 15 times Chapter 9 cites Chapter 8 1 time Chapter 10 cites Chapter 9 4 times Chapter 1: Discrete Models, Encodings, and ComplexityChapter 1Discrete Models,Encodings, and Complexity Chapter 2: Shortest Paths and Network FlowsChapter 2Shortest Paths andNetwork Flows Chapter 3: Max Flow, Min Cut, and IntegralityChapter 3Max Flow, Min Cut, andIntegrality Chapter 4: Bipartite Matching and AssignmentChapter 4Bipartite Matching andAssignment Chapter 5: Integer Programming Formulations and StrengthChapter 5Integer ProgrammingFormulations and Strength Chapter 6: Polyhedra, Extreme Points, and Total UnimodularityChapter 6Polyhedra, ExtremePoints, and Total… Chapter 7: Branch-and-BoundChapter 7Branch-and-Bound Chapter 8: Cutting Planes and SeparationChapter 8Cutting Planes andSeparation Chapter 9: Knapsack Dynamic Programming and ApproximationChapter 9Knapsack DynamicProgramming and… Chapter 10: Approximation Algorithms, Decomposition, and CertificatesChapter 10Approximation Algorithms,Decomposition, and…
The courses this one builds on, down to it: an arrow runs from a course to one that builds on it.
The courses Discrete Optimization builds on CalculusCalculus Multivariable CalculusMultivariable Calculus Linear AlgebraLinear Algebra Discrete MathematicsDiscrete Mathematics Continuous OptimizationContinuousOptimization Discrete OptimizationDiscrete Optimization

About This Course

This book is about optimization problems in which some or all of the decisions are whole numbers: which arcs a route uses, which worker takes which job, how many pallets of each kind go on an aircraft, which items go into a knapsack. It is written for a reader working alone, an advanced undergraduate or beginning graduate student in mathematics, operations research, computer science, or engineering, who wants to be able to run each algorithm by hand on a small instance, prove that it is correct, and say what evidence accompanies its answer.

Three courses are assumed. From Discrete Mathematics you need graphs, paths, cycles, trees, counting, and proof by induction. From Linear Algebra you need linear systems, determinants, and inverse matrices. From Continuous Optimization you need linear programming: feasible regions, vertices and basic feasible solutions, the simplex method, and duality with complementary slackness. Those results are used here constantly and are not proved again; when one is needed it is stated with the hypotheses the argument uses and marked once with its library identifier. A little dynamic programming is used in Chapters 2 and 9, and its general theory belongs to Dynamic Programming and Optimal Control.

The ten chapters aim at a short list of things you can do afterwards with pencil, paper, and no reference at hand. Formulate a combinatorial decision as an integer program and compare two formulations by the bounds they give. Run Dijkstra’s algorithm, the Bellman–Ford recursion, augmenting-path algorithms for maximum flow and bipartite matching, the Hungarian method, branch-and-bound, Gomory and cover cuts, and the knapsack recursions on small instances, and explain every number produced. Prove the max-flow min-cut theorem, König’s theorem, and the integrality of polyhedra with totally unimodular constraint matrices. Recognize when a linear programming relaxation solves an integer problem exactly and when it cannot. Bound the error of a heuristic by an approximation ratio or a dual bound. Choose among these tools for a new problem and state what certificate the chosen method delivers.

Notation is standard. A directed graph is \(G=(V,A)\) with \(n=\lvert V\rvert\) nodes and \(m=\lvert A\rvert\) arcs; an arc from \(v\) to \(w\) is written \((v,w)\) . Arc costs or lengths are \(c_{vw}\) and arc capacities are \(u_{vw}\) , so the letter \(u\) is never used for a node. For a set \(S\) of nodes, \(\delta^+(S)\) is the set of arcs leaving \(S\) and \(\delta^-(S)\) the set of arcs entering it. The integers are \(\mathbb Z\) and the nonnegative integers \(\mathbb Z_+\) . Inequalities between vectors hold componentwise, \(\mathbf 1\) is a vector of ones, and for a vector \(x\) indexed by a set \(E\) and a subset \(F\subseteq E\) we write \(x(F)=\sum_{e\in F}x_e\) . The floor \(\lfloor a\rfloor\) is the largest integer not exceeding \(a\) , and \(\lceil a\rceil\) is the smallest integer not below it. Integer programs are written as maximization problems unless a chapter says otherwise; \(z^\star\) is the optimal value of the integer problem and \(z_{LP}\) the optimal value of its linear programming relaxation.

Each chapter ends with exercises that run from recall and hand computation to proof. Work the computational ones on paper first; the instances are small enough that every algorithm in the book can be traced by hand, and that tracing is where the algorithms are learned. The companion solutions give full arguments for some exercises, hints for others, and bare answers for a few. Several exercises present a plausible but wrong argument and ask for the flaw. The cumulative review at the end mixes the chapters without naming them, because in practice the first decision is which structure a problem has.

Search knowledge base

Explore

On this page

Note