78 std::vector<int>* postsolve_mapping);
102 bool MaybeRemoveFixedVariables(std::vector<int>* postsolve_mapping);
105 bool ProcessChangedVariables(std::vector<bool>* in_queue,
106 std::deque<int>* queue);
107 void PresolveToFixPoint();
113 void ExpandCpModelAndCanonicalizeConstraints();
141 void DetectDuplicateIntervals(
142 int c, google::protobuf::RepeatedField<int32_t>* intervals);
177 bool AddVarAffineRepresentativeFromLinearEquality(
int target_index,
188 void TryToReduceCoefficientsOfLinearConstraint(
int c,
ConstraintProto* ct);
194 void ExtractEncodingFromLinear();
195 bool ProcessEncodingFromLinear(
int linear_encoding_ct_index,
197 int64_t* num_unique_terms,
198 int64_t* num_multiple_terms);
202 void DetectDuplicateConstraints();
203 void DetectDuplicateConstraintsWithDifferentEnforcements(
206 Trail* trail =
nullptr);
210 void DetectDominatedLinearConstraints();
215 void ProcessAtMostOneAndLinear();
223 bool PresolveNoOverlap2DFramed(
224 absl::Span<const Rectangle> fixed_boxes,
225 absl::Span<const RectangleInRange> non_fixed_boxes,
ConstraintProto* ct);
236 bool ExpandEncoded2DBinPacking(
237 absl::Span<const Rectangle> fixed_boxes,
238 absl::Span<const RectangleInRange> non_fixed_boxes,
ConstraintProto* ct);
243 void ProcessSetPPC();
246 void DetectIncludedEnforcement();
250 bool ProcessSetPPCSubset(
int subset_c,
int superset_c,
251 absl::flat_hash_set<int>* tmp_set,
252 bool* remove_subset,
bool* remove_superset,
253 bool* stop_processing_superset);
257 bool PresolvePureSatPart();
265 void ExtractEnforcementLiteralFromLinearConstraint(
int ct_index,
267 void LowerThanCoeffStrengthening(
bool from_lower_bound, int64_t min_magnitude,
272 void TransformIntoMaxCliques();
275 void ConvertToBoolAnd();
279 bool PropagateObjective();
284 void ExpandObjective();
292 void ShiftObjectiveWithExactlyOnes();
294 void MaybeTransferLinear1ToAnotherVariable(
int var);
295 void ProcessVariableOnlyUsedInEncoding(
int var);
296 void TryToSimplifyDomain(
int var);
298 void LookAtVariableWithDegreeTwo(
int var);
299 void ProcessVariableInTwoAtMostOrExactlyOne(
int var);
301 void MergeNoOverlapConstraints();
312 bool RemoveCommonPart(
313 const absl::flat_hash_map<int, int64_t>& common_var_coeff_map,
314 absl::Span<
const std::pair<int, int64_t>> block,
321 void FindAlmostIdenticalLinearConstraints();
343 void EncodeAllAffineRelations();
344 bool PresolveAffineRelationIfAny(
int var);
351 std::vector<int>* postsolve_mapping_;
358 std::vector<std::pair<int, int64_t>> tmp_terms_;
361 std::vector<std::array<int64_t, 2>> conditional_mins_;
362 std::vector<std::array<int64_t, 2>> conditional_maxs_;
366 absl::flat_hash_map<int, int> temp_map_;
367 absl::flat_hash_set<int> temp_set_;
376 int64_t max_variation;
379 std::vector<RdEntry> rd_entries_;
380 std::vector<int> rd_vars_;
381 std::vector<int64_t> rd_coeffs_;
382 std::vector<int64_t> rd_magnitudes_;
383 std::vector<int64_t> rd_lbs_;
384 std::vector<int64_t> rd_ubs_;
385 std::vector<int64_t> rd_divisors_;
398 struct IntervalConstraintEq {
400 bool operator()(
int a,
int b)
const;
403 struct IntervalConstraintHash {
405 std::size_t operator()(
int ct_idx)
const;
411 absl::flat_hash_map<int, int, IntervalConstraintHash, IntervalConstraintEq>
412 interval_representative_;