74 absl::Span<const int> heads,
75 absl::Span<const Literal> literals,
Model* model);
89 bool MakeAugmentingPath(
int start);
95 const int num_variables_;
96 const std::vector<IntegerVariable> variables_;
99 std::vector<std::vector<std::pair<int, Literal>>>
100 variable_to_possible_values_;
108 std::vector<bool> value_visited_;
109 std::vector<bool> variable_visited_;
110 std::vector<int> value_to_variable_;
111 std::vector<int> variable_to_value_;
112 std::vector<int> prev_matching_;
113 std::vector<int> visiting_;
114 std::vector<int> variable_visited_from_;
133 std::vector<int> component_number_;
168 struct CachedBounds {
175 void FillHallReason(IntegerValue hall_lb, IntegerValue hall_ub);
180 bool PropagateLowerBounds();
181 bool PropagateLowerBoundsInternal(IntegerValue min_lb,
182 absl::Span<CachedBounds> bounds);
199 int FindStartIndexAndCompressPath(
int index);
201 int GetIndex(IntegerValue value)
const {
202 DCHECK_GE(value, base_);
203 DCHECK_LT(value - base_, index_to_start_index_.size());
204 return (value - base_).value();
207 IntegerValue GetValue(
int index)
const {
return base_ + IntegerValue(index); }
209 IntegerTrail* integer_trail_;
212 std::vector<CachedBounds> bounds_;
213 std::vector<CachedBounds> negated_bounds_;
216 std::vector<IntegerValue> hall_starts_;
217 std::vector<IntegerValue> hall_ends_;
221 std::vector<int> indices_to_clear_;
222 std::vector<int> index_to_start_index_;
223 std::vector<int> index_to_end_index_;
224 std::vector<bool> index_is_present_;
225 std::vector<AffineExpression> index_to_expr_;
228 std::vector<IntegerLiteral> integer_reason_;