public final class CpModel
extends java.lang.Object
Proposes a factory to create all modeling objects understood by the SAT solver.
Modifier and Type | Class and Description |
---|---|
static class |
CpModel.MismatchedArrayLengths
Exception thrown when parallel arrays have mismatched lengths.
|
static class |
CpModel.WrongLength
Exception thrown when an array has a wrong length.
|
Constructor and Description |
---|
CpModel() |
Modifier and Type | Method and Description |
---|---|
Constraint |
addAbsEquality(LinearArgument target,
LinearArgument expr)
Adds
target == Abs(expr) . |
Constraint |
addAllDifferent(java.lang.Iterable<? extends LinearArgument> expressions)
Adds
AllDifferent(expressions) . |
Constraint |
addAllDifferent(LinearArgument[] expressions)
Adds
AllDifferent(expressions) . |
TableConstraint |
addAllowedAssignments(java.lang.Iterable<? extends LinearArgument> expressions)
Adds
AllowedAssignments(expressions) . |
TableConstraint |
addAllowedAssignments(LinearArgument[] expressions)
Adds
AllowedAssignments(expressions) . |
void |
addAssumption(Literal lit)
Adds a literal to the model as assumption
|
void |
addAssumptions(Literal[] literals)
Adds multiple literals to the model as assumptions
|
Constraint |
addAtLeastOne(java.lang.Iterable<Literal> literals)
Same as addBoolOr.
|
Constraint |
addAtLeastOne(Literal[] literals)
Same as addBoolOr.
|
Constraint |
addAtMostOne(java.lang.Iterable<Literal> literals)
Adds
AtMostOne(literals): Sum(literals) <= 1 . |
Constraint |
addAtMostOne(Literal[] literals)
Adds
AtMostOne(literals): Sum(literals) <= 1 . |
AutomatonConstraint |
addAutomaton(java.lang.Iterable<? extends LinearArgument> transitionExpressions,
long startingState,
long[] finalStates)
Adds an automaton constraint.
|
AutomatonConstraint |
addAutomaton(LinearArgument[] transitionExpressions,
long startingState,
long[] finalStates)
Adds an automaton constraint.
|
Constraint |
addBoolAnd(java.lang.Iterable<Literal> literals)
Adds
And(literals) == true . |
Constraint |
addBoolAnd(Literal[] literals)
Adds
And(literals) == true . |
Constraint |
addBoolOr(java.lang.Iterable<Literal> literals)
Adds
Or(literals) == true . |
Constraint |
addBoolOr(Literal[] literals)
Adds
Or(literals) == true . |
Constraint |
addBoolXor(java.lang.Iterable<Literal> literals)
Adds
XOr(literals) == true . |
Constraint |
addBoolXor(Literal[] literals)
Adds
XOr(literals) == true . |
CircuitConstraint |
addCircuit()
Adds
Circuit() . |
CumulativeConstraint |
addCumulative(LinearArgument capacity)
Adds
Cumulative(capacity) . |
CumulativeConstraint |
addCumulative(long capacity)
Adds
Cumulative(capacity) . |
void |
addDecisionStrategy(java.lang.Iterable<? extends LinearArgument> expressions,
DecisionStrategyProto.VariableSelectionStrategy varStr,
DecisionStrategyProto.DomainReductionStrategy domStr)
Adds
DecisionStrategy(expressions, varStr, domStr) . |
void |
addDecisionStrategy(LinearArgument[] expressions,
DecisionStrategyProto.VariableSelectionStrategy varStr,
DecisionStrategyProto.DomainReductionStrategy domStr)
Adds
DecisionStrategy(expressions, varStr, domStr) . |
Constraint |
addDifferent(LinearArgument left,
LinearArgument right)
Adds {@code left !
|
Constraint |
addDifferent(LinearArgument expr,
long value)
Adds {@code expr !
|
Constraint |
addDivisionEquality(LinearArgument target,
LinearArgument num,
LinearArgument denom)
Adds
target == num / denom , rounded towards 0. |
Constraint |
addElement(LinearArgument index,
int[] values,
LinearArgument target)
Adds the element constraint:
values[index] == target . |
Constraint |
addElement(LinearArgument index,
java.lang.Iterable<? extends LinearArgument> expressions,
LinearArgument target)
Adds the element constraint:
expressions[index] == target . |
Constraint |
addElement(LinearArgument index,
LinearArgument[] expressions,
LinearArgument target)
Adds the element constraint:
expressions[index] == target . |
Constraint |
addElement(LinearArgument index,
long[] values,
LinearArgument target)
Adds the element constraint:
values[index] == target . |
Constraint |
addEquality(LinearArgument left,
LinearArgument right)
Adds
left == right . |
Constraint |
addEquality(LinearArgument expr,
long value)
Adds
expr == value . |
Constraint |
addExactlyOne(java.lang.Iterable<Literal> literals)
Adds
ExactlyOne(literals): Sum(literals) == 1 . |
Constraint |
addExactlyOne(Literal[] literals)
Adds
ExactlyOne(literals): Sum(literals) == 1 . |
TableConstraint |
addForbiddenAssignments(java.lang.Iterable<? extends LinearArgument> expressions)
Adds
ForbiddenAssignments(expressions) . |
TableConstraint |
addForbiddenAssignments(LinearArgument[] expressions)
Adds
ForbiddenAssignments(expressions) . |
Constraint |
addGreaterOrEqual(LinearArgument left,
LinearArgument right)
Adds
left >= right . |
Constraint |
addGreaterOrEqual(LinearArgument expr,
long value)
Adds
expr >= value . |
Constraint |
addGreaterThan(LinearArgument left,
LinearArgument right)
Adds
left > right . |
Constraint |
addGreaterThan(LinearArgument expr,
long value)
Adds
expr > value . |
void |
addHint(IntVar var,
long value)
Adds hinting to a variable
|
void |
addHint(Literal lit,
boolean value)
Adds hinting to a literal
|
Constraint |
addImplication(Literal a,
Literal b)
Adds
a => b . |
Constraint |
addInverse(IntVar[] variables,
IntVar[] inverseVariables)
Adds
Inverse(variables, inverseVariables) . |
Constraint |
addLessOrEqual(LinearArgument left,
LinearArgument right)
Adds
left <= right . |
Constraint |
addLessOrEqual(LinearArgument expr,
long value)
Adds
expr <= value . |
Constraint |
addLessThan(LinearArgument left,
LinearArgument right)
Adds
left < right . |
Constraint |
addLessThan(LinearArgument expr,
long value)
Adds
expr < value . |
Constraint |
addLinearConstraint(LinearArgument expr,
long lb,
long ub)
Adds
lb <= expr <= ub . |
Constraint |
addLinearExpressionInDomain(LinearArgument expr,
Domain domain)
Adds
expr in domain . |
void |
addMapDomain(IntVar var,
Literal[] booleans,
long offset)
Adds
var == i + offset <=> booleans[i] == true for all i in [0, booleans.length) . |
Constraint |
addMaxEquality(LinearArgument target,
java.lang.Iterable<? extends LinearArgument> exprs)
Adds
target == Max(exprs) . |
Constraint |
addMaxEquality(LinearArgument target,
LinearArgument[] exprs)
Adds
target == Max(vars) . |
Constraint |
addMinEquality(LinearArgument target,
java.lang.Iterable<? extends LinearArgument> exprs)
Adds
target == Min(exprs) . |
Constraint |
addMinEquality(LinearArgument target,
LinearArgument[] exprs)
Adds
target == Min(vars) . |
Constraint |
addModuloEquality(LinearArgument target,
LinearArgument var,
LinearArgument mod)
Adds
target == var % mod . |
Constraint |
addModuloEquality(LinearArgument target,
LinearArgument var,
long mod)
Adds
target == var % mod . |
MultipleCircuitConstraint |
addMultipleCircuit()
Adds
MultipleCircuit() . |
Constraint |
addMultiplicationEquality(LinearArgument target,
LinearArgument[] exprs)
Adds
target == Product(exprs) . |
Constraint |
addMultiplicationEquality(LinearArgument target,
LinearArgument left,
LinearArgument right)
Adds
target == left * right . |
Constraint |
addNoOverlap(IntervalVar[] intervalVars)
Adds
NoOverlap(intervalVars) . |
Constraint |
addNoOverlap(java.lang.Iterable<IntervalVar> intervalVars)
Adds
NoOverlap(intervalVars) . |
NoOverlap2dConstraint |
addNoOverlap2D()
Adds
NoOverlap2D(xIntervals, yIntervals) . |
ReservoirConstraint |
addReservoirConstraint(long minLevel,
long maxLevel)
Adds a reservoir constraint with optional refill/emptying events.
|
void |
clearAssumptions()
Remove all assumptions from the model
|
void |
clearHints()
Remove all solution hints
|
void |
clearObjective()
Clears the objective.
|
java.lang.Boolean |
exportToFile(java.lang.String file)
Write the model as a protocol buffer to 'file'.
|
Literal |
falseLiteral()
Returns the false literal.
|
BoolVar |
getBoolVarFromProtoIndex(int index)
Rebuilds a Boolean variable from an index.
|
CpModelProto.Builder |
getBuilder()
Returns the model builder.
|
CpModel |
getClone() |
IntVar |
getIntVarFromProtoIndex(int index)
Rebuilds an integer variable from an index.
|
boolean |
hasObjective()
Checks if the model contains an objective.
|
boolean |
isPositive(Literal lit) |
void |
maximize(DoubleLinearExpr expr)
Adds a maximization objective of a linear expression.
|
void |
maximize(LinearArgument expr)
Adds a maximization objective of a linear expression.
|
void |
minimize(DoubleLinearExpr expr)
Adds a minimization objective of a linear expression.
|
void |
minimize(LinearArgument expr)
Adds a minimization objective of a linear expression.
|
CpModelProto |
model() |
java.lang.String |
modelStats()
Returns some statistics on model as a string.
|
int |
negated(int index) |
BoolVar |
newBoolVar(java.lang.String name)
Creates a Boolean variable with the given name.
|
IntVar |
newConstant(long value)
Creates a constant variable.
|
IntervalVar |
newFixedInterval(long start,
long size,
java.lang.String name)
Creates a fixed interval from its start and its size.
|
IntervalVar |
newFixedSizeIntervalVar(LinearArgument start,
long size,
java.lang.String name)
Creates an interval variable from an affine expression start, and a fixed size.
|
IntervalVar |
newIntervalVar(LinearArgument start,
LinearArgument size,
LinearArgument end,
java.lang.String name)
Creates an interval variable from three affine expressions start, size, and end.
|
IntVar |
newIntVar(long lb,
long ub,
java.lang.String name)
Creates an integer variable with domain [lb, ub].
|
IntVar |
newIntVarFromDomain(Domain domain,
java.lang.String name)
Creates an integer variable with given domain.
|
IntervalVar |
newOptionalFixedInterval(long start,
long size,
Literal isPresent,
java.lang.String name)
Creates an optional fixed interval from start and size, and an isPresent literal.
|
IntervalVar |
newOptionalFixedSizeIntervalVar(LinearArgument start,
long size,
Literal isPresent,
java.lang.String name)
Creates an optional interval variable from an affine expression start, and a fixed size.
|
IntervalVar |
newOptionalIntervalVar(LinearArgument start,
LinearArgument size,
LinearArgument end,
Literal isPresent,
java.lang.String name)
Creates an optional interval variable from three affine expressions start, size, end, and
isPresent.
|
Literal |
trueLiteral()
Returns the true literal.
|
java.lang.String |
validate()
Returns a non empty string explaining the issue if the model is invalid.
|
public CpModel getClone()
public IntVar newIntVar(long lb, long ub, java.lang.String name)
public IntVar newIntVarFromDomain(Domain domain, java.lang.String name)
domain
- an instance of the Domain class.name
- the name of the variablepublic BoolVar newBoolVar(java.lang.String name)
public IntVar newConstant(long value)
public Literal trueLiteral()
public Literal falseLiteral()
public BoolVar getBoolVarFromProtoIndex(int index)
public IntVar getIntVarFromProtoIndex(int index)
public Constraint addBoolOr(Literal[] literals)
Or(literals) == true
.public Constraint addBoolOr(java.lang.Iterable<Literal> literals)
Or(literals) == true
.public Constraint addAtLeastOne(Literal[] literals)
Sum(literals) >= 1
.public Constraint addAtLeastOne(java.lang.Iterable<Literal> literals)
Sum(literals) >= 1
.public Constraint addAtMostOne(Literal[] literals)
AtMostOne(literals): Sum(literals) <= 1
.public Constraint addAtMostOne(java.lang.Iterable<Literal> literals)
AtMostOne(literals): Sum(literals) <= 1
.public Constraint addExactlyOne(Literal[] literals)
ExactlyOne(literals): Sum(literals) == 1
.public Constraint addExactlyOne(java.lang.Iterable<Literal> literals)
ExactlyOne(literals): Sum(literals) == 1
.public Constraint addBoolAnd(Literal[] literals)
And(literals) == true
.public Constraint addBoolAnd(java.lang.Iterable<Literal> literals)
And(literals) == true
.public Constraint addBoolXor(Literal[] literals)
XOr(literals) == true
.public Constraint addBoolXor(java.lang.Iterable<Literal> literals)
XOr(literals) == true
.public Constraint addImplication(Literal a, Literal b)
a => b
.public Constraint addLinearExpressionInDomain(LinearArgument expr, Domain domain)
expr in domain
.public Constraint addLinearConstraint(LinearArgument expr, long lb, long ub)
lb <= expr <= ub
.public Constraint addEquality(LinearArgument expr, long value)
expr == value
.public Constraint addEquality(LinearArgument left, LinearArgument right)
left == right
.public Constraint addLessOrEqual(LinearArgument expr, long value)
expr <= value
.public Constraint addLessOrEqual(LinearArgument left, LinearArgument right)
left <= right
.public Constraint addLessThan(LinearArgument expr, long value)
expr < value
.public Constraint addLessThan(LinearArgument left, LinearArgument right)
left < right
.public Constraint addGreaterOrEqual(LinearArgument expr, long value)
expr >= value
.public Constraint addGreaterOrEqual(LinearArgument left, LinearArgument right)
left >= right
.public Constraint addGreaterThan(LinearArgument expr, long value)
expr > value
.public Constraint addGreaterThan(LinearArgument left, LinearArgument right)
left > right
.public Constraint addDifferent(LinearArgument expr, long value)
expr != value
.public Constraint addDifferent(LinearArgument left, LinearArgument right)
left != right
.public Constraint addAllDifferent(LinearArgument[] expressions)
AllDifferent(expressions)
.
This constraint forces all affine expressions to have different values.
expressions
- a list of affine integer expressionspublic Constraint addAllDifferent(java.lang.Iterable<? extends LinearArgument> expressions)
AllDifferent(expressions)
.addAllDifferent(LinearArgument[]).
public Constraint addElement(LinearArgument index, LinearArgument[] expressions, LinearArgument target)
expressions[index] == target
.public Constraint addElement(LinearArgument index, java.lang.Iterable<? extends LinearArgument> expressions, LinearArgument target)
expressions[index] == target
.public Constraint addElement(LinearArgument index, long[] values, LinearArgument target)
values[index] == target
.public Constraint addElement(LinearArgument index, int[] values, LinearArgument target)
values[index] == target
.public CircuitConstraint addCircuit()
Circuit()
.
Adds an empty circuit constraint.
A circuit is a unique Hamiltonian cycle in a subgraph of the total graph. In case a node 'i'
is not in the cycle, then there must be a loop arc 'i -> i'
associated with a true
literal. Otherwise this constraint will fail.
public MultipleCircuitConstraint addMultipleCircuit()
MultipleCircuit()
.
Adds an empty multiple circuit constraint.
A multiple circuit is set of cycles in a subgraph of the total graph. The node index by 0 must be part of all cycles of length > 1. Each node with index > 0 belongs to exactly one cycle. If such node does not belong in any cycle of length > 1, then there must be a looping arc on this node attached to a literal that will be true. Otherwise, the constraint will fail.
public TableConstraint addAllowedAssignments(LinearArgument[] expressions)
AllowedAssignments(expressions)
.
An AllowedAssignments constraint is a constraint on an array of affine expressions that forces, when all expressions are fixed to a single value, that the corresponding list of values is equal to one of the tuples of the tupleList.
expressions
- a list of affine expressions (a * var + b)public TableConstraint addAllowedAssignments(java.lang.Iterable<? extends LinearArgument> expressions)
AllowedAssignments(expressions)
.public TableConstraint addForbiddenAssignments(LinearArgument[] expressions)
ForbiddenAssignments(expressions)
.
A ForbiddenAssignments constraint is a constraint on an array of affine expressions where the list of impossible combinations is provided in the tuples list.
expressions
- a list of affine expressions (a * var + b)public TableConstraint addForbiddenAssignments(java.lang.Iterable<? extends LinearArgument> expressions)
ForbiddenAssignments(expressions)
.public AutomatonConstraint addAutomaton(LinearArgument[] transitionExpressions, long startingState, long[] finalStates)
An automaton constraint takes a list of affine expressions (of size n), an initial state, a set of final states, and a set of transitions that will be added incrementally directly on the returned AutomatonConstraint instance. A transition is a triplet ('tail', 'transition', 'head'), where 'tail' and 'head' are states, and 'transition' is the label of an arc from 'head' to 'tail', corresponding to the value of one expression in the list of expressions.
This automaton will be unrolled into a flow with n + 1 phases. Each phase contains the possible states of the automaton. The first state contains the initial state. The last phase contains the final states.
Between two consecutive phases i and i + 1, the automaton creates a set of arcs. For each transition (tail, label, head), it will add an arc from the state 'tail' of phase i and the state 'head' of phase i + 1. This arc labeled by the value 'label' of the expression 'expressions[i]'. That is, this arc can only be selected if 'expressions[i]' is assigned the value 'label'.
A feasible solution of this constraint is an assignment of expressions such that, starting from the initial state in phase 0, there is a path labeled by the values of the expressions that ends in one of the final states in the final phase.
transitionExpressions
- a non empty list of affine expressions (a * var + b) whose values
correspond to the labels of the arcs traversed by the automatonstartingState
- the initial state of the automatonfinalStates
- a non empty list of admissible final statespublic AutomatonConstraint addAutomaton(java.lang.Iterable<? extends LinearArgument> transitionExpressions, long startingState, long[] finalStates)
public Constraint addInverse(IntVar[] variables, IntVar[] inverseVariables)
Inverse(variables, inverseVariables)
.
An inverse constraint enforces that if 'variables[i]' is assigned a value 'j', then inverseVariables[j] is assigned a value 'i'. And vice versa.
variables
- an array of integer variablesinverseVariables
- an array of integer variablesCpModel.MismatchedArrayLengths
- if variables and inverseVariables have different lengthpublic ReservoirConstraint addReservoirConstraint(long minLevel, long maxLevel)
Maintain a reservoir level within bounds. The water level starts at 0, and at any time, it must be within [min_level, max_level].
Given an event (time, levelChange, active), if active is true, and if time is assigned a value t, then the level of the reservoir changes by levelChange (which is constant) at time t. Therefore, at any time t:
sum(levelChanges[i] * actives[i] if times[i] <= t) in [min_level, max_level]
Note that min level must be <= 0, and the max level must be >= 0. Please use fixed level_changes to simulate an initial state.
minLevel
- at any time, the level of the reservoir must be greater of equal than the min
level. minLevel must me <= 0.maxLevel
- at any time, the level of the reservoir must be less or equal than the max
level. maxLevel must be >= 0.java.lang.IllegalArgumentException
- if minLevel > 0java.lang.IllegalArgumentException
- if maxLevel < 0public void addMapDomain(IntVar var, Literal[] booleans, long offset)
var == i + offset <=> booleans[i] == true for all i in [0, booleans.length)
.public Constraint addMinEquality(LinearArgument target, LinearArgument[] exprs)
target == Min(vars)
.public Constraint addMinEquality(LinearArgument target, java.lang.Iterable<? extends LinearArgument> exprs)
target == Min(exprs)
.public Constraint addMaxEquality(LinearArgument target, LinearArgument[] exprs)
target == Max(vars)
.public Constraint addMaxEquality(LinearArgument target, java.lang.Iterable<? extends LinearArgument> exprs)
target == Max(exprs)
.public Constraint addDivisionEquality(LinearArgument target, LinearArgument num, LinearArgument denom)
target == num / denom
, rounded towards 0.public Constraint addAbsEquality(LinearArgument target, LinearArgument expr)
target == Abs(expr)
.public Constraint addModuloEquality(LinearArgument target, LinearArgument var, LinearArgument mod)
target == var % mod
.public Constraint addModuloEquality(LinearArgument target, LinearArgument var, long mod)
target == var % mod
.public Constraint addMultiplicationEquality(LinearArgument target, LinearArgument[] exprs)
target == Product(exprs)
.public Constraint addMultiplicationEquality(LinearArgument target, LinearArgument left, LinearArgument right)
target == left * right
.public IntervalVar newIntervalVar(LinearArgument start, LinearArgument size, LinearArgument end, java.lang.String name)
An interval variable is a constraint, that is itself used in other constraints like NoOverlap.
Internally, it ensures that start + size == end
.
start
- the start of the interval. It needs to be an affine or constant expression.size
- the size of the interval. It needs to be an affine or constant expression.end
- the end of the interval. It needs to be an affine or constant expression.name
- the name of the interval variablepublic IntervalVar newFixedSizeIntervalVar(LinearArgument start, long size, java.lang.String name)
An interval variable is a constraint, that is itself used in other constraints like NoOverlap.
start
- the start of the interval. It needs to be an affine or constant expression.size
- the fixed size of the interval.name
- the name of the interval variable.public IntervalVar newFixedInterval(long start, long size, java.lang.String name)
public IntervalVar newOptionalIntervalVar(LinearArgument start, LinearArgument size, LinearArgument end, Literal isPresent, java.lang.String name)
An optional interval variable is a constraint, that is itself used in other constraints like
NoOverlap. This constraint is protected by an isPresent
literal that indicates if it is
active or not.
Internally, it ensures that isPresent => start + size == end
.
start
- the start of the interval. It needs to be an affine or constant expression.size
- the size of the interval. It needs to be an affine or constant expression.end
- the end of the interval. It needs to be an affine or constant expression.isPresent
- a literal that indicates if the interval is active or not. A inactive interval
is simply ignored by all constraints.name
- The name of the interval variablepublic IntervalVar newOptionalFixedSizeIntervalVar(LinearArgument start, long size, Literal isPresent, java.lang.String name)
An interval variable is a constraint, that is itself used in other constraints like NoOverlap.
start
- the start of the interval. It needs to be an affine or constant expression.size
- the fixed size of the interval.isPresent
- a literal that indicates if the interval is active or not. A inactive interval
is simply ignored by all constraints.name
- the name of the interval variable.public IntervalVar newOptionalFixedInterval(long start, long size, Literal isPresent, java.lang.String name)
public Constraint addNoOverlap(IntervalVar[] intervalVars)
NoOverlap(intervalVars)
.
A NoOverlap constraint ensures that all present intervals do not overlap in time.
intervalVars
- the list of interval variables to constrainpublic Constraint addNoOverlap(java.lang.Iterable<IntervalVar> intervalVars)
NoOverlap(intervalVars)
.addNoOverlap(IntervalVar[]).
public NoOverlap2dConstraint addNoOverlap2D()
NoOverlap2D(xIntervals, yIntervals)
.
A NoOverlap2D constraint ensures that all present rectangles do not overlap on a plan. Each rectangle is aligned with the X and Y axis, and is defined by two intervals which represent its projection onto the X and Y axis.
Furthermore, one box is optional if at least one of the x or y interval is optional.
public CumulativeConstraint addCumulative(LinearArgument capacity)
Cumulative(capacity)
.
This constraint enforces that:
forall t: sum(demands[i] if (start(intervals[t]) <= t < end(intervals[t])) and (t is
present)) <= capacity
.
capacity
- the maximum capacity of the cumulative constraint. It must be a positive affine
expression.public CumulativeConstraint addCumulative(long capacity)
Cumulative(capacity)
.addCumulative(LinearArgument capacity)
public void addHint(IntVar var, long value)
public void addHint(Literal lit, boolean value)
public void clearHints()
public void addAssumption(Literal lit)
public void addAssumptions(Literal[] literals)
public void clearAssumptions()
public void minimize(LinearArgument expr)
public void minimize(DoubleLinearExpr expr)
public void maximize(LinearArgument expr)
public void maximize(DoubleLinearExpr expr)
public void clearObjective()
public boolean hasObjective()
public void addDecisionStrategy(LinearArgument[] expressions, DecisionStrategyProto.VariableSelectionStrategy varStr, DecisionStrategyProto.DomainReductionStrategy domStr)
DecisionStrategy(expressions, varStr, domStr)
.public void addDecisionStrategy(java.lang.Iterable<? extends LinearArgument> expressions, DecisionStrategyProto.VariableSelectionStrategy varStr, DecisionStrategyProto.DomainReductionStrategy domStr)
DecisionStrategy(expressions, varStr, domStr)
.public java.lang.String modelStats()
public java.lang.String validate()
public java.lang.Boolean exportToFile(java.lang.String file)
file
- file to write the model to. If the filename ends with 'txt', the
model will be written as a text file, otherwise, the binary format will be used.public CpModelProto model()
public int negated(int index)
public boolean isPositive(Literal lit)
public CpModelProto.Builder getBuilder()
Copyright © 2025. All rights reserved.