Preparing video…

Discrete Optimization

Tired of solving Sudokus by hand? This class teaches you how to solve complex search problems with discrete optimization concepts and algorithms, including constraint programming, local search, and mixed-integer programming.


Course at a Glance

About the Course

Optimization technology is ubiquitous in our society. It schedules planes and their crews, coordinates the production of steel, and organizes the transportation of iron ore from the mines to the ports. Optimization clears the day-ahead and real-time markets to deliver electricity to millions of people. It organizes kidney exchanges and cancer treatments and helps scientists understand the fundamental fabric of life, control complex chemical reactions, and design drugs that may benefit billions of individuals.

This class is an introduction to discrete optimization and exposes students to some of the most fundamental concepts and algorithms in the field. It covers constraint programming, local search, and mixed-integer programming from their foundations to their applications for complex practical problems in areas such as scheduling, vehicle routing, supply-chain optimization, and resource allocation.

An introductory lecture to the course can viewed here.

Course Syllabus

The course has an open format.  At the start of the course all of the assignments and lectures are available and each student is free to design their own plan of study and proceed at their own pace.  The assessments in the course consist of five programming tasks where students experience the challenges of real world optimization problems such as selecting the most profitable locations of retail stores (facility location) and the design of package delivery routes (vehicle routing).  The class community is an important aspect of this course and students are encouraged to collaborate and help each other in the completion of the assignments.

Recommended Background

Good programming skills, knowledge of fundamental algorithms, and linear algebra.

Suggested Readings

The lectures are designed to be self-contained and there are no required readings for this course.

Course Format

The class will consist of lecture videos, which are between 8 and 20 minutes in length (approximately 3 hours per week), and programming assignment covering the course concepts and exercising creativity.  Successful students can spend between 5 to 20 hours a week on the assignments depending on their background skills and level of interest.


  • What are the pre-requisites for the class?
  • Good programming skills, knowledge of algorithms and linear algebra.
  • What programming language will be used in this class?
  • A minimal knowledge of python is necessary to integrate with the course infrastructure.  Outside of that, students are free to use any language of their choice.
  • What is the coolest thing I'll learn if I take this class?
  • To be the coolest waiter in the world.
  • How difficult is this class?
  • A motivated student spending the time on the programming assignment will succeed in this class.