3.7.59. Constructive disjunction
A constraint for which a filtering algorithm uses constructive disjunction. Constructive disjunctionΒ [VanHentenryckSaraswatDeville95], [WurtzMuller96] is a technique for handling in an active way a set of disjunctive constraints. It consists to try out each alternative of a disjunction and then to remove values that were pruned in all alternatives. TableΒ 3.7.14 illustrates this technique in the context of a non-overlapping constraint between two rectangles (i.e., a special case of the constraint). The first rectangle has a width of 3 and a height of 2, while the second rectangle has a width of 2 and a height of 5. The coordinates of the lower leftmost corner of have to be respectively located within intervals and . Similarly the coordinates of the lower leftmost corner of have to be located within and .
Hypothesis regarding the respective position of and | |||
before : | after : | below : | on top of : |
contradiction | contradiction | contradiction | |
Removed values from each variable according to each hypothesis | |||
Values finally removed: value 3 from and value 4 from |
In the context of the constraint, constructive disjunction is applied on each sink node of the dag describing the set of solutions (i.e., we remove values that are removed in all the sink nodes).
In the context of the (respectively ) constraint, constructive disjunction can be applied on each pair of tasks (respectively objects). However, as described in the Algorithm slots of these two constraints, more specific and efficient filtering algorithms exist for both constraints.
In the context of the constraint, constructive disjunction is applied on the different potential values of the shape variable of an object in order to prune its coordinates.