The repair library allows a tentative value to be associated with any variable [28]. This tentative value may violate constraints on the variable, in which case the constraint is recorded in a list of violated constraints. The repair library also supports propagation invariants [18]. Using invariants, if a variable’s tentative value is changed, the consequences of this change can be propagated to any variables whose tentative values depend on the changed one. The use of tentative values in search is illustrated in chapter 13.
For scheduling applications where the cost is dependent on each start time, a combination of solvers can be very powerful. For example, we can use finite domain propagation to reason on resources and linear constraint solving to reason on cost [7]. The probing_for_scheduling library supports such a combination, via a similar user interface to the cumulative constraint mentioned above in section 7.2.3. For more details see chapter 17.