38 #ifndef OR_TOOLS_SAT_CP_MODEL_H_ 39 #define OR_TOOLS_SAT_CP_MODEL_H_ 45 #include "absl/container/flat_hash_map.h" 46 #include "absl/types/span.h" 84 return other.cp_model_ == cp_model_ && other.index_ == index_;
89 return other.cp_model_ != cp_model_ || other.index_ != index_;
111 int index()
const {
return index_; }
171 return other.cp_model_ == cp_model_ && other.index_ == index_;
176 return other.cp_model_ != cp_model_ || other.index_ != index_;
193 int index()
const {
return index_; }
284 absl::Span<const int64_t> coeffs);
291 absl::Span<const int64_t> coeffs);
296 const std::vector<IntVar>&
variables()
const {
return variables_; }
299 const std::vector<int64_t>&
coefficients()
const {
return coefficients_; }
308 int64_t
Value()
const;
314 std::vector<IntVar> variables_;
315 std::vector<int64_t> coefficients_;
316 int64_t constant_ = 0;
350 std::string
Name()
const;
373 return other.cp_model_ == cp_model_ && other.index_ == index_;
378 return other.cp_model_ != cp_model_ || other.index_ != index_;
395 int index()
const {
return index_; }
448 const std::string&
Name()
const;
518 void AddTuple(absl::Span<const int64_t> tuple);
653 int64_t size,
BoolVar presence);
695 absl::Span<const IntVar> variables,
766 absl::Span<const IntVar> inverse_variables);
817 absl::Span<const IntVar> transition_variables,
int starting_state,
818 absl::Span<const int> final_states);
825 absl::Span<const LinearExpr> exprs);
832 absl::Span<const LinearExpr> exprs);
882 absl::Span<const IntVar> variables,
888 absl::Span<const BoolVar> variables,
932 void LinearExprToProto(
const LinearExpr& expr,
942 int IndexFromConstant(int64_t
value);
949 int GetOrCreateIntegerIndex(
int index);
955 absl::flat_hash_map<int64_t, int> constant_to_index_map_;
956 absl::flat_hash_map<int, int> bool_to_integer_index_map_;
974 #endif // OR_TOOLS_SAT_CP_MODEL_H_
void AddArc(int tail, int head, BoolVar literal)
Add an arc to the circuit.
friend int64_t SolutionIntegerValue(const CpSolverResponse &r, const LinearExpr &expr)
Evaluates the value of an linear expression in a solver response.
BoolVar FalseVar()
Creates an always false Boolean variable.
IntervalVar NewOptionalFixedSizeIntervalVar(const LinearExpr &start, int64_t size, BoolVar presence)
Creates an optional interval variable with a fixed size.
Constraint AddModuloEquality(IntVar target, IntVar var, IntVar mod)
Adds target = var % mod.
const std::string & name() const
LinearExpr & AddConstant(int64_t value)
Adds a constant value to the linear expression.
Specialized reservoir constraint.
LinearExpr EndExpr() const
Returns the end linear expression.
IntervalVar()
Default ctor.
BoolVar TrueVar()
Creates an always true Boolean variable.
Constraint AddLinMaxEquality(const LinearExpr &target, absl::Span< const LinearExpr > exprs)
Adds target == max(exprs).
const CpModelProto & Proto() const
void AddAssumption(BoolVar lit)
Adds a literal to the model as assumptions.
int64_t SolutionIntegerValue(const CpSolverResponse &r, const LinearExpr &expr)
Evaluates the value of an linear expression in a solver response.
std::string DebugString() const
Debug string.
Constraint AddAbsEquality(IntVar target, IntVar var)
Adds target == abs(var).
static LinearExpr Term(IntVar var, int64_t coefficient)
Constructs var * coefficient.
CircuitConstraint AddCircuitConstraint()
Adds a circuit constraint.
const std::string & Name() const
Returns the name of the variable.
Constraint AddGreaterThan(const LinearExpr &left, const LinearExpr &right)
Adds left > right.
Specialized no_overlap2D constraint.
BoolVar Not() const
Returns the logical negation of the current Boolean variable.
int64_t constant() const
Returns the constant term.
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.
LinearExpr AddConstant(int64_t value) const
Adds a constant value to an integer variable and returns a linear expression.
Constraint AddAllDifferent(absl::Span< const IntVar > vars)
this constraint forces all variables to have different values.
Constraint AddEquality(const LinearExpr &left, const LinearExpr &right)
Adds left == right.
DecisionStrategyProto_DomainReductionStrategy
ConstraintProto * MutableProto() const
Returns the mutable underlying protobuf object (useful for model edition).
bool operator==(const BoolVar &other) const
Equality test with another boolvar.
TableConstraint AddAllowedAssignments(absl::Span< const IntVar > vars)
Adds an allowed assignments constraint.
friend std::ostream & operator<<(std::ostream &os, const IntervalVar &var)
int index() const
Returns the index of the interval constraint in the model.
ReservoirConstraint AddReservoirConstraint(int64_t min_level, int64_t max_level)
Adds a reservoir constraint with optional refill/emptying events.
friend bool SolutionBooleanValue(const CpSolverResponse &r, BoolVar x)
Evaluates the value of a Boolean literal in a solver response.
friend int64_t SolutionIntegerMin(const CpSolverResponse &r, IntVar x)
Returns the min of an integer variable in a solution.
void AddTuple(absl::Span< const int64_t > tuple)
Adds a tuple of possible values to the constraint.
IntervalVar WithName(const std::string &name)
Sets the name of the variable.
friend int64_t SolutionIntegerMax(const CpSolverResponse &r, IntVar x)
Returns the max of an integer variable in a solution.
bool operator==(const IntervalVar &other) const
Equality test with another interval variable.
Constraint AddBoolOr(absl::Span< const BoolVar > literals)
Adds the constraint that at least one of the literals must be true.
Constraint AddProductEquality(IntVar target, absl::Span< const IntVar > vars)
Adds target == prod(vars).
IntervalVar NewFixedSizeIntervalVar(const LinearExpr &start, int64_t size)
Creates an interval variable with a fixed size.
DecisionStrategyProto_VariableSelectionStrategy
LinearExpr & AddExpression(const LinearExpr &expr)
Adds another linear expression to the linear expression.
BoolVar GetBoolVarFromProtoIndex(int index)
Returns the Boolean variable from its index in the proto.
AutomatonConstraint AddAutomaton(absl::Span< const IntVar > transition_variables, int starting_state, absl::Span< const int > final_states)
An automaton constraint/.
Specialized circuit constraint.
Constraint AddBoolXor(absl::Span< const BoolVar > literals)
Adds the constraint that a odd number of literal is true.
Specialized cumulative constraint.
bool operator!=(const IntVar &other) const
Difference test with anpther IntVar.
Specialized assignment constraint.
void AddDemand(IntervalVar interval, IntVar demand)
Adds a pair (interval, demand) to the constraint.
void Minimize(const LinearExpr &expr)
Adds a linear minimization objective.
const IntegerVariableProto & Proto() const
Returns the underlying protobuf object (useful for testing).
const std::vector< int64_t > & coefficients() const
Returns the vector of coefficients.
IntegerVariableProto * MutableProto() const
Returns the mutable underlying protobuf object (useful for model edition).
bool operator!=(const IntervalVar &other) const
Difference test with another interval variable.
IntVar NewConstant(int64_t value)
Creates a constant variable.
void Maximize(const LinearExpr &expr)
Adds a linear maximization objective.
LinearExpr & AddTerm(IntVar var, int64_t coeff)
Adds a term (var * coeff) to the linear expression.
CpModelProto * MutableProto()
IntVar GetIntVarFromProtoIndex(int index)
Returns the integer variable from its index in the proto.
IntervalVar NewIntervalVar(const LinearExpr &start, const LinearExpr &size, const LinearExpr &end)
Creates an interval variable from 3 affine expressions.
Constraint AddNotEqual(const LinearExpr &left, const LinearExpr &right)
Adds left != right.
void ClearAssumptions()
Remove all assumptions from the model.
Constraint AddMaxEquality(IntVar target, absl::Span< const IntVar > vars)
Adds target == max(vars).
IntVar Var() const
Checks that the expression is 1 * var + 0, and returns var.
const ConstraintProto & Proto() const
Returns the underlying protobuf object (useful for testing).
const ::operations_research::sat::IntegerVariableProto & variables(int index) const
Constraint AddInverseConstraint(absl::Span< const IntVar > variables, absl::Span< const IntVar > inverse_variables)
An inverse constraint.
BoolVar ToBoolVar() const
Cast IntVar -> BoolVar.
MultipleCircuitConstraint AddMultipleCircuitConstraint()
Adds a multiple circuit constraint, aka the "VRP" (Vehicle Routing Problem) constraint.
int64_t SolutionIntegerMax(const CpSolverResponse &r, IntVar x)
Returns the max of an integer variable in a solution.
LinearExpr & AddVar(IntVar var)
Adds a single integer variable to the linear expression.
BoolVar PresenceBoolVar() const
Returns a BoolVar indicating the presence of this interval.
static LinearExpr ScalProd(absl::Span< const IntVar > vars, absl::Span< const int64_t > coeffs)
Constructs the scalar product of variables and coefficients.
int64_t SolutionIntegerMin(const CpSolverResponse &r, IntVar x)
Returns the min of an integer variable in a solution.
const ::operations_research::sat::ConstraintProto & constraints(int index) const
int index() const
Returns the index of the variable in the model.
bool SolutionBooleanValue(const CpSolverResponse &r, BoolVar x)
Evaluates the value of a Boolean literal in a solver response.
Constraint AddElement(IntVar index, absl::Span< const int64_t > values, IntVar target)
Adds the element constraint: values[index] == target.
IntervalVar GetIntervalVarFromProtoIndex(int index)
Returns the interval variable from its index in the proto.
const std::string & Name() const
Returns the name of the constraint (or the empty string if not set).
std::string DebugString() const
Returns a debug string.
BoolVar Not(BoolVar x)
A convenient wrapper so we can write Not(x) instead of x.Not() which is sometimes clearer.
void AddEvent(IntVar time, int64_t demand)
Adds a mandatory event.
IntVar NewIntVar(const Domain &domain)
Creates an integer variable with the given domain.
const CpModelProto & Build() const
::operations_research::sat::IntervalConstraintProto * mutable_interval()
Constraint AddMinEquality(IntVar target, absl::Span< const IntVar > vars)
Adds target == min(vars).
A dedicated container for linear expressions.
Constraint OnlyEnforceIf(absl::Span< const BoolVar > literals)
The constraint will be enforced iff all literals listed here are true.
static LinearExpr Sum(absl::Span< const IntVar > vars)
Constructs the sum of a list of variables.
Constraint AddImplication(BoolVar a, BoolVar b)
Adds a => b.
void AddAssumptions(absl::Span< const BoolVar > literals)
Adds multiple literals to the model as assumptions.
Constraint(ConstraintProto *proto)
Constraint AddBoolAnd(absl::Span< const BoolVar > literals)
Adds the constraint that all literals must be true.
::operations_research::sat::ConstraintProto * mutable_constraints(int index)
void AddOptionalEvent(IntVar time, int64_t demand, BoolVar is_active)
Adds a optional event.
CpModelProto const * model_proto
void AddArc(int tail, int head, BoolVar literal)
Add an arc to the circuit.
static LinearExpr BooleanScalProd(absl::Span< const BoolVar > vars, absl::Span< const int64_t > coeffs)
Constructs the scalar product of Booleans and coefficients.
void ClearHints()
Remove all hints.
void ScaleObjectiveBy(double scaling)
Sets scaling of the objective.
bool operator!=(const BoolVar &other) const
Dis-Equality test.
const std::string & Name() const
Returns the name of the variable (or the empty string if not set).
We call domain any subset of Int64 = [kint64min, kint64max].
Constraint AddLinMinEquality(const LinearExpr &target, absl::Span< const LinearExpr > exprs)
Adds target == min(exprs).
Specialized automaton constraint.
Constraint AddGreaterOrEqual(const LinearExpr &left, const LinearExpr &right)
Adds left >= right.
Constraint AddVariableElement(IntVar index, absl::Span< const IntVar > variables, IntVar target)
Adds the element constraint: variables[index] == target.
BoolVar WithName(const std::string &name)
Sets the name of the variable.
std::string DebugString() const
Debug string.
Constraint AddLessThan(const LinearExpr &left, const LinearExpr &right)
Adds left < right.
IntVar WithName(const std::string &name)
Sets the name of the variable.
BoolVar NewBoolVar()
Creates a Boolean variable.
Constraint AddNoOverlap(absl::Span< const IntervalVar > vars)
Adds a no-overlap constraint that ensures that all present intervals do not overlap in time.
Constraint WithName(const std::string &name)
Sets the name of the constraint.
Specialized circuit constraint.
std::string DebugString() const
Returns a debug string.
int index() const
Returns the index of the variable in the model.
void AddRectangle(IntervalVar x_coordinate, IntervalVar y_coordinate)
Adds a rectangle (parallel to the axis) to the constraint.
NoOverlap2DConstraint AddNoOverlap2D()
The no_overlap_2d constraint prevents a set of boxes from overlapping.
LinearExpr models a quantity that is linear in the decision variables (MPVariable) of an optimization...
int64_t Value() const
Checks that the expression is constant and returns its value.
Collection of objects used to extend the Constraint Solver library.
void AddTransition(int tail, int head, int64_t transition_label)
Adds a transitions to the automaton.
TableConstraint AddForbiddenAssignments(absl::Span< const IntVar > vars)
Adds an forbidden assignments constraint.
const ::operations_research::sat::IntervalConstraintProto & interval() const
void AddHint(IntVar var, int64_t value)
Adds hinting to a variable.
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.
LinearExpr StartExpr() const
Returns the start linear expression.
LinearExpr SizeExpr() const
Returns the size linear expression.
std::ostream & operator<<(std::ostream &os, const BoolVar &var)
Constraint AddLessOrEqual(const LinearExpr &left, const LinearExpr &right)
Adds left <= right.
IntervalConstraintProto * MutableProto() const
Returns the mutable underlying protobuf object (useful for model edition).
CumulativeConstraint AddCumulative(IntVar capacity)
The cumulative constraint.
IntegerVariableProto * MutableProto() const
Returns the mutable underlying protobuf object (useful for model edition).
bool operator==(const IntVar &other) const
Equality test with another IntVar.
std::string Name() const
Returns the name of the interval (or the empty string if not set).
Constraint AddLinearConstraint(const LinearExpr &expr, const Domain &domain)
Adds expr in domain.
const IntervalConstraintProto & Proto() const
Returns the underlying protobuf object (useful for testing).
Wrapper class around the cp_model proto.
const std::vector< IntVar > & variables() const
Returns the vector of variables.
::operations_research::sat::IntegerVariableProto * mutable_variables(int index)
Constraint AddDivisionEquality(IntVar target, IntVar numerator, IntVar denominator)
Adds target = num / denom (integer division rounded towards 0).
Represents a Interval variable.
static LinearExpr BooleanSum(absl::Span< const BoolVar > vars)
Constructs the sum of a list of Booleans.
void CopyFrom(const CpModelProto &model_proto)
Replace the current model with the one from the given proto.
const IntegerVariableProto & Proto() const
Returns the underlying protobuf object (useful for testing).