Или-инструменты: Как использовать BoolVar/Изменить границы существующего IntVarJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Или-инструменты: Как использовать BoolVar/Изменить границы существующего IntVar

Сообщение Anonymous »

Я хотел расширить задачу цеха для CP-Sat Solver, добавив дополнительные задачи, которые не обязательно выполнять. Но моя проблема в том, что я на самом деле не знаю, как «удалить» задачу из модели, если BoolVar имеет значение true.
Я добавил логическое значение в класс Task и активная BoolVar для класса TaskType

Код: Выделить всё

public class Task {
int machine;
int[] duration;
String name;
boolean optional;
Task(int machine, int[] duration, String name, boolean optional) {
this.machine = machine;
this.duration = duration;
this.name = name;
this.optional = optional;
}
}

public class TaskType {
IntVar start;
IntVar end;
IntervalVar interval;
BoolVar active;
}
Моя первая идея заключалась в том, что если TaskType.active == false, то я не добавляю TaskType в список allTasks, поэтому он не учитывается моделью. как задачу, которую необходимо выполнить. Но, насколько я понимаю, нет возможности сравнить BoolVar, потому что его состояние технически неопределенно (если вы понимаете, о чем я?)
В той части, где мы создаем TaskTypes в ссылке выше мой код (часть) выглядит следующим образом:

Код: Выделить всё

if(task.optional) {
taskType.active = model.newBoolVar(task.name + "_activeStatus");
}

taskType.interval = model.newIntervalVar(
taskType.start,
model.newIntVar(task.duration[0], task.duration[1], task.name + "_duration"),
taskType.end,
"interval" + suffix);

Код: Выделить всё

task.duration
 — это массив целых чисел, минимальная длительность которого указана в длительности[0], а максимальная длительность – в длительности[1].
При этом Я, честно говоря, не знаю, как поступить. Я подумал об установке длительности TaskType.duration равной нулю, если TaskType.active == true, возможно, с помощью onlyEnforceIf() , чтобы это не влияло на конечную продолжительность все задачи, а затем отфильтровать их в выходных данных. Но опять же, я не нашел способа использовать onlyEnforceIf() таким образом.
Моя проблема по сути заключается в том, что я хочу сделать TaskType «нерелевантным», если он BoolVar active верен, возможно, путем изменения существующих границ IntVars (но я также не выяснил, возможно ли это вообще).
Может быть, у кого-то из вас есть подсказка от меня заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/787 ... tng-intvar
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»