Class CpModel
- java.lang.Object
-
- com.google.ortools.sat.CpModel
-
public final class CpModel extends java.lang.ObjectMain modeling class.Proposes a factory to create all modeling objects understood by the SAT solver.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classCpModel.MismatchedArrayLengthsException thrown when parallel arrays have mismatched lengths.static classCpModel.WrongLengthException thrown when an array has a wrong length.
-
Constructor Summary
Constructors Constructor Description CpModel()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description ConstraintaddAbsEquality(LinearArgument target, LinearArgument expr)Addstarget == Abs(expr).ConstraintaddAllDifferent(LinearArgument[] expressions)AddsAllDifferent(expressions).ConstraintaddAllDifferent(java.lang.Iterable<? extends LinearArgument> expressions)AddsAllDifferent(expressions).TableConstraintaddAllowedAssignments(IntVar[] variables)AddsAllowedAssignments(variables).TableConstraintaddAllowedAssignments(java.lang.Iterable<IntVar> variables)AddsAllowedAssignments(variables).voidaddAssumption(Literal lit)Adds a literal to the model as assumptionvoidaddAssumptions(Literal[] literals)Adds multiple literals to the model as assumptionsConstraintaddAtLeastOne(Literal[] literals)Same as addBoolOr.ConstraintaddAtLeastOne(java.lang.Iterable<Literal> literals)Same as addBoolOr.ConstraintaddAtMostOne(Literal[] literals)AddsAtMostOne(literals): Sum(literals) <= 1.ConstraintaddAtMostOne(java.lang.Iterable<Literal> literals)AddsAtMostOne(literals): Sum(literals) <= 1.AutomatonConstraintaddAutomaton(IntVar[] transitionVariables, long startingState, long[] finalStates)Adds an automaton constraint.ConstraintaddBoolAnd(Literal[] literals)AddsAnd(literals) == true.ConstraintaddBoolAnd(java.lang.Iterable<Literal> literals)AddsAnd(literals) == true.ConstraintaddBoolOr(Literal[] literals)AddsOr(literals) == true.ConstraintaddBoolOr(java.lang.Iterable<Literal> literals)AddsOr(literals) == true.ConstraintaddBoolXor(Literal[] literals)AddsXOr(literals) == true.ConstraintaddBoolXor(java.lang.Iterable<Literal> literals)AddsXOr(literals) == true.CircuitConstraintaddCircuit()AddsCircuit().CumulativeConstraintaddCumulative(long capacity)AddsCumulative(capacity).CumulativeConstraintaddCumulative(LinearArgument capacity)AddsCumulative(capacity).voidaddDecisionStrategy(IntVar[] variables, DecisionStrategyProto.VariableSelectionStrategy varStr, DecisionStrategyProto.DomainReductionStrategy domStr)AddsDecisionStrategy(variables, varStr, domStr).ConstraintaddDifferent(LinearArgument expr, long value)Addsexpr != value.ConstraintaddDifferent(LinearArgument left, LinearArgument right)Addsleft != right.ConstraintaddDivisionEquality(LinearArgument target, LinearArgument num, LinearArgument denom)Addstarget == num / denom, rounded towards 0.ConstraintaddElement(IntVar index, int[] values, IntVar target)Adds the element constraint:values[index] == target.ConstraintaddElement(IntVar index, long[] values, IntVar target)Adds the element constraint:values[index] == target.ConstraintaddElement(IntVar index, IntVar[] variables, IntVar target)Adds the element constraint:variables[index] == target.ConstraintaddEquality(LinearArgument expr, long value)Addsexpr == value.ConstraintaddEquality(LinearArgument left, LinearArgument right)Addsleft == right.ConstraintaddExactlyOne(Literal[] literals)AddsExactlyOne(literals): Sum(literals) == 1.ConstraintaddExactlyOne(java.lang.Iterable<Literal> literals)AddsExactlyOne(literals): Sum(literals) == 1.TableConstraintaddForbiddenAssignments(IntVar[] variables)AddsForbiddenAssignments(variables).TableConstraintaddForbiddenAssignments(java.lang.Iterable<IntVar> variables)AddsForbiddenAssignments(variables).ConstraintaddGreaterOrEqual(LinearArgument expr, long value)Addsexpr >= value.ConstraintaddGreaterOrEqual(LinearArgument left, LinearArgument right)Addsleft >= right.ConstraintaddGreaterThan(LinearArgument expr, long value)Addsexpr > value.ConstraintaddGreaterThan(LinearArgument left, LinearArgument right)Addsleft > right.voidaddHint(IntVar var, long value)Adds hinting to a variableConstraintaddImplication(Literal a, Literal b)Addsa => b.ConstraintaddInverse(IntVar[] variables, IntVar[] inverseVariables)AddsInverse(variables, inverseVariables).ConstraintaddLessOrEqual(LinearArgument expr, long value)Addsexpr <= value.ConstraintaddLessOrEqual(LinearArgument left, LinearArgument right)Addsleft <= right.ConstraintaddLessThan(LinearArgument expr, long value)Addsexpr < value.ConstraintaddLessThan(LinearArgument left, LinearArgument right)Addsleft < right.ConstraintaddLinearConstraint(LinearArgument expr, long lb, long ub)Addslb <= expr <= ub.ConstraintaddLinearExpressionInDomain(LinearArgument expr, Domain domain)Addsexpr in domain.voidaddMapDomain(IntVar var, Literal[] booleans, long offset)Addsvar == i + offset <=> booleans[i] == true for all i in [0, booleans.length).ConstraintaddMaxEquality(LinearArgument target, LinearArgument[] exprs)Addstarget == Max(vars).ConstraintaddMaxEquality(LinearArgument target, java.lang.Iterable<? extends LinearArgument> exprs)Addstarget == Max(exprs).ConstraintaddMinEquality(LinearArgument target, LinearArgument[] exprs)Addstarget == Min(vars).ConstraintaddMinEquality(LinearArgument target, java.lang.Iterable<? extends LinearArgument> exprs)Addstarget == Min(exprs).ConstraintaddModuloEquality(LinearArgument target, LinearArgument var, long mod)Addstarget == var % mod.ConstraintaddModuloEquality(LinearArgument target, LinearArgument var, LinearArgument mod)Addstarget == var % mod.MultipleCircuitConstraintaddMultipleCircuit()AddsMultipleCircuit().ConstraintaddMultiplicationEquality(LinearArgument target, LinearArgument[] exprs)Addstarget == Product(exprs).ConstraintaddMultiplicationEquality(LinearArgument target, LinearArgument left, LinearArgument right)Addstarget == left * right.ConstraintaddNoOverlap(IntervalVar[] intervalVars)AddsNoOverlap(intervalVars).ConstraintaddNoOverlap(java.lang.Iterable<IntervalVar> intervalVars)AddsNoOverlap(intervalVars).NoOverlap2dConstraintaddNoOverlap2D()AddsNoOverlap2D(xIntervals, yIntervals).ReservoirConstraintaddReservoirConstraint(long minLevel, long maxLevel)Adds a reservoir constraint with optional refill/emptying events.voidclearAssumptions()Remove all assumptions from the modelvoidclearHints()Remove all solution hintsvoidclearObjective()Clears the objective.java.lang.BooleanexportToFile(java.lang.String file)Write the model as a protocol buffer to 'file'.LiteralfalseLiteral()Returns the false literal.BoolVargetBoolVarFromProtoIndex(int index)Rebuilds a Boolean variable from an index.CpModelProto.BuildergetBuilder()Returns the model builder.CpModelgetClone()IntVargetIntVarFromProtoIndex(int index)Rebuilds an integer variable from an index.booleanhasObjective()Checks if the model contains an objective.voidmaximize(DoubleLinearExpr expr)Adds a maximization objective of a linear expression.voidmaximize(LinearArgument expr)Adds a maximization objective of a linear expression.voidminimize(DoubleLinearExpr expr)Adds a minimization objective of a linear expression.voidminimize(LinearArgument expr)Adds a minimization objective of a linear expression.CpModelProtomodel()java.lang.StringmodelStats()Returns some statistics on model as a string.intnegated(int index)BoolVarnewBoolVar(java.lang.String name)Creates a Boolean variable with the given name.IntVarnewConstant(long value)Creates a constant variable.IntervalVarnewFixedInterval(long start, long size, java.lang.String name)Creates a fixed interval from its start and its size.IntervalVarnewFixedSizeIntervalVar(LinearArgument start, long size, java.lang.String name)Creates an interval variable from an affine expression start, and a fixed size.IntervalVarnewIntervalVar(LinearArgument start, LinearArgument size, LinearArgument end, java.lang.String name)Creates an interval variable from three affine expressions start, size, and end.IntVarnewIntVar(long lb, long ub, java.lang.String name)Creates an integer variable with domain [lb, ub].IntVarnewIntVarFromDomain(Domain domain, java.lang.String name)Creates an integer variable with given domain.IntervalVarnewOptionalFixedInterval(long start, long size, Literal isPresent, java.lang.String name)Creates an optional fixed interval from start and size, and an isPresent literal.IntervalVarnewOptionalFixedSizeIntervalVar(LinearArgument start, long size, Literal isPresent, java.lang.String name)Creates an optional interval variable from an affine expression start, and a fixed size.IntervalVarnewOptionalIntervalVar(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.LiteraltrueLiteral()Returns the true literal.java.lang.Stringvalidate()Returns a non empty string explaining the issue if the model is invalid.
-
-
-
Method Detail
-
getClone
public CpModel getClone()
-
newIntVar
public IntVar newIntVar(long lb, long ub, java.lang.String name)
Creates an integer variable with domain [lb, ub].
-
newIntVarFromDomain
public IntVar newIntVarFromDomain(Domain domain, java.lang.String name)
Creates an integer variable with given domain.- Parameters:
domain- an instance of the Domain class.name- the name of the variable- Returns:
- a variable with the given domain.
-
newBoolVar
public BoolVar newBoolVar(java.lang.String name)
Creates a Boolean variable with the given name.
-
newConstant
public IntVar newConstant(long value)
Creates a constant variable.
-
trueLiteral
public Literal trueLiteral()
Returns the true literal.
-
falseLiteral
public Literal falseLiteral()
Returns the false literal.
-
getBoolVarFromProtoIndex
public BoolVar getBoolVarFromProtoIndex(int index)
Rebuilds a Boolean variable from an index. Useful after cloning a model.
-
getIntVarFromProtoIndex
public IntVar getIntVarFromProtoIndex(int index)
Rebuilds an integer variable from an index. Useful after cloning a model.
-
addBoolOr
public Constraint addBoolOr(Literal[] literals)
AddsOr(literals) == true.
-
addBoolOr
public Constraint addBoolOr(java.lang.Iterable<Literal> literals)
AddsOr(literals) == true.
-
addAtLeastOne
public Constraint addAtLeastOne(Literal[] literals)
Same as addBoolOr.Sum(literals) >= 1.
-
addAtLeastOne
public Constraint addAtLeastOne(java.lang.Iterable<Literal> literals)
Same as addBoolOr.Sum(literals) >= 1.
-
addAtMostOne
public Constraint addAtMostOne(Literal[] literals)
AddsAtMostOne(literals): Sum(literals) <= 1.
-
addAtMostOne
public Constraint addAtMostOne(java.lang.Iterable<Literal> literals)
AddsAtMostOne(literals): Sum(literals) <= 1.
-
addExactlyOne
public Constraint addExactlyOne(Literal[] literals)
AddsExactlyOne(literals): Sum(literals) == 1.
-
addExactlyOne
public Constraint addExactlyOne(java.lang.Iterable<Literal> literals)
AddsExactlyOne(literals): Sum(literals) == 1.
-
addBoolAnd
public Constraint addBoolAnd(Literal[] literals)
AddsAnd(literals) == true.
-
addBoolAnd
public Constraint addBoolAnd(java.lang.Iterable<Literal> literals)
AddsAnd(literals) == true.
-
addBoolXor
public Constraint addBoolXor(Literal[] literals)
AddsXOr(literals) == true.
-
addBoolXor
public Constraint addBoolXor(java.lang.Iterable<Literal> literals)
AddsXOr(literals) == true.
-
addImplication
public Constraint addImplication(Literal a, Literal b)
Addsa => b.
-
addLinearExpressionInDomain
public Constraint addLinearExpressionInDomain(LinearArgument expr, Domain domain)
Addsexpr in domain.
-
addLinearConstraint
public Constraint addLinearConstraint(LinearArgument expr, long lb, long ub)
Addslb <= expr <= ub.
-
addEquality
public Constraint addEquality(LinearArgument expr, long value)
Addsexpr == value.
-
addEquality
public Constraint addEquality(LinearArgument left, LinearArgument right)
Addsleft == right.
-
addLessOrEqual
public Constraint addLessOrEqual(LinearArgument expr, long value)
Addsexpr <= value.
-
addLessOrEqual
public Constraint addLessOrEqual(LinearArgument left, LinearArgument right)
Addsleft <= right.
-
addLessThan
public Constraint addLessThan(LinearArgument expr, long value)
Addsexpr < value.
-
addLessThan
public Constraint addLessThan(LinearArgument left, LinearArgument right)
Addsleft < right.
-
addGreaterOrEqual
public Constraint addGreaterOrEqual(LinearArgument expr, long value)
Addsexpr >= value.
-
addGreaterOrEqual
public Constraint addGreaterOrEqual(LinearArgument left, LinearArgument right)
Addsleft >= right.
-
addGreaterThan
public Constraint addGreaterThan(LinearArgument expr, long value)
Addsexpr > value.
-
addGreaterThan
public Constraint addGreaterThan(LinearArgument left, LinearArgument right)
Addsleft > right.
-
addDifferent
public Constraint addDifferent(LinearArgument expr, long value)
Addsexpr != value.
-
addDifferent
public Constraint addDifferent(LinearArgument left, LinearArgument right)
Addsleft != right.
-
addAllDifferent
public Constraint addAllDifferent(LinearArgument[] expressions)
AddsAllDifferent(expressions).This constraint forces all affine expressions to have different values.
- Parameters:
expressions- a list of affine integer expressions- Returns:
- an instance of the Constraint class
-
addAllDifferent
public Constraint addAllDifferent(java.lang.Iterable<? extends LinearArgument> expressions)
AddsAllDifferent(expressions).
-
addElement
public Constraint addElement(IntVar index, IntVar[] variables, IntVar target)
Adds the element constraint:variables[index] == target.
-
addElement
public Constraint addElement(IntVar index, long[] values, IntVar target)
Adds the element constraint:values[index] == target.
-
addElement
public Constraint addElement(IntVar index, int[] values, IntVar target)
Adds the element constraint:values[index] == target.
-
addCircuit
public CircuitConstraint addCircuit()
AddsCircuit().Adds an empty circuit constraint.
A circuit is a unique Hamiltonian path in a subgraph of the total graph. In case a node 'i' is not in the path, then there must be a loop arc
'i -> i'associated with a true literal. Otherwise this constraint will fail.
-
addMultipleCircuit
public MultipleCircuitConstraint addMultipleCircuit()
AddsMultipleCircuit().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.
-
addAllowedAssignments
public TableConstraint addAllowedAssignments(IntVar[] variables)
AddsAllowedAssignments(variables).An AllowedAssignments constraint is a constraint on an array of variables that forces, when all variables are fixed to a single value, that the corresponding list of values is equal to one of the tuples of the tupleList.
- Parameters:
variables- a list of variables- Returns:
- an instance of the TableConstraint class without any tuples. Tuples can be added directly to the table constraint.
-
addAllowedAssignments
public TableConstraint addAllowedAssignments(java.lang.Iterable<IntVar> variables)
AddsAllowedAssignments(variables).
-
addForbiddenAssignments
public TableConstraint addForbiddenAssignments(IntVar[] variables)
AddsForbiddenAssignments(variables).A ForbiddenAssignments constraint is a constraint on an array of variables where the list of impossible combinations is provided in the tuples list.
- Parameters:
variables- a list of variables- Returns:
- an instance of the TableConstraint class without any tuples. Tuples can be added directly to the table constraint.
-
addForbiddenAssignments
public TableConstraint addForbiddenAssignments(java.lang.Iterable<IntVar> variables)
AddsForbiddenAssignments(variables).
-
addAutomaton
public AutomatonConstraint addAutomaton(IntVar[] transitionVariables, long startingState, long[] finalStates)
Adds an automaton constraint.An automaton constraint takes a list of variables (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 variable in the list of variables.
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 variables 'variables[i]'. That is, this arc can only be selected if 'variables[i]' is assigned the value 'label'.
A feasible solution of this constraint is an assignment of variables such that, starting from the initial state in phase 0, there is a path labeled by the values of the variables that ends in one of the final states in the final phase.
- Parameters:
transitionVariables- a non empty list of variables 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 states- Returns:
- an instance of the Constraint class
-
addInverse
public Constraint addInverse(IntVar[] variables, IntVar[] inverseVariables)
AddsInverse(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.
- Parameters:
variables- an array of integer variablesinverseVariables- an array of integer variables- Returns:
- an instance of the Constraint class
- Throws:
CpModel.MismatchedArrayLengths- if variables and inverseVariables have different length
-
addReservoirConstraint
public ReservoirConstraint addReservoirConstraint(long minLevel, long maxLevel)
Adds a reservoir constraint with optional refill/emptying events.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.
- Parameters:
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.- Returns:
- an instance of the ReservoirConstraint class
- Throws:
java.lang.IllegalArgumentException- if minLevel > 0java.lang.IllegalArgumentException- if maxLevel < 0
-
addMapDomain
public void addMapDomain(IntVar var, Literal[] booleans, long offset)
Addsvar == i + offset <=> booleans[i] == true for all i in [0, booleans.length).
-
addMinEquality
public Constraint addMinEquality(LinearArgument target, LinearArgument[] exprs)
Addstarget == Min(vars).
-
addMinEquality
public Constraint addMinEquality(LinearArgument target, java.lang.Iterable<? extends LinearArgument> exprs)
Addstarget == Min(exprs).
-
addMaxEquality
public Constraint addMaxEquality(LinearArgument target, LinearArgument[] exprs)
Addstarget == Max(vars).
-
addMaxEquality
public Constraint addMaxEquality(LinearArgument target, java.lang.Iterable<? extends LinearArgument> exprs)
Addstarget == Max(exprs).
-
addDivisionEquality
public Constraint addDivisionEquality(LinearArgument target, LinearArgument num, LinearArgument denom)
Addstarget == num / denom, rounded towards 0.
-
addAbsEquality
public Constraint addAbsEquality(LinearArgument target, LinearArgument expr)
Addstarget == Abs(expr).
-
addModuloEquality
public Constraint addModuloEquality(LinearArgument target, LinearArgument var, LinearArgument mod)
Addstarget == var % mod.
-
addModuloEquality
public Constraint addModuloEquality(LinearArgument target, LinearArgument var, long mod)
Addstarget == var % mod.
-
addMultiplicationEquality
public Constraint addMultiplicationEquality(LinearArgument target, LinearArgument[] exprs)
Addstarget == Product(exprs).
-
addMultiplicationEquality
public Constraint addMultiplicationEquality(LinearArgument target, LinearArgument left, LinearArgument right)
Addstarget == left * right.
-
newIntervalVar
public IntervalVar newIntervalVar(LinearArgument start, LinearArgument size, LinearArgument end, java.lang.String name)
Creates an interval variable from three affine expressions start, size, and end.An interval variable is a constraint, that is itself used in other constraints like NoOverlap.
Internally, it ensures that
start + size == end.- Parameters:
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 variable- Returns:
- An IntervalVar object
-
newFixedSizeIntervalVar
public IntervalVar newFixedSizeIntervalVar(LinearArgument start, long size, java.lang.String name)
Creates an interval variable from an affine expression start, and a fixed size.An interval variable is a constraint, that is itself used in other constraints like NoOverlap.
- Parameters:
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.- Returns:
- An IntervalVar object
-
newFixedInterval
public IntervalVar newFixedInterval(long start, long size, java.lang.String name)
Creates a fixed interval from its start and its size.
-
newOptionalIntervalVar
public 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.An optional interval variable is a constraint, that is itself used in other constraints like NoOverlap. This constraint is protected by an
isPresentliteral that indicates if it is active or not.Internally, it ensures that
isPresent => start + size == end.- Parameters:
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 variable- Returns:
- an IntervalVar object
-
newOptionalFixedSizeIntervalVar
public 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.An interval variable is a constraint, that is itself used in other constraints like NoOverlap.
- Parameters:
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.- Returns:
- An IntervalVar object
-
newOptionalFixedInterval
public 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.
-
addNoOverlap
public Constraint addNoOverlap(IntervalVar[] intervalVars)
AddsNoOverlap(intervalVars).A NoOverlap constraint ensures that all present intervals do not overlap in time.
- Parameters:
intervalVars- the list of interval variables to constrain- Returns:
- an instance of the Constraint class
-
addNoOverlap
public Constraint addNoOverlap(java.lang.Iterable<IntervalVar> intervalVars)
AddsNoOverlap(intervalVars).
-
addNoOverlap2D
public NoOverlap2dConstraint addNoOverlap2D()
AddsNoOverlap2D(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.
- Returns:
- an instance of the NoOverlap2dConstraint class. This class allows adding rectangles incrementally.
-
addCumulative
public CumulativeConstraint addCumulative(LinearArgument capacity)
AddsCumulative(capacity).This constraint enforces that:
forall t: sum(demands[i] if (start(intervals[t]) <= t < end(intervals[t])) and (t is present)) <= capacity.- Parameters:
capacity- the maximum capacity of the cumulative constraint. It must be a positive affine expression.- Returns:
- an instance of the CumulativeConstraint class. this class allows adding (interval, demand) pairs incrementally.
-
addCumulative
public CumulativeConstraint addCumulative(long capacity)
AddsCumulative(capacity).- See Also:
addCumulative(LinearArgument capacity)
-
addHint
public void addHint(IntVar var, long value)
Adds hinting to a variable
-
clearHints
public void clearHints()
Remove all solution hints
-
addAssumption
public void addAssumption(Literal lit)
Adds a literal to the model as assumption
-
addAssumptions
public void addAssumptions(Literal[] literals)
Adds multiple literals to the model as assumptions
-
clearAssumptions
public void clearAssumptions()
Remove all assumptions from the model
-
minimize
public void minimize(LinearArgument expr)
Adds a minimization objective of a linear expression.
-
minimize
public void minimize(DoubleLinearExpr expr)
Adds a minimization objective of a linear expression.
-
maximize
public void maximize(LinearArgument expr)
Adds a maximization objective of a linear expression.
-
maximize
public void maximize(DoubleLinearExpr expr)
Adds a maximization objective of a linear expression.
-
clearObjective
public void clearObjective()
Clears the objective.
-
hasObjective
public boolean hasObjective()
Checks if the model contains an objective.
-
addDecisionStrategy
public void addDecisionStrategy(IntVar[] variables, DecisionStrategyProto.VariableSelectionStrategy varStr, DecisionStrategyProto.DomainReductionStrategy domStr)
AddsDecisionStrategy(variables, varStr, domStr).
-
modelStats
public java.lang.String modelStats()
Returns some statistics on model as a string.
-
validate
public java.lang.String validate()
Returns a non empty string explaining the issue if the model is invalid.
-
exportToFile
public java.lang.Boolean exportToFile(java.lang.String file)
Write the model as a protocol buffer to 'file'.- Parameters:
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.- Returns:
- true if the model was correctly written.
-
model
public CpModelProto model()
-
negated
public int negated(int index)
-
getBuilder
public CpModelProto.Builder getBuilder()
Returns the model builder.
-
-