# Why constraint programming?

Constraint programming is a native satisfiability technology that takes its roots in computer science—logic programming, graph theory, and the artificial intelligence efforts of the 1980s. Recent progress in the development of tunable and robust black-box search for constraint programming engines have turned this technology into a powerful and easy-to-use optimization technology.

Constraint programming has proven very efficient for solving scheduling problems. Getting Started with Scheduling in CPLEX Studio

is an introductory tutorial on the use of constraint programming-based scheduling in OPL. The “Language Reference Manual” provides more information.

Constraint programming is also an efficient approach to solving and optimizing problems that are too irregular for mathematical optimization. This includes time tabling problems, sequencing problems, and allocation or rostering problems.

The reasons for these irregularities that make the problem difficult to solve for mathematical optimization can be:

Constraints that are nonlinear in nature

A non convex solution space that contains many locally optimal solutions

Multiple disjunctions, which result in poor information returned by a linear relaxation of the problem

Read Constraint programming versus mathematical programming for a detailed comparison.