PROC CLP for constraint logic programming has long been a valuable component of SAS/OR, providing methods for modeling and solving optimization problems and constraint satisfaction problems that often feature intricate logical constraints. In SAS/OR 13.2, these methods are also accessible from PROC OPTMODEL when you use the SOLVE WITH CLP statement. This enables you to include constraint programming as a component of a larger optimization process, in conjunction with other optimization modeling and solution methods.
The CLP solver can be used to find one solution, all solutions, or up to a specified number of solutions. In addition to linear constraints, the CLP solver supports the following constraint classes:
All-different constraint: requires that among the specified set of variables, no two variables can take the same value. A single all-different constraint can replace a large number of binary not-equal-to constraints.
Element constraint: creates a dependency between two variables, in which the value of the first variable indicates which value (from a specified list) the second variable takes. This dependency might correspond to a relationship, functional or otherwise, between the variables.
Global cardinality constraint (GCC): specifies the minimum and maximum number of times each of a group of values can be assigned among a group of variables. One GCC statement can define several global cardinality constraints, each of which compactly expresses a relationship between a specific value and multiple decision variables. You can also use global cardinality constraints to define disjoint variable domains, by barring a set of variables from taking specified values in the domain (setting both the minimum and the maximum count for each barred value to zero).
Lexicographic constraint: requires one array to be lexicographically less than (or less than or equal to) a second array of the same size. Lexicographic ordering, a generalization of alphabetical ordering to encompass numeric values, can be very useful in eliminating certain types of symmetry that can arise among solutions. Imposing a lexicographic ordering eliminates many of the mutually symmetric solutions, reducing the number of permissible solutions to the problem and in turn shortening the solution process.
Pack constraint: defines a bin-packing constraint, in which items that have specified sizes must be placed in bins that have specified capacities. A number of real-world restrictions that are associated with resource allocation and consumption can be modeled using bin-packing constraints.
Reify constraint: associates a binary control variable with a specified linear constraint. The control variable takes the value 1 if the constraint is satisfied and 0 otherwise. The importance of binary control variables in optimization modeling is well established.