[ 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