21 import java.util.ArrayList;
22 import java.util.List;
27 System.loadLibrary(
"jniortools");
39 int numTasks = starts.length;
43 for (
int i = 0; i < numTasks; ++i) {
44 for (
int j = 0; j < numTasks; ++j) {
46 precedences[i][i] = presences[i];
49 precedences[i][j] = prec;
57 for (
int i = 0; i < numTasks - 1; ++i) {
58 for (
int j = i + 1; j < numTasks; ++j) {
59 List<Literal> list =
new ArrayList<>();
60 list.add(precedences[i][j]);
61 list.add(precedences[j][i]);
62 list.add(presences[i].not());
66 list.add(presences[j].not());
83 for (
int i = 0; i < numTasks; ++i) {
85 int[] coefs =
new int[numTasks + 1];
86 for (
int j = 0; j < numTasks; ++j) {
87 vars[j] = (
IntVar) precedences[j][i];
90 vars[numTasks] = ranks[i];
97 public static void main(String[] args)
throws Exception {
111 for (
int t = 0; t < numTasks; ++t) {
112 starts[t] = model.
newIntVar(0, horizon,
"start_" + t);
113 int duration = t + 1;
114 ends[t] = model.
newIntVar(0, horizon,
"end_" + t);
115 if (t < numTasks / 2) {
116 intervals[t] = model.
newIntervalVar(starts[t], duration, ends[t],
"interval_" + t);
117 presences[t] = trueVar;
119 presences[t] = model.
newBoolVar(
"presence_" + t);
121 starts[t], duration, ends[t], presences[t],
"o_interval_" + t);
125 ranks[t] = model.
newIntVar(-1, numTasks - 1,
"rank_" + t);
132 rankTasks(model, starts, presences, ranks);
139 for (
int t = 0; t < numTasks; ++t) {
150 int[] objectiveCoefs =
new int[numTasks + 1];
151 for (
int t = 0; t < numTasks; ++t) {
152 objectiveVars[t] = (
IntVar) presences[t];
153 objectiveCoefs[t] = -7;
155 objectiveVars[numTasks] = makespan;
156 objectiveCoefs[numTasks] = 2;
165 System.out.println(
"Makespan: " + solver.
value(makespan));
166 for (
int t = 0; t < numTasks; ++t) {
168 System.out.printf(
"Task %d starts at %d with rank %d%n", t, solver.
value(starts[t]),
169 solver.
value(ranks[t]));
172 "Task %d in not performed and ranked at %d%n", t, solver.
value(ranks[t]));
176 System.out.println(
"Solver exited with nonoptimal status: " + status);
Code sample to demonstrates how to rank intervals.
static void main(String[] args)