C++ Reference
C++ Reference: CP-SAT
cp_model.h
Go to the documentation of this file.
We call domain any subset of Int64 = [kint64min, kint64max].
Definition: sorted_interval_list.h:81
Specialized automaton constraint.
Definition: cp_model.h:664
void AddTransition(int tail, int head, int64_t transition_label)
Adds a transitions to the automaton.
BoolVar WithName(const std::string &name)
Sets the name of the variable.
std::string DebugString() const
friend bool SolutionBooleanValue(const CpSolverResponse &r, BoolVar x)
Evaluates the value of a Boolean literal in a solver response.
BoolVar()
A default constructed BoolVar can be used to mean not defined yet.
bool operator!=(const BoolVar &other) const
Definition: cp_model.h:95
bool operator==(const BoolVar &other) const
Definition: cp_model.h:91
BoolVar Not() const
Returns the logical negation of the current Boolean variable.
Definition: cp_model.h:89
Specialized circuit constraint.
Definition: cp_model.h:568
void AddArc(int tail, int head, BoolVar literal)
Add an arc to the circuit.
Constraint OnlyEnforceIf(absl::Span< const BoolVar > literals)
The constraint will be enforced iff all literals listed here are true.
Constraint WithName(const std::string &name)
Sets the name of the constraint.
ConstraintProto * MutableProto() const
Returns the mutable underlying protobuf object (useful for model edition).
Definition: cp_model.h:553
const std::string & Name() const
Returns the name of the constraint (or the empty string if not set).
Constraint(ConstraintProto *proto)
Constraint OnlyEnforceIf(BoolVar literal)
See OnlyEnforceIf(absl::Span<const BoolVar> literals).
const ConstraintProto & Proto() const
Returns the underlying protobuf object (useful for testing).
Definition: cp_model.h:550
Wrapper class around the cp_model proto.
Definition: cp_model.h:721
Constraint AddAtMostOne(absl::Span< const BoolVar > literals)
At most one literal is true. Sum literals <= 1.
void AddHint(IntVar var, int64_t value)
Adds hinting to a variable.
TableConstraint AddForbiddenAssignments(absl::Span< const IntVar > vars)
Adds an forbidden assignments constraint.
Constraint AddMultiplicationEquality(const LinearExpr &target, absl::Span< const IntVar > vars)
Adds target == prod(vars).
Constraint AddMaxEquality(const LinearExpr &target, absl::Span< const LinearExpr > exprs)
Adds target == max(exprs).
Constraint AddMinEquality(const LinearExpr &target, absl::Span< const IntVar > vars)
Adds target == min(vars).
Constraint AddLinearConstraint(const LinearExpr &expr, const Domain &domain)
Adds expr in domain.
void ClearAssumptions()
Remove all assumptions from the model.
Constraint AddAbsEquality(const LinearExpr &target, const LinearExpr &expr)
Adds target == abs(expr).
void AddAssumptions(absl::Span< const BoolVar > literals)
Adds multiple literals to the model as assumptions.
IntervalVar NewFixedSizeIntervalVar(const LinearExpr &start, int64_t size)
Creates an interval variable with a fixed size.
void Minimize(const DoubleLinearExpr &expr)
Adds a linear minimization objective after rescaling of the double coefficients.
MultipleCircuitConstraint AddMultipleCircuitConstraint()
Adds a multiple circuit constraint, aka the "VRP" (Vehicle Routing Problem) constraint.
BoolVar TrueVar()
Creates an always true Boolean variable.
IntVar NewIntVar(const Domain &domain)
Creates an integer variable with the given domain.
void AddDecisionStrategy(absl::Span< const BoolVar > variables, DecisionStrategyProto::VariableSelectionStrategy var_strategy, DecisionStrategyProto::DomainReductionStrategy domain_strategy)
Adds a decision strategy on a list of boolean variables.
Constraint AddMultiplicationEquality(const LinearExpr &target, std::initializer_list< LinearExpr > exprs)
Adds target == prod(vars).
void Maximize(const LinearExpr &expr)
Adds a linear maximization objective.
void FixVariable(BoolVar var, bool value)
Constraint AddMinEquality(const LinearExpr &target, absl::Span< const LinearExpr > exprs)
Adds target == min(exprs).
void AddHint(BoolVar var, bool value)
Adds hinting to a Boolean variable.
void Maximize(const DoubleLinearExpr &expr)
Adds a linear maximization objective after rescaling of the double coefficients.
Constraint AddAtLeastOne(absl::Span< const BoolVar > literals)
Same as AddBoolOr. Sum literals >= 1.
Constraint AddMaxEquality(const LinearExpr &target, absl::Span< const IntVar > vars)
Adds target == max(vars).
Constraint AddMultiplicationEquality(const LinearExpr &target, absl::Span< const LinearExpr > exprs)
Adds target == prod(exprs).
void AddDecisionStrategy(absl::Span< const IntVar > variables, DecisionStrategyProto::VariableSelectionStrategy var_strategy, DecisionStrategyProto::DomainReductionStrategy domain_strategy)
Adds a decision strategy on a list of integer variables.
IntervalVar NewOptionalIntervalVar(const LinearExpr &start, const LinearExpr &size, const LinearExpr &end, BoolVar presence)
Creates an optional interval variable from 3 affine expressions and a Boolean variable.
CircuitConstraint AddCircuitConstraint()
Adds a circuit constraint.
Constraint AddVariableElement(IntVar index, absl::Span< const IntVar > variables, IntVar target)
Adds the element constraint: variables[index] == target.
Constraint AddMaxEquality(const LinearExpr &target, std::initializer_list< LinearExpr > exprs)
Adds target == max(exprs).
Constraint AddGreaterThan(const LinearExpr &left, const LinearExpr &right)
Adds left > right.
void CopyFrom(const CpModelProto &model_proto)
Replaces the current model with the one from the given proto.
Constraint AddLessThan(const LinearExpr &left, const LinearExpr &right)
Adds left < right.
Constraint AddBoolXor(absl::Span< const BoolVar > literals)
Adds the constraint that an odd number of literals is true.
void SetName(const std::string &name)
Sets the name of the model.
Constraint AddElement(IntVar index, absl::Span< const int64_t > values, IntVar target)
Adds the element constraint: values[index] == target.
void AddAssumption(BoolVar lit)
Adds a literal to the model as assumptions.
void Minimize(const LinearExpr &expr)
Adds a linear minimization objective.
CpModelProto * MutableProto()
Definition: cp_model.h:1075
BoolVar FalseVar()
Creates an always false Boolean variable.
Constraint AddBoolAnd(absl::Span< const BoolVar > literals)
Adds the constraint that all literals must be true.
IntervalVar GetIntervalVarFromProtoIndex(int index)
Returns the interval variable from its index in the proto.
CumulativeConstraint AddCumulative(LinearExpr capacity)
The cumulative constraint.
void FixVariable(IntVar var, int64_t value)
It is sometime convenient when building a model to create a bunch of variables that will later be fix...
Constraint AddLessOrEqual(const LinearExpr &left, const LinearExpr &right)
Adds left <= right.
ReservoirConstraint AddReservoirConstraint(int64_t min_level, int64_t max_level)
Adds a reservoir constraint with optional refill/emptying events.
Constraint AddEquality(const LinearExpr &left, const LinearExpr &right)
Adds left == right.
NoOverlap2DConstraint AddNoOverlap2D()
The no_overlap_2d constraint prevents a set of boxes from overlapping.
Constraint AddGreaterOrEqual(const LinearExpr &left, const LinearExpr &right)
Adds left >= right.
Constraint AddBoolOr(absl::Span< const BoolVar > literals)
Adds the constraint that at least one of the literals must be true.
IntVar GetIntVarFromProtoIndex(int index)
Returns the integer variable from its index in the proto.
Constraint AddMultiplicationEquality(const LinearExpr &target, const LinearExpr &left, const LinearExpr &right)
Adds target == left * right.
AutomatonConstraint AddAutomaton(absl::Span< const IntVar > transition_variables, int starting_state, absl::Span< const int > final_states)
An automaton constraint.
IntervalVar NewOptionalFixedSizeIntervalVar(const LinearExpr &start, int64_t size, BoolVar presence)
Creates an optional interval variable with a fixed size.
Constraint AddAllDifferent(absl::Span< const LinearExpr > exprs)
This constraint forces all expressions to have different values.
const CpModelProto & Build() const
Definition: cp_model.h:1072
Constraint AddDivisionEquality(const LinearExpr &target, const LinearExpr &numerator, const LinearExpr &denominator)
Adds target = num / denom (integer division rounded towards 0).
BoolVar GetBoolVarFromProtoIndex(int index)
Returns the Boolean variable from its index in the proto.
Constraint AddNotEqual(const LinearExpr &left, const LinearExpr &right)
Adds left != right.
Constraint AddModuloEquality(const LinearExpr &target, const LinearExpr &var, const LinearExpr &mod)
Adds target = var % mod.
Constraint AddAllDifferent(absl::Span< const IntVar > vars)
This constraint forces all variables to have different values.
TableConstraint AddAllowedAssignments(absl::Span< const IntVar > vars)
Adds an allowed assignments constraint.
IntVar NewConstant(int64_t value)
Creates a constant variable.
Constraint AddAllDifferent(std::initializer_list< LinearExpr > exprs)
This constraint forces all expressions to have different values.
IntervalVar NewIntervalVar(const LinearExpr &start, const LinearExpr &size, const LinearExpr &end)
Creates an interval variable from 3 affine expressions.
Constraint AddInverseConstraint(absl::Span< const IntVar > variables, absl::Span< const IntVar > inverse_variables)
An inverse constraint.
Constraint AddExactlyOne(absl::Span< const BoolVar > literals)
Exactly one literal is true. Sum literals == 1.
Constraint AddNoOverlap(absl::Span< const IntervalVar > vars)
Adds a no-overlap constraint that ensures that all present intervals do not overlap in time.
Constraint AddMinEquality(const LinearExpr &target, std::initializer_list< LinearExpr > exprs)
Adds target == min(exprs).
const CpModelProto & Proto() const
Definition: cp_model.h:1074
Specialized cumulative constraint.
Definition: cp_model.h:701
void AddDemand(IntervalVar interval, LinearExpr demand)
Adds a pair (interval, demand) to the constraint.
A dedicated container for linear expressions with double coefficients.
Definition: cp_model.h:350
DoubleLinearExpr & operator+=(BoolVar var)
DoubleLinearExpr & AddTerm(BoolVar var, double coeff)
static DoubleLinearExpr WeightedSum(absl::Span< const IntVar > vars, absl::Span< const double > coeffs)
Constructs the scalar product of variables and coefficients.
static DoubleLinearExpr Sum(absl::Span< const IntVar > vars)
Constructs the sum of a list of variables.
const bool IsConstant() const
Definition: cp_model.h:411
DoubleLinearExpr & operator+=(const DoubleLinearExpr &expr)
Adds another linear expression to the linear expression.
DoubleLinearExpr & operator+=(IntVar var)
Adds a single integer variable to the linear expression.
DoubleLinearExpr & operator+=(double value)
Adds a constant value to the linear expression.
std::string DebugString(const CpModelProto *proto=nullptr) const
Debug string. See the documentation for LinearExpr::DebugString().
const std::vector< double > & coefficients() const
Returns the vector of coefficients.
Definition: cp_model.h:408
const std::vector< int > & variables() const
Returns the vector of variable indices.
Definition: cp_model.h:405
static DoubleLinearExpr Sum(absl::Span< const BoolVar > vars)
Constructs the sum of a list of Boolean variables.
DoubleLinearExpr & operator-=(double value)
Adds a constant value to the linear expression.
DoubleLinearExpr & operator-=(const DoubleLinearExpr &expr)
Adds another linear expression to the linear expression.
DoubleLinearExpr & AddTerm(IntVar var, double coeff)
Adds a term (var * coeff) to the linear expression.
DoubleLinearExpr & operator*=(double coeff)
Multiply the linear expression by a constant.
DoubleLinearExpr & operator-=(IntVar var)
Adds a single integer variable to the linear expression.
DoubleLinearExpr(IntVar var)
Constructs a linear expression from an integer variable.
static DoubleLinearExpr WeightedSum(absl::Span< const BoolVar > vars, absl::Span< const double > coeffs)
Constructs the scalar product of Boolean variables and coefficients.
DoubleLinearExpr()
DoubleLinearExpr(BoolVar var)
Constructs a linear expression from a Boolean variable.
DoubleLinearExpr(double constant)
Constructs a constant linear expression.
std::string Name() const
Returns the name of the variable (or the empty string if not set).
::operations_research::Domain Domain() const
bool operator==(const IntVar &other) const
Definition: cp_model.h:170
IntVar()
A default constructed IntVar can be used to mean not defined yet.
std::string DebugString() const
bool operator!=(const IntVar &other) const
Definition: cp_model.h:174
IntVar WithName(const std::string &name)
Sets the name of the variable.
friend int64_t SolutionIntegerValue(const CpSolverResponse &r, const LinearExpr &expr)
Evaluates the value of an linear expression in a solver response.
int index() const
Returns the index of the variable in the model. This will be non-negative.
Definition: cp_model.h:186
LinearExpr SizeExpr() const
Returns the size linear expression.
LinearExpr StartExpr() const
Returns the start linear expression.
BoolVar PresenceBoolVar() const
Returns a BoolVar indicating the presence of this interval.
std::string Name() const
Returns the name of the interval (or the empty string if not set).
std::string DebugString() const
Returns a debug string.
bool operator!=(const IntervalVar &other) const
Difference test with another interval variable.
Definition: cp_model.h:486
bool operator==(const IntervalVar &other) const
Equality test with another interval variable.
Definition: cp_model.h:481
IntervalVar WithName(const std::string &name)
Sets the name of the variable.
LinearExpr EndExpr() const
Returns the end linear expression.
IntervalVar()
A default constructed IntervalVar can be used to mean not defined yet.
int index() const
Returns the index of the interval constraint in the model.
Definition: cp_model.h:494
friend std::ostream & operator<<(std::ostream &os, const IntervalVar &var)
A dedicated container for linear expressions.
Definition: cp_model.h:240
LinearExpr & operator+=(const LinearExpr &other)
LinearExpr & operator-=(const LinearExpr &other)
LinearExpr & operator*=(int64_t factor)
const bool IsConstant() const
Returns true if the expression has no variables.
Definition: cp_model.h:294
static LinearExpr WeightedSum(absl::Span< const BoolVar > vars, absl::Span< const int64_t > coeffs)
Constructs the scalar product of Boolean variables and coefficients.
static LinearExpr Term(IntVar var, int64_t coefficient)
Constructs var * coefficient.
std::string DebugString(const CpModelProto *proto=nullptr) const
Debug string.
const std::vector< int64_t > & coefficients() const
Returns the vector of coefficients.
Definition: cp_model.h:291
static LinearExpr WeightedSum(absl::Span< const IntVar > vars, absl::Span< const int64_t > coeffs)
Constructs the scalar product of variables and coefficients.
LinearExpr(IntVar var)
Constructs a linear expression from an integer variable.
static LinearExpr FromProto(const LinearExpressionProto &proto)
Constructs a linear expr from its proto representation.
const std::vector< int > & variables() const
Returns the vector of variable indices.
Definition: cp_model.h:288
static LinearExpr Sum(absl::Span< const IntVar > vars)
Constructs the sum of a list of variables.
LinearExpr(BoolVar var)
Constructs a linear expression from a Boolean variable.
static LinearExpr Term(BoolVar var, int64_t coefficient)
Constructs bool * coefficient.
LinearExpr()=default
Creates an empty linear expression with value zero.
static LinearExpr Sum(absl::Span< const BoolVar > vars)
Constructs the sum of a list of Boolean variables.
LinearExpr(int64_t constant)
Constructs a constant linear expression.
Specialized circuit constraint.
Definition: cp_model.h:591
void AddArc(int tail, int head, BoolVar literal)
Add an arc to the circuit.
Specialized no_overlap2D constraint.
Definition: cp_model.h:681
void AddRectangle(IntervalVar x_coordinate, IntervalVar y_coordinate)
Adds a rectangle (parallel to the axis) to the constraint.
Specialized reservoir constraint.
Definition: cp_model.h:631
void AddOptionalEvent(LinearExpr time, int64_t level_change, BoolVar is_active)
Adds an optional event.
void AddEvent(LinearExpr time, int64_t level_change)
Adds a mandatory event.
Specialized assignment constraint.
Definition: cp_model.h:614
void AddTuple(absl::Span< const int64_t > tuple)
Adds a tuple of possible values to the constraint.
std::string VarDebugString(const CpModelProto &proto, int index)
LinearExpr operator+(const LinearExpr &lhs, const LinearExpr &rhs)
Definition: cp_model.h:1140
BoolVar Not(BoolVar x)
A convenient wrapper so we can write Not(x) instead of x.Not() which is sometimes clearer.
std::ostream & operator<<(std::ostream &os, const BoolVar &var)
int64_t SolutionIntegerValue(const CpSolverResponse &r, const LinearExpr &expr)
Evaluates the value of an linear expression in a solver response.
LinearExpr operator*(LinearExpr expr, int64_t factor)
Definition: cp_model.h:1182
bool SolutionBooleanValue(const CpSolverResponse &r, BoolVar x)
Evaluates the value of a Boolean literal in a solver response.
Definition: cp_model.h:58