14 #ifndef OR_TOOLS_SAT_CP_CONSTRAINTS_H_
15 #define OR_TOOLS_SAT_CP_CONSTRAINTS_H_
43 : literals_(literals),
46 integer_trail_(integer_trail) {}
52 const std::vector<
Literal> literals_;
54 std::vector<
Literal> literal_reason_;
74 IntegerVariable target_var,
const absl::Span<const IntegerVariable> vars,
75 const absl::Span<const IntegerValue> offsets,
76 const absl::Span<const Literal> selectors,
77 const absl::Span<const Literal> enforcements,
Model*
model);
84 const std::vector<IntegerVariable>
vars_;
85 const std::vector<IntegerValue> offsets_;
86 const std::vector<Literal> selectors_;
87 const std::vector<Literal> enforcements_;
92 std::vector<Literal> literal_reason_;
93 std::vector<IntegerLiteral> integer_reason_;
103 const std::vector<int64_t>&
input) {
104 std::vector<IntegerValue> result(
input.size());
105 for (
int i = 0; i <
input.size(); ++i) {
106 result[i] = IntegerValue(
input[i]);
113 const std::vector<Literal>& literals,
bool value) {
120 model->TakeOwnership(constraint);
125 IntegerVariable target_var,
const absl::Span<const IntegerVariable> vars,
126 const absl::Span<const IntegerValue> offsets,
127 const absl::Span<const Literal> selectors) {
131 selectors, {},
model);
133 model->TakeOwnership(constraint);
138 IntegerVariable target_var,
const absl::Span<const IntegerVariable> vars,
139 const absl::Span<const IntegerValue> offsets,
140 const absl::Span<const Literal> selectors,
141 const absl::Span<const Literal> enforcements) {
145 selectors, enforcements,
model);
147 model->TakeOwnership(constraint);
161 IntegerVariable target_var,
const std::vector<IntegerVariable>& vars,
162 const std::vector<Literal>& selectors) {
163 CHECK_EQ(vars.size(), selectors.size());
165 const std::vector<IntegerValue> offsets(vars.size(), IntegerValue(0));
166 if (vars.size() > 2) {
170 if (vars.size() > 2) {
const std::vector< IntVar * > vars_
#define CHECK_EQ(val1, val2)
void RegisterWith(GenericLiteralWatcher *watcher)
BooleanXorPropagator(const std::vector< Literal > &literals, bool value, Trail *trail, IntegerTrail *integer_trail)
void RegisterWith(GenericLiteralWatcher *watcher)
Class that owns everything related to a particular optimization model.
std::function< void(Model *)> GreaterThanAtLeastOneOf(IntegerVariable target_var, const absl::Span< const IntegerVariable > vars, const absl::Span< const IntegerValue > offsets, const absl::Span< const Literal > selectors)
std::function< void(Model *)> PartialIsOneOfVar(IntegerVariable target_var, const std::vector< IntegerVariable > &vars, const std::vector< Literal > &selectors)
std::function< void(Model *)> LiteralXorIs(const std::vector< Literal > &literals, bool value)
std::vector< IntegerVariable > NegationOf(const std::vector< IntegerVariable > &vars)
std::vector< IntegerValue > ToIntegerValueVector(const std::vector< int64_t > &input)
Collection of objects used to extend the Constraint Solver library.
static int input(yyscan_t yyscanner)
IntervalVar *const target_var_