Integer optimization lies at the core of many real-world decision problems in logistics, finance, energy systems, and production planning. Solving large-scale mixed-integer programs efficiently requires sophisticated algorithms, numerical rigor, and a deep understanding of the mathematics behind the applications.
This block course focuses on the computational and mathematical foundations of modern integer optimization solvers. In dedicated lectures, we study the algorithmic building blocks that make state-of-the-art solvers effective in practice, as well as the mathematical principles underlying their correctness and performance.
Topics include different classes of cutting planes and techniques to prove their correctness; the mathematical foundations of presolving (with excursions to number theory and graph theory); primal heuristics for finding high-quality feasible solutions; logical deduction mechanisms in propagation and infeasibility analysis; and the integration of machine learning techniques into optimization algorithms. Further emphasis is placed on numerics in limited-precision algebra, software engineering aspects, principled evaluation of algorithms, and best modeling practices in mathematical optimization.
In addition to the lectures, there will be hands-on implementation sessions, working with state-of-the-art optimization software.
Exams are based on lecture content so active participation is highly recommended. Additional materials are given for optional further reading.
Before we get started, we would be grateful if you could take care of a few small things.
Please confirm your participation by writing to both t.berthold@campus.tu-berlin.de and g.tjusila@campus.tu-berlin.de with your name, university, and program.
We will use GitHub Codespaces for all coding tutorials so that everyone has the same environment. Free GitHub accounts include around 60 hours per month on a standard two-core Codespace, which will be more than enough for the course. If you would like some additional capacity, you can also apply for the GitHub Student Developer Pack.
Although we previously announced that we would use Python, we have decided to use C++ instead—because we are going to build our own mini MIP solver! You will work in teams of three to four and gradually implement techniques introduced during the coding tutorials and exercise sessions. At the end of the week, we will have a small competition to see which team has built the best solver.
If you have never programmed in C++ before, don’t worry: no prior C++ experience is required. The exercises will focus on implementing optimization ideas efficiently rather than testing advanced language knowledge. We will use C++23 because its newer features let us write clearer and more convenient code. We have prepared a short introduction to everything you will need in the course repository.
The repository also includes a dev container configuration for setting up the same environment locally with Docker. This option is a little more involved, so please make sure that GitHub Codespaces works first. If you have any questions about the setup or the C++ notes, please feel free to contact us before the course or ask us on the first day.
| Person | |
|---|---|
| PD Dr. Timo Berthold | t.berthold@campus.tu-berlin.de |
| Gennesaret Kharistio Tjusila | g.tjusila@campus.tu-berlin.de |