The course covers various topics such as integer programming, constraint programming, local search, and dynamic programming.
The course starts with an overview of discrete optimization and its applications. It then introduces the basics of linear programming, integer programming, and branch-and-bound algorithms. Students will learn how to formulate optimization problems as mathematical programs and use software tools to solve them.
The course also covers constraint programming and its applications in solving combinatorial problems. Local search algorithms, including hill climbing and simulated annealing, are also introduced, along with dynamic programming and its applications in solving optimization problems with overlapping subproblems.
Throughout the course, students will learn how to implement various optimization algorithms using software tools such as Gurobi and Google OR-Tools. The course includes a series of quizzes and programming assignments to help students master the concepts and algorithms covered.
Overall, the Discrete Optimization course provides a solid foundation in discrete optimization and equips students with the skills needed to solve a wide range of optimization problems.
The Discrete Optimization course on Coursera, taught by Professor Pascal Van Hentenryck, consists of 8 parts and a total of 54 lectures. Here is a detailed breakdown of the course:
Module 1: Welcome (4 videos + 2 reading)
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.
4 videosTotal 42 minutes
- Course PromoPreview module 1 minute
- Course Motivation - Indiana Jones, challenges, applications 20 minutes
- Course Introduction - philosophy, design, grading rubric 11 minutes
- Assignments Introduction & Any Integer 9 minutes
2 readingsTotal 20 minutes
- Start of Course Survey 10 minutes
- Course Syllabus 10 minutes
Module 2: Knapsack (9 videos)
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.
9 videosTotal 100 minutes
- Knapsack 1 - intuitionPreview module 2 minutes
- Knapsack 2 - greedy algorithms 7 minutes
- Knapsack 3 - modeling 8 minutes
- Knapsack 4 - dynamic programming 17 minutes
- Knapsack 5 - relaxation, branch and bound 14 minutes
- Knapsack 6 - search strategies, depth first, best first, least discrepancy 14 minutes
- Assignments Getting Started 13 minutes
- Knapsack & External Solver 10 minutes
- Exploring the Material - open course design, optimization landscape, picking your adventure 10 minutes
Module 3: Constraint Progamming (13 videos + 1 reading)
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.
13 videosTotal 247 minutes
- CP 1 - intuition, computational paradigm, map coloring, n-queensPreview module 27 minutes
- CP 2 - propagation, arithmetic constraints, send+more=money 26 minutes
- CP 3 - reification, element constraint, magic series, stable marriage 16 minutes
- CP 4 - global constraint intuition, table constraint, sudoku 19 minutes
- CP 5 - symmetry breaking, BIBD, scene allocation 18 minutes
- CP 6 - redundant constraints, magic series, market split 11 minutes
- CP 7 - car sequencing, dual modeling 18 minutes
- CP 8 - global constraints in detail, knapsack, alldifferent 33 minutes
- CP 9 - search, first-fail, euler knight, ESDD 25 minutes
- CP 10 - value/variable labeling, domain splitting, symmetry breaking in search 28 minutes
- Graph Coloring 6 minutes
- Optimization Tools 5 minutes
- Set Cover 8 minutes
1 readingTotal 10 minutes
- Optimization Tools 10 minutes
Module 4: Local Search (10 videos)
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.
10 videosTotal 191 minutes
- LS 1 - intuition, n-queensPreview module 13 minutes
- LS 2 - swap neighborhood, car sequencing, magic square 15 minutes
- LS 3 - optimization, warehouse location, traveling salesman, 2-opt, k-opt 23 minutes
- LS 4 - optimality vs feasibility, graph coloring 22 minutes
- LS 5 - complex neighborhoods, sports scheduling 21 minutes
- LS 6 - escaping local minima, connectivity 15 minutes
- LS 7 - formalization, heuristics, meta-heuristics introduction 22 minutes
- LS 8 - iterated location search, metropolis heuristic, simulated annealing, tabu search intuition 18 minutes
- LS 9 - tabu search formalized, aspiration, car sequencing, n-queens 26 minutes
- Traveling Salesman 10 minutes
Module 5: Linear Progamming (6 videos)
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.
10 videosTotal 191 minutes
- LP 1 - intuition, convexity, geometric viewPreview module 23 minutes
- LP 2 - algebraic view, naive algorithm 13 minutes
- LP 3 - the simplex algorithm 32 minutes
- LP 4 - matrix notation, the tableau 20 minutes
- LP 5 - duality derivation 22 minutes
- LP 6 - duality interpretation and uses 17 minutes
Module 6: Mixed Integer Progamming (6 videos)
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.
6 videosTotal 135 minutes
- MIP 1 - intuition, relaxation, branch and bound, knapsack, warehouse locationPreview module 26 minutes
- MIP 2 - modeling, big-M, warehouse location, graph coloring 28 minutes
- MIP 3 - cutting planes, Gomory cuts 20 minutes
- MIP 4 - convex hull, polyhedral cuts, warehouse location, node packing, graph coloring 19 minutes
- MIP 5 - cover cuts, branch and cut, seven bridges, traveling salesman 31 minutes
- Facility Location 9 minutes
Module 7: Advanced Topics: Part1 (2 videos)
These lectures cover some more advanced concepts in optimization. They introduce constraint-programming techniques for scheduling and routing.
2 videosTotal 51 minutes
- Scheduling - jobshop, disjunctive global constraintPreview module 37 minutes
- Vehicle Routing 14 minutes
Module 8: Advanced Topics: Part1 (2 videos + 1 reading)
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.
2 videosTotal 31 minutes
- Large Neighborhood Search - asymmetric TSP with time windowsPreview module 8 minutes
- Column Generation - branch and price, cutting stock 23 minutes
1 readingTotal 10 minutes
- End of course survey 10 minutes
As a student who has taken the Discrete Optimization course by Professor Pascal Van Hentenryck on Coursera, I can say that this is an excellent course that provides a comprehensive and in-depth coverage of the topic.
The course is divided into 8 parts, with each part covering a different aspect of discrete optimization. The topics covered include linear programming, integer programming, constraint programming, mixed-integer programming, network flows, and more. Each part consists of several video lectures, which are well-structured and easy to follow. The lectures are supplemented by written notes, which provide additional explanations and examples.
The assignments and projects are challenging and require a good understanding of the course material. However, they are well-designed and provide excellent opportunities to apply the knowledge gained in the course to real-world problems. The course makes use of the Gurobi optimization software, which is an industry-standard tool for solving optimization problems. This is a great feature of the course, as it provides students with practical experience in using a powerful optimization tool.
One thing that I particularly appreciated about the course was the emphasis on both theory and practice. The course covers the theoretical foundations of optimization, but also provides plenty of practical examples and exercises. This is important because it helps to bridge the gap between theory and practice, and prepares students for real-world optimization problems.
Professor Pascal Van Hentenryck is an excellent instructor who is highly knowledgeable and passionate about the topic. His lectures are engaging and well-delivered, and his expertise is evident in the quality of the course materials.
Overall, I highly recommend the Discrete Optimization course by Professor Pascal Van Hentenryck on Coursera. The course provides a solid foundation in discrete optimization and equips students with the knowledge and skills needed to solve real-world optimization problems. The course is challenging, but rewarding, and is definitely worth the effort for anyone interested in the field of optimization.
At the time, the course has an avarage rating of 4.8 out of 5 stars based on over 712 ratings.
What you'll learn:
After completing the Discrete Optimization course by Professor Pascal Van Hentenryck on Coursera, students can expect to gain the following skills:
Formulate and solve optimization problems using linear and integer programming models: Linear programming and integer programming are powerful mathematical techniques used to solve optimization problems. In this course, students will learn how to use these techniques to formulate and solve a variety of optimization problems, such as scheduling, logistics, and resource allocation problems. They will learn how to model the problem mathematically, use optimization software to solve it, and interpret the results.
Understand the principles and techniques of constraint programming and its applications to combinatorial optimization problems: Constraint programming is another approach to solving optimization problems that can be particularly effective for combinatorial problems. In this course, students will learn the principles and techniques of constraint programming, including how to model problems using constraints and how to use constraint solvers to find optimal solutions. They will also learn how to apply these techniques to a range of optimization problems, such as job scheduling and vehicle routing.
Apply local search algorithms to solve discrete optimization problems: Local search algorithms are a family of optimization algorithms that work by iteratively improving a candidate solution. In this course, students will learn how to use local search algorithms to solve discrete optimization problems, such as the traveling salesman problem and the maximum independent set problem. They will learn different types of local search algorithms, such as hill climbing and simulated annealing, and how to implement them in Python.
Use dynamic programming to solve multi-stage decision problems and optimization problems with overlapping subproblems: Dynamic programming is a technique for solving optimization problems that involve making decisions over multiple stages. In this course, students will learn how to use dynamic programming to solve multi-stage decision problems, such as the knapsack problem and the shortest path problem. They will also learn how to apply dynamic programming to optimization problems with overlapping subproblems, such as the longest common subsequence problem.
Apply advanced techniques such as cutting planes, mixed-integer nonlinear programming, and robust optimization to solve complex optimization problems: In addition to the techniques above, this course covers more advanced optimization techniques, such as cutting planes, mixed-integer nonlinear programming, and robust optimization. These techniques are useful for solving complex optimization problems in a variety of domains, such as finance, energy, and telecommunications.
Use state-of-the-art optimization software, including Gurobi and Google OR-Tools, to solve real-world optimization problems: In this course, students will learn how to use state-of-the-art optimization software to solve real-world optimization problems. They will use Gurobi, a commercial optimization software, and Google OR-Tools, an open-source optimization library, to solve a range of problems in different domains.
Analyze the complexity of algorithms and use appropriate data structures and algorithms to optimize performance: Optimization problems can be computationally expensive, especially for large-scale problems. In this course, students will learn how to analyze the complexity of algorithms and use appropriate data structures and algorithms to optimize performance. They will learn how to use big-O notation to analyze the time and space complexity of algorithms, and how to choose the best data structures and algorithms for a given problem.
Develop programming skills in Python and implement algorithms to solve optimization problems: Finally, this course is also designed to help students develop programming skills in Python. They will implement algorithms to solve optimization problems, and gain practical experience using Python libraries such as NumPy, SciPy, and Matplotlib.
Professor Pascal Van Hentenryck is a world-renowned computer scientist and optimization expert, currently serving as the Seth Bonder Collegiate Professor of Industrial and Operations Engineering at the University of Michigan. He has made significant contributions to the fields of artificial intelligence, constraint programming, and optimization, and has authored over 200 research articles and several influential books.
Prof. Van Hentenryck's expertise in optimization has led to numerous practical applications, including scheduling systems for airlines and transportation networks, energy management systems for smart grids, and planning and scheduling systems for manufacturing and logistics. He has also been recognized for his contributions to the field of constraint programming, receiving the prestigious INFORMS George Dantzig Prize in 2002.
In addition to his academic research, Prof. Van Hentenryck is also an accomplished educator, having taught optimization and constraint programming courses at several prestigious universities. He is known for his clear and engaging teaching style, and his ability to make complex concepts accessible to a wide audience.
Overall, Prof. Van Hentenryck is widely recognized as one of the leading experts in the field of optimization, and his contributions have had a significant impact on both theory and practice. His expertise and experience make him an ideal instructor for the Discrete Optimization course on Coursera, and students can expect to benefit greatly from his knowledge and insights.
The requirements for the Discrete Optimization course by Professor Pascal Van Hentenryck on Coursera are as follows:
Programming skills: Students are expected to have proficiency in at least one programming language such as Python, Java, or C++. They should be comfortable with programming concepts such as loops, conditional statements, and basic data structures such as arrays and linked lists.
Mathematical background: The course covers mathematical topics such as linear algebra, calculus, and discrete mathematics. Students should have a solid understanding of basic mathematical concepts such as functions, derivatives, integrals, vectors, and matrices. Knowledge of combinatorics and graph theory is also useful.
Optimization software: The course requires the use of optimization software such as Gurobi or CPLEX. Students should have access to a working installation of the software and should be able to run basic optimization models. Some programming experience in the software's programming language (such as Python for Gurobi) is also useful.
Time commitment: The course is self-paced, but it is recommended to spend at least 5-7 hours per week on the coursework. The course includes video lectures, quizzes, assignments, and a final project. The assignments and project may require significant time and effort.
Motivation and curiosity: The course covers challenging and intellectually stimulating material, and students should come in with a strong motivation to learn and explore new concepts. The ability to think creatively and abstractly is essential for success in the course.
Computer and internet access: Students should have access to a computer with a reliable internet connection. The course materials are available online and require streaming videos, downloading software, and uploading assignments.