[ library(fd) | Reference Manual | Alphabetic Index ]

disjunctive(?Starts, +Durations, ?Flags)

Succeeds if there exists a sequential ordering of non-overlapping tasks with starting times Starts and durations Durations, with respect to the ordering priorities of single pairs of tasks (elementary disjunctions) represented in the list Flags.
?Starts
A list of finite domain variables or integers
+Durations
A list of integers
?Flags
A list of finite domain variables or integers

Description

This constraint can be used by job-shop problems on single machine. The tasks to be scheduled on one machine are represented by their starting times (Starts) and durations (Durations). The actual ordering of tasks is represented by list of priority flags (Flags). The core constraint performs an exhaustive scheme based on maximal subset using extended Carlier and Pinson techniques. This constraint reacts to reduction events on the flags of the elementary disjunctions it is connected to, in turn it might perform reductions on those flags. It also updates starting times of operations according to the necessary partial orderings it discovers.

If some of the elements in the lists Starts or Flags is not ground, this predicate delays.

Fail Conditions

Fails, if no possible ordering of given list of tasks exist.

Resatisfiable

No.

Examples

   [eclipse 3]: [X, Y]::1..10, disjunctive([X, Y], [5, 7], F).
   X = X[1..10]
   Y = Y[1..10]
   F = [_g1124[1, 2]]
   Delayed goals:
   disjunction_choose_1(X[1..10], 5, Y[1..10], 7, _g1124[1, 2])
   disjunctive(starts(X[1..10], Y[1..10]), durations(5, 7), [_g1124[1, 2]],
   flags(_g998, _g1124, _g1002, _g1004))
   yes.
   [eclipse 3]: [X, Y, Z]::1..10, disjunctive([X, Y, Z], [3, 7, 5], [1, 2,
   1]).
   no (more) solution.
   [eclipse 4]: [X, Y, Z]::1..10, disjunctive([X, Y, Z], [3, 7, 5], [1, 1,
   2]).
   X = X[1, 2]
   Y = Y[9, 10]
   Z = Z[4, 5]
   Delayed goals:
   Y[9, 10] - X[1, 2]#>=3
   Y[9, 10] - Z[4, 5]#>=5
   Z[4, 5] - X[1, 2]#>=3
   Z[4, 5] - X[1, 2]#>=3
   disjunction_choose_1(X[1, 2], 3, Z[4, 5], 5, 1)
   disjunction_choose_1(X[1, 2], 3, Y[9, 10], 7, 1)
   disjunction_choose_1(Y[9, 10], 7, Z[4, 5], 5, 2)
   disjunctive(starts(X[1, 2], Y[9, 10], Z[4, 5]), durations(3, 7, 5), [1,
   1, 2], flags(_g1080, 1, 1, _g1086, _g1088, 2, _g1092, _g1094, _g1096))
   yes.



See Also

disjunction_choose / 5