86 std::vector<int>* postsolve_mapping);
110 bool MaybeRemoveFixedVariables(std::vector<int>* postsolve_mapping);
113 bool ProcessChangedVariables(std::vector<bool>* in_queue,
114 std::deque<int>* queue);
115 void PresolveToFixPoint();
121 void ExpandCpModelAndCanonicalizeConstraints();
149 void DetectDuplicateIntervals(
150 int c, google::protobuf::RepeatedField<int32_t>* intervals);
186 bool AddVarAffineRepresentativeFromLinearEquality(
int target_index,
201 void TryToReduceCoefficientsOfLinearConstraint(
int c,
ConstraintProto* ct);
207 void ExtractEncodingFromLinear();
208 bool ProcessEncodingFromLinear(
int linear_encoding_ct_index,
210 int64_t* num_unique_terms,
211 int64_t* num_multiple_terms);
215 void DetectDuplicateConstraints();
216 void DetectDuplicateConstraintsWithDifferentEnforcements(
219 Trail* trail =
nullptr);
223 void DetectDominatedLinearConstraints();
255 void ProcessAtMostOneAndLinear();
263 bool PresolveNoOverlap2DFramed(
264 absl::Span<const Rectangle> fixed_boxes,
265 absl::Span<const RectangleInRange> non_fixed_boxes,
ConstraintProto* ct);
276 bool ExpandEncoded2DBinPacking(
277 absl::Span<const Rectangle> fixed_boxes,
278 absl::Span<const RectangleInRange> non_fixed_boxes,
ConstraintProto* ct);
283 void ProcessSetPPC();
286 void DetectIncludedEnforcement();
290 bool ProcessSetPPCSubset(
int subset_c,
int superset_c,
291 absl::flat_hash_set<int>* tmp_set,
292 bool* remove_subset,
bool* remove_superset,
293 bool* stop_processing_superset);
297 bool PresolvePureSatPart();
305 void ExtractEnforcementLiteralFromLinearConstraint(
int ct_index,
307 void LowerThanCoeffStrengthening(
bool from_lower_bound, int64_t min_magnitude,
312 void TransformIntoMaxCliques();
316 void TransformClausesToExactlyOne();
319 void ConvertToBoolAnd();
323 bool PropagateObjective();
328 void ExpandObjective();
336 void ShiftObjectiveWithExactlyOnes();
338 void ProcessVariableOnlyUsedInEncoding(
int var);
339 void TryToSimplifyDomain(
int var);
341 void LookAtVariableWithDegreeTwo(
int var);
342 void ProcessVariableInTwoAtMostOrExactlyOne(
int var);
344 bool MergeCliqueConstraintsHelper(std::vector<std::vector<Literal>>& cliques,
345 std::string_view entry_name,
347 bool MergeNoOverlapConstraints();
348 bool MergeNoOverlap2DConstraints();
359 bool RemoveCommonPart(
360 const absl::flat_hash_map<int, int64_t>& common_var_coeff_map,
361 absl::Span<
const std::pair<int, int64_t>> block,
368 void FindAlmostIdenticalLinearConstraints();
390 void EncodeAllAffineRelations();
391 bool PresolveAffineRelationIfAny(
int var);
397 std::string_view reason);
398 ABSL_MUST_USE_RESULT
bool MarkOptionalIntervalAsFalse(
ConstraintProto* ct);
400 std::vector<int>* postsolve_mapping_;
407 std::vector<std::pair<int, int64_t>> tmp_terms_;
410 std::vector<std::array<int64_t, 2>> conditional_mins_;
411 std::vector<std::array<int64_t, 2>> conditional_maxs_;
415 absl::flat_hash_map<int, int> temp_map_;
416 absl::flat_hash_set<int> temp_set_;
425 int64_t max_variation;
428 std::vector<RdEntry> rd_entries_;
429 std::vector<int> rd_vars_;
430 std::vector<int64_t> rd_coeffs_;
431 std::vector<int64_t> rd_magnitudes_;
432 std::vector<int64_t> rd_lbs_;
433 std::vector<int64_t> rd_ubs_;
434 std::vector<int64_t> rd_divisors_;
447 struct IntervalConstraintEq {
449 bool operator()(
int a,
int b)
const;
452 struct IntervalConstraintHash {
454 std::size_t operator()(
int ct_idx)
const;
460 absl::flat_hash_map<int, int, IntervalConstraintHash, IntervalConstraintEq>
461 interval_representative_;