Class Central is learner-supported. When you buy through links on our site, we may earn an affiliate commission.

University of Melbourne

Discrete Optimization

University of Melbourne via Coursera


Unlock Unlimited Opportunities: Get 50% Off Your First Month of Coursera Plus
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. 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.


  • Welcome
    • These lectures and readings give you an introduction to this course: its philosophy, organization, and load. They also tell you how the assignments are a significant part of the class. This week covers the common input/output organization of the assignments, how they are graded, and how to succeed in this class.
  • Knapsack
    • These lectures introduce optimization problems and some optimization techniques through the knapsack problem, one of the most well-known problem in the field. It discusses how to formalize and model optimization problems using knapsack as an example. It then reviews how to apply dynamic programming and branch and bound to the knapsack problem, providing intuition behind these two fundamental optimization techniques. The concept of relaxation and search are also discussed.
  • Constraint Programming
    • Constraint programming is an optimization technique that emerged from the field of artificial intelligence. It is characterized by two key ideas: To express the optimization problem at a high level to reveal its structure and to use constraints to reduce the search space by removing, from the variable domains, values that cannot appear in solutions. These lectures cover constraint programming in detail, describing the language of constraint programming, its underlying computational paradigm and how it can be applied in practice.
  • Local Search
    • Local search is probably the oldest and most intuitive optimization technique. It consists in starting from a solution and improving it by performing (typically) local perturbations (often called moves). Local search has evolved substantially in the last decades with a lot of attention being devoted on which moves to explore. These lectures explore the theory and practice of local search, from the concept of neighborhood and connectivity to meta-heuristics such as tabu search and simulated annealing.
  • Linear Programming
    • Linear programming has been, and remains, a workhorse of optimization. It consists in optimizing a linear objective subject to linear constraints, admits efficient algorithmic solutions, and is often an important building block for other optimization techniques. These lectures review fundamental concepts in linear programming, including the infamous simplex algorithm, simplex tableau, and duality. .
  • Mixed Integer Programming
    • Mixed Integer Programming generalizes linear programming by allowing integer variables, which dramatically changes the complexity of the problems but also broadens the potential applications significantly. These lectures review how to model problems in mixed-integer programming and how to solve mixed-integer programs using branch and bound. Advanced techniques such as cutting planes and polyhedral cuts are also covered.
  • Advanced Topics: Part I
    • These lectures cover some more advanced concepts in optimization. They introduce constraint-programming techniques for scheduling and routing.
  • Advanced Topics: Part II
    • These lectures continues to cover some more advanced concepts in optimization. They introduce large neighborhood search, which often combines constraint programming and local search, and column generation which decomposes an optimization model into a master and pricing problem, using more complex variables.

Taught by

Professor Pascal Van Hentenryck


4.3 rating, based on 12 Class Central reviews

4.8 rating at Coursera based on 757 ratings

Start your review of Discrete Optimization

  • Discrete optimization is a quasi-self-paced programming course offered by the University of Melbourne through Coursera that is all about solving hard problems. Hard problems in the context of this course means NP-hard problems--problems with exponen…
  • Wei En
    This course was excellently designed. Students who prefer a rigid workflow and hand-holding will strongly dislike this course, as its content is quite challenging. However, students who like a flexible schedule and exploration will appreciate the e…
  • Mark Wilbur
    I was really torn on this class. On one hand, it focuses on really cool problems. If you’ve ever wanted to know how best to handle intractable problems like the traveling salesman problem or the map coloring problem, this is your course. Prof Pascal…
  • WickWack
    I appreciated the sense of humor, the goofy costumes even. But after the first unit, in my experience, the course becomes almost unworkable. The lectures are long, rambling, and often off-topic. The programming assignments are difficult, and very…
  • Anonymous
    Outstanding! Very challenging, but rewarding!

    All materials are available from the beginning.

    Scores are based on several types of problems. For each one, you code algorithms and run them.

    Although many techniques are covered in the lectures,

    it's up to you to figure out which one will work for particular problem and how to get it done, so creativity and some experience would help.
  • Anonymous
    Amazing class, large real world problems in vehicle routing, warehouse location tackled as programming assignments. Expect to spend a lot of time on the programming assignments if you intend to get a statement of accomplishment or better.
  • Hard course, with very open and hard programming tasks. Requires a lot of work to get it done, but it's the most rewarding MOOC I've ever done.
  • Anonymous
    Great courses. Assignements are hard, do not try to get 10/10 or you will spend your life on it.
    Thank you teacher.
  • Noah

Never Stop Learning.

Get personalized course recommendations, track subjects and courses with reminders, and more.

Someone learning on their laptop while sitting on the floor.