[ 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