(X1 or neg X2 or X3 $= 1.
This represents the clause X1 ∨ ¬ X2 ∨ X3.tent_init to find an initial solution
conflict_constraints and term_variables to find a
variable to label
set_to_tent to set the remaining variables to their
tentative values
|
guess is naive. Since the variable
occurs in a conflict constraint it would arguably be better to label
it to another value. This would be implemented as follows:
|
|
TimePoint1 and TimePoint2 are variables (or numbers),
but we assume, for this example, that the
Interval is a number.
This constraint can enforce a minimum separation between start times,
or a maximum separation (if the Interval is negative). It can
also enforce constraints between end times, by adjusting the
Interval to account for the task durations.
|
End which is
constrained to come after all the tasks.
Ignoring the resource constraints, the temporal constraints are easily
handled by ic.
The optimal solution is obtained simply by posting the temporal
constraints and then instantiating each start
time to the lowest value in its domain.Start2 #>= Start1+Duration1 to ic.
On backtracking, the second clause will be unfolded instead.
|
bridge_repair.pl.
Repair naturally supports conflict minimisation. This algorithm can be combined with other solvers, such as ic, and with optimization.
Figure 13.3: Conflict Minimisation