Я хочу использовать Google Or-tools для применения интерактивной конфигурации. Поэтому мне нужно знать, как применять пропагатор ограничений для фильтрации переменных доменов.
Например, предположим, что следующая программа:
CpModel model = new CpModel();
// Create variables x and y
IntVar x = model.newIntVarFromDomain(Domain.fromValues(new long[]{1, 2, 3, 4}), "x");
IntVar y = model.newIntVarFromDomain(Domain.fromValues(new long[]{1, 2, 3, 4}), "y");
// Tuple constraint
model.addAllowedAssignments(new IntVar[]{x, y}, new int[][]{{2, 1}, {2, 4}});
// Equality constraint
model.addEquality(x, 2);
CpSolver solver = new CpSolver();
Хорошо, я знаю, что выполнение алгоритмов решения над этим наименьшим проблема быстро Однако, когда эта проблема будет становиться все больше и больше, решение окажется очень дорогим. В данный конкретный момент c мне нужно применить алгоритмы фильтрации для ужесточения переменных доменов на основе ограничений.
В частности, я хотел бы продолжить выполнение программы, выполнив следующие операции:
Как распространить алгоритмы фильтрации на переменные области? Что-то вроде: solver.propagate()
?
Как перечислить переменные домены? Я ожидал бы некоторый результат как:
System.out.println(x.getBuilder().getDomainList()); // Should print x = [2]
System.out.println(y.getBuilder().getDomainList()); // Should print y = [1, 4]