We may earn an affiliate commission when you visit our partners.
Course image
Pierre Schaus, Laurent Michel, and Pascal Van Hentenryck

Today more than ever, the optimal use of resources has become a very important issue. Many decision problems (logistics, production, space, etc.) aiming at an optimal use of resources can be formulated as constraint combinatorial optimization problems. Unfortunately, these problems are difficult to solve mainly for two reasons :

Read more

Today more than ever, the optimal use of resources has become a very important issue. Many decision problems (logistics, production, space, etc.) aiming at an optimal use of resources can be formulated as constraint combinatorial optimization problems. Unfortunately, these problems are difficult to solve mainly for two reasons :

  1. They require complex algorithms to design and develop,
  2. Finding an optimal solution can be computationally intensive.

In this course, we will learn the basics of constraint programming: a paradigm that aims to reduce the cost of developing and solving combinatorial problems through extensive reuse of code, whose design is open-ended, but also through pruning techniques of the search space by reasoning at the level of constraints.

During the proposed projects, you will develop your own constraint programming solver in Java that we will gradually extend in functionality in order to solve more and more complex combinatorial problems, especially in scheduling and vehicle routing. You will also develop global constraints, implement search strategies, model problems, and measure the impact of modeling choices on the efficiency of the solution.

Each module first introduces the concepts through videos, then a programming project is proposed to put these concepts into practice.

Three deals to help you save

What's inside

Learning objectives

  • Understand the constraint programming paradigm
  • Design and implement a modern constraint programming library
  • Model using the constraint programming
  • Extend the solver with new global constraints
  • Design custom and black-box searches
  • Approach scheduling and vehicle routing problems with constraint programming

Syllabus

Module 1: From Backtracking Search to the Constraint Programming ParadigmStarting from a custom backtracking search algorithm for the N-Queens Problem, we will make the approach gradually more generic until the introduction of a purely declarative approach and the design a first tiny CP library.
Read more
Module 2: Introduction to Mini-CPThe design and internals (variables, domains, state restoration, etc.) of Mini-CP, the constraint programming library that is used along the course and that is extended in each assignment.
Module 3: The sum and element global constraintsTwo constraints that occur for solving most of the CP problems. Design of their filtering algorithms, study of their properties and implementation.
Module 4: The extensional table constraintIntroduction to the table constraint, the most generic one can imagine in CP. Study of some of its application, and filtering algorithms for this constraint.
Module 5: The alldifferent constraintStudy of the alldifferent global constraint as an illustration of an elegant reuse of well-known graph algorithms embedded into the filtering of constraints.
Module 6: The Circuit constraint and Vehicle Routing Problems (VRP)Introduction to solving VRP with CP using the successor model and the circuit global constraint. Introduction to solving optimization problems with CP and Large Neighborhood search.
Module 7: Cumulative Scheduling ProblemsIntroduction to Scheduling with CP and the cumulative constraint, instrumental for scheduling non preemptive tasks with resource requirements.
Module 8: Disjunctive Scheduling ProblemsA specific case of scheduling problems is the one of disjunctive resource where activities cannot overlap in time. We will study specific filtering and search techniques and apply it to solve the well kownknown job-shop problem.
Module 9: Blackbox SearchIntroduction to efficient search heuristics independent of the problem to solve. All these searches are declinations of the well-known first-fail principle.
Module 10: ModelingIntroduction to advanced modeling techniques to boost the solving of your problems, including redundant constraints, and symmetry breaking.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Develops advanced modeling techniques and global constraints, which are core skills for solving complex combinatorial problems
Taught by Pierre Schaus, Laurent Michel, Pascal Van Hentenryck, who are recognized for their work in constraint programming
Uses Mini-CP, a constraint programming library, which is essential for solving combinatorial problems
Covers a wide range of topics in constraint programming, including scheduling, vehicle routing, and cumulative scheduling problems
Provides hands-on experience in developing and extending a constraint programming solver
Builds a strong foundation for beginners in constraint programming

Save this course

Save Constraint Programming to your list so you can find it easily later:
Save

Reviews summary

Engaging intro to csp

Learners say this is a great intro to modern CSP that uses a project-based approach. The course setup makes sense, and you begin by using the CSP solver implemented in Java. Each week, you will improve on your implementation.
The course uses project-based learning.
"Using the project-based approach makes sense."
The course material is interesting.
"Great intro to the modern CSP!"

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Constraint Programming with these activities:
Refresh your Java skills by reviewing object-oriented programming concepts and syntax
Brushing up on Java fundamentals will provide a solid foundation for understanding constraint programming.
Show steps
  • Review Java syntax and basic data types
  • Practice writing simple Java programs
  • Create a Java class with methods and fields
Read 'Constraint Programming' by Pascal Van Hentenryck
This book provides a comprehensive overview of constraint programming, covering the foundational concepts and advanced techniques that you will encounter in the course.
Show steps
  • Read chapters 1-3 to understand the basic principles of constraint programming
  • Work through the examples and exercises provided in the book
Follow online tutorials on Mini-CP, a constraint programming library for Java
Mini-CP is a powerful constraint programming library that can be used to solve a wide range of problems. These tutorials will help you gain proficiency in using Mini-CP.
Show steps
  • Go through the Mini-CP tutorial series
  • Practice solving constraint programming problems using Mini-CP
Five other activities
Expand to see all activities and additional details
Show all eight activities
Solve constraint satisfaction problems using backtracking search
Practicing backtracking search will help you develop a deeper understanding of constraint programming and improve your problem-solving skills.
Show steps
  • Implement a backtracking search algorithm in Java
  • Solve a series of constraint satisfaction problems using the implemented algorithm
  • Analyze the performance of your algorithm for different problem sizes
Participate in a study group or discussion forum to discuss constraint programming concepts and problems
Engaging in discussions with peers will help you clarify your understanding and learn from others' perspectives, which can enhance your learning outcomes.
Browse courses on Constraint Programming
Show steps
  • Join a study group or discussion forum
  • Actively participate in discussions and ask questions
Create a blog post or video tutorial explaining a constraint programming technique
By creating a blog post or video tutorial, you will reinforce your understanding of constraint programming and share your knowledge with others.
Browse courses on Constraint Programming
Show steps
  • Choose a constraint programming technique to explain
  • Write a blog post or create a video tutorial explaining the technique
  • Share your content with others
Mentor a fellow student who is struggling with constraint programming concepts
Mentoring others not only benefits the mentee but also reinforces your own understanding of the subject matter.
Browse courses on Mentoring
Show steps
  • Identify a student who needs help with constraint programming
  • Provide guidance and support to the student
  • Reflect on your own understanding of constraint programming
Contribute to an open-source constraint programming project
Contributing to open-source projects allows you to apply your skills, collaborate with others, and make valuable contributions to the constraint programming community.
Browse courses on Open Source
Show steps
  • Find an open-source constraint programming project to contribute to
  • Identify a task or issue to work on
  • Submit a pull request with your contribution

Career center

Learners who complete Constraint Programming will develop knowledge and skills that may be useful to these careers:
Software Engineer
A Software Engineer designs, builds, and maintains software applications. As a Constraint Programming expert, you will leverage your advanced problem-solving skills and understanding of constraint modeling to optimize software performance and efficiency. The ability to quickly develop, prototype, and test software solutions gives you a competitive edge in the industry.
Quantitative Analyst
A Quantitative Analyst develops mathematical and statistical models to assess risk and make investment decisions. Your expertise in Constraint Programming will be invaluable as you work with complex datasets and financial models. The ability to understand and optimize financial problems will make you a highly sought-after candidate in the金融业.
Data Scientist
A Data Scientist extracts valuable insights from complex data. By taking this course, you will build a solid foundation in data analysis and optimization. This will enable you to develop intelligent data-driven solutions that help businesses make informed decisions. Furthermore, you will gain a competitive edge in the job market.
Operations Research Analyst
An Operations Research Analyst uses mathematical and analytical techniques to improve operational efficiency. Your skills in Constraint Programming will provide you with a strong foundation in modeling and solving complex optimization problems. You will be able to design and implement solutions that enhance productivity and reduce costs in various industries.
Business Analyst
A Business Analyst identifies and analyzes business needs and develops solutions. By taking this course, you will gain valuable problem-solving and analytical skills. These skills will enable you to effectively bridge the gap between business stakeholders and technical teams, making you an essential asset to any organization.
Project Manager
A Project Manager plans, executes, and monitors projects. Expertise in Constraint Programming will equip you with a systematic approach to project management. You will be able to optimize resource allocation, manage project timelines, and ensure successful project outcomes, giving you a competitive edge in managing complex projects.
Systems Engineer
A Systems Engineer designs, develops, and maintains complex systems. Your understanding of constraint modeling and optimization will be vital in ensuring the reliability and efficiency of these systems. You will be able to identify and resolve potential issues, contributing to the successful development and deployment of complex systems.
Data Engineer
A Data Engineer designs and implements data management systems. With your knowledge in Constraint Programming, you can optimize data pipelines and ensure efficient data storage and retrieval. This skillset is highly sought after as organizations strive to manage and utilize their growing data assets.
Computational Scientist
A Computational Scientist uses computational techniques to solve complex scientific problems. As a Constraint Programming expert, you will have the necessary skills to develop efficient and accurate models for scientific research. This will enable you to contribute to advancements in various scientific fields, including physics, chemistry, and biology.
Machine Learning Engineer
A Machine Learning Engineer develops and deploys machine learning models. By taking this course, you will gain foundational knowledge in constraint modeling and optimization techniques. This will enable you to design and implement efficient algorithms for machine learning tasks, such as model training and hyperparameter tuning.
Supply Chain Manager
A Supply Chain Manager plans, executes, and controls the movement of goods and services. Your skills in Constraint Programming will enable you to optimize supply chain networks. You can design and implement efficient logistics and distribution systems, reducing costs and improving customer service levels.
Financial Analyst
A Financial Analyst provides financial advice and guidance. Your expertise in Constraint Programming will provide you with an analytical edge in evaluating financial data, making investment recommendations, and managing financial risks. You will be able to develop innovative financial models that optimize investment portfolios and minimize risks.
Risk Manager
A Risk Manager identifies, assesses, and mitigates risks. Your expertise in Constraint Programming will empower you with a systematic approach to risk management. You can develop and implement risk management strategies, ensuring the resilience and continuity of organizations.
Statistician
A Statistician collects, analyzes, and interprets data. By taking this course, you will gain valuable skills in statistical modeling and inference. These skills will enable you to design and conduct effective statistical studies, providing insights from complex data to support decision-making.
Software Developer
A Software Developer designs, develops, and tests software applications. While Constraint Programming is not a direct requirement for this role, the problem-solving and analytical skills gained from the course will complement your technical abilities. You can apply these skills to write efficient and reliable code and solve complex software development challenges.

Reading list

We've selected six books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Constraint Programming.
This comprehensive handbook of constraint programming, covering a wide range of topics from basic concepts to advanced techniques. Suitable for researchers, practitioners, and advanced students.
Provides a practical introduction to constraint programming, using Prolog as the implementation language. Suitable for students and programmers with a basic understanding of programming.
This tutorial provides an introduction to the CP Optimizer constraint programming solver from IBM. Suitable for programmers with a background in Java or C++.
Provides a tutorial for ECLiPSe, a constraint programming language. ECLiPSe high-level language that makes it easy to model and solve constraint programming problems. This book would be a valuable resource for anyone who wants to learn how to use ECLiPSe.
Provides a practical introduction to constraint programming in Java, with a focus on the Java constraint programming library. It valuable resource for students, researchers, and practitioners who want to learn how to use Java to solve combinatorial problems.
Provides a practical introduction to constraint programming in Haskell, with a focus on the Haskell constraint programming library. It valuable resource for students, researchers, and practitioners who want to learn how to use Haskell to solve combinatorial problems.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Here are nine courses similar to Constraint Programming.
Discrete Optimization
Most relevant
Algorithmic Solutions: Design, Problem Solving, Reporting
Approximation Algorithms and Linear Programming
Non Linear Programming Problem For Academics and Research
Optimization with GAMS: Operations Research Bootcamp A-Z
Optimization with Python: Solve Operations Research...
Approximation Algorithms Part I
Greedy Algorithms, Minimum Spanning Trees, and Dynamic...
Advanced Algorithms and Complexity
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser