The lecture notes are updated during the course. This page lists what changed in each published version, newest first. The version you are reading is shown at the bottom of every page.
Small fixes (typos, formatting) are grouped into a single line. Each entry links to the full list of changes on GitHub.
2026-10-07 21:06¶
Lecture 13 is rewritten to follow the slides and split into five pages, replacing Simulation Optimization. About Simulation Optimization describes the setting, why it is harder than deterministic optimization, and four types of problems. Comparing Scenarios, Ranking and Selection, Local Search and Gradient Methods each discuss one type, with a newsvendor example in Python.
Comparing Scenarios shows how many simulation runs common random numbers save. Local search and gradient methods also show their downside: less noise means less exploration, so a search more often stays in a local optimum.
Ranking and Selection works out both options for the newsvendor, with the one-sided tests that discard a solution and the Šidák correction, and the same notation as the slides.
Lecture 13 homework exercises: the new exercise 5 asks you to read and change the code that discards solutions in ranking and selection.
2026-10-06 07:43¶
Lecture 12 is rewritten to follow the slides and split into five pages, replacing Simulation. Variability (Recap) is now a short theory-only recap of the probability and statistics that Lectures 12 and 13 use. Why Simulate? describes the simulation setting and the flaw of averages, Sampling a Random Variable the inverse transform method and sampling with a numpy generator and a seed, Monte Carlo Simulation the project planning example with numpy arrays, and Discrete-Event Simulation a queue in Python and model validation.
You need to be able to read the code of a discrete-event simulation, not write one yourself.
Lecture 12 homework exercises: two new exercises ask you to read a numpy Monte Carlo simulation of a project and the code of an inventory simulation.
2026-10-05 08:07¶
Lecture 11 is rewritten to follow the slides and split into five pages, replacing Algorithms and Heuristics and Complexity. Algorithms and Their Characteristics explains how the algorithms are written down and compares them (dedicated or general, polynomial or not, exact or heuristic). Shortest Path, Maximum Flow and Traveling Salesman Problem each solve an example with an (I)LO model in pulp and with a dedicated algorithm. Complexity and Heuristics covers P and NP-complete problems and the 2-opt heuristic.
Dijkstra’s algorithm, the Ford-Fulkerson algorithm and 2-opt are each worked out step by step on the slides’ example network, with a figure per iteration and short Python code that follows the algorithm line by line. You need to be able to read this code, not write it yourself.
Lecture 11 homework exercises: the graphs are redrawn, and the new exercise 6 asks you to trace a piece of code for the traveling salesman problem by hand, analyze its running time and improve it.
2026-10-02 20:36¶
Simulation has a new section, Simulating with numpy Arrays: why the simulations work with arrays instead of
forloops, with a timing comparison, and a table of the numpy features the simulations in Lectures 12 and 13 use.Simulation Optimization: in ranking and selection, the budget that remains after the first round is (it said ).
2026-09-30 21:31¶
Lecture 10 is split into three pages. Multi-Period Inventory Planning and Robust Regression each have their own page, and the new Solvers and How to Help Them replaces Modeling Tools and Solvers. It covers solver quality and how much faster solvers have become, how to call another solver such as HiGHS, how to read a CBC solve log (incumbent, best bound and gap), and what to do when a solve takes too long: time limits, gap tolerances, warm starts and tighter formulations. Algebraic modeling languages keep a short note.
Robust Regression has new plots: the example data, a line that is not optimal with its errors, the optimal line, and quantile regression lines for and . The quantile regression model is written out in full.
To use HiGHS on your own computer, install PuLP with
pip install "pulp[highs]==3.3.2"(see PuLP version). In Colab, HiGHS is already available.Lecture 10 homework exercises: exercise 2 is now about reading a solver log instead of modeling languages, exercise 3 is shorter, and exercise 1h uses the warehouse capacity instead of the rental cost . Multi-Period Inventory Planning now says when an order arrives.
2026-09-29 11:10¶
The Lecture 9 applications (Transportation and Transshipment, Set Covering and Shift Scheduling, Machine Scheduling) and the Lecture 10 applications (Multi-Period Inventory Planning, Robust Regression) now follow the same steps as the slides: practical motivation, the general model built up step by step, the example model written out, and the solution in pulp, followed by extensions.
Machine Scheduling first builds the scheduling model, introducing order variables and big M where the model needs them, and then treats big M, conditional and either/or constraints in general in a separate section.
Integer Optimization: the knapsack problem is introduced in the same way as the other applications, followed by branch and bound for the knapsack example in its own section. The integer lattice plot now shows the optimal-profit line.
The Lecture 9 homework exercises are reworked: every decision variable is defined explicitly, the exercise 3 network is redrawn, the couples exercise has numbers, and the pulp code exercise has hints. The class-scheduling exercise and the further exercises are removed.
2026-09-27 08:40¶
Solving models with pulp works in Google Colab again. Since 24 September, the solve cells failed there with a CBC error; they now use
pulp.PULP_CBC_CMD(msg=False)again, as before.PuLP 4.0 has been released, and the code in these notes does not run on it. These notes stay with PuLP 3.3.2: see PuLP version for how to install it on your own computer and where to find its documentation.
Integer Optimization: a new, more detailed explanation of branch and bound with step-by-step trees, a new exercise on branching, and the knapsack problem worked out on one example, including solving its LO relaxation by hand. The lecture 8 homework solutions now follow this explanation step by step.
New exam-style exercises with questions about pulp code, to be answered on paper: lecture 8, lecture 9 and lecture 10.
Graphical representations of optimization problems are interactive (hover over a point to see its coordinates and objective value), and figures and link previews read well in dark mode. Models are written with one constraint per line, figure captions name the exercise they belong to, this changelog and the version line at the bottom of every page are new, and a few typos and formatting issues are fixed.