76 absl::Span<const int> heads,
77 absl::Span<const Literal> literals,
Model* model);
91 bool MakeAugmentingPath(
int start);
97 const int num_variables_;
98 const std::vector<IntegerVariable> variables_;
101 std::vector<std::vector<std::pair<int, Literal>>>
102 variable_to_possible_values_;
110 std::vector<bool> value_visited_;
111 std::vector<bool> variable_visited_;
112 std::vector<int> value_to_variable_;
113 std::vector<int> variable_to_value_;
114 std::vector<int> prev_matching_;
115 std::vector<int> visiting_;
116 std::vector<int> variable_visited_from_;
135 std::vector<int> component_number_;
170 struct CachedBounds {
177 void FillHallReason(IntegerValue hall_lb, IntegerValue hall_ub);
182 bool PropagateLowerBounds();
183 bool PropagateLowerBoundsInternal(IntegerValue min_lb,
184 absl::Span<CachedBounds> bounds);
201 int FindStartIndexAndCompressPath(
int index);
203 int GetIndex(IntegerValue value)
const {
204 DCHECK_GE(value, base_);
205 DCHECK_LT(value - base_, index_to_start_index_.size());
206 return (value - base_).value();
209 IntegerValue GetValue(
int index)
const {
return base_ + IntegerValue(index); }
211 IntegerTrail* integer_trail_;
214 std::vector<CachedBounds> bounds_;
215 std::vector<CachedBounds> negated_bounds_;
218 std::vector<IntegerValue> hall_starts_;
219 std::vector<IntegerValue> hall_ends_;
223 std::vector<int> index_to_start_index_;
224 std::vector<int> index_to_end_index_;
225 SparseBitset<int> index_is_present_;
226 std::vector<AffineExpression> index_to_expr_;
229 std::vector<IntegerLiteral> integer_reason_;