14 #ifndef OR_TOOLS_SAT_CP_MODEL_PRESOLVE_H_
15 #define OR_TOOLS_SAT_CP_MODEL_PRESOLVE_H_
40 const PresolveContext&
context);
66 std::vector<int>* postsolve_mapping);
81 void PresolveToFixPoint();
97 bool PresolveAutomaton(ConstraintProto*
ct);
98 bool PresolveCircuit(ConstraintProto*
ct);
99 bool PresolveRoutes(ConstraintProto*
ct);
100 bool PresolveCumulative(ConstraintProto*
ct);
101 bool PresolveNoOverlap(ConstraintProto*
ct);
102 bool PresolveAllDiff(ConstraintProto*
ct);
103 bool PresolveTable(ConstraintProto*
ct);
104 bool PresolveElement(ConstraintProto*
ct);
105 bool PresolveInterval(
int c, ConstraintProto*
ct);
106 bool PresolveIntDiv(ConstraintProto*
ct);
107 bool PresolveIntProd(ConstraintProto*
ct);
108 bool PresolveIntMin(ConstraintProto*
ct);
109 bool PresolveIntMax(ConstraintProto*
ct);
110 bool PresolveLinMin(ConstraintProto*
ct);
111 bool PresolveLinMax(ConstraintProto*
ct);
112 bool PresolveIntAbs(ConstraintProto*
ct);
113 bool PresolveBoolXor(ConstraintProto*
ct);
114 bool PresolveAtMostOne(ConstraintProto*
ct);
115 bool PresolveBoolAnd(ConstraintProto*
ct);
116 bool PresolveBoolOr(ConstraintProto*
ct);
117 bool PresolveEnforcementLiteral(ConstraintProto*
ct);
120 bool CanonicalizeLinear(ConstraintProto*
ct);
121 bool PropagateDomainsInLinear(
int c, ConstraintProto*
ct);
122 bool RemoveSingletonInLinear(ConstraintProto*
ct);
123 bool PresolveSmallLinear(ConstraintProto*
ct);
124 bool PresolveLinearOnBooleans(ConstraintProto*
ct);
125 void PresolveLinearEqualityModuloTwo(ConstraintProto*
ct);
129 bool ProcessSetPPC();
134 bool ProcessSetPPCSubset(
int c1,
int c2,
const std::vector<int>& c2_minus_c1,
135 const std::vector<int>& original_constraint_index,
136 std::vector<bool>* marked_for_removal);
138 void PresolvePureSatPart();
141 void ExtractAtMostOneFromLinear(ConstraintProto*
ct);
143 void DivideLinearByGcd(ConstraintProto*
ct);
145 void ExtractEnforcementLiteralFromLinearConstraint(
int ct_index,
146 ConstraintProto*
ct);
150 void TransformIntoMaxCliques();
153 void ExtractBoolAnd();
155 void ExpandObjective();
157 void TryToSimplifyDomain(
int var);
159 void MergeNoOverlapConstraints();
163 void EncodeAllAffineRelations();
164 bool PresolveAffineRelationIfAny(
int var);
166 bool IntervalsCanIntersect(
const IntervalConstraintProto& interval1,
167 const IntervalConstraintProto& interval2);
169 bool ExploitEquivalenceRelations(
int c, ConstraintProto*
ct);
171 ABSL_MUST_USE_RESULT
bool RemoveConstraint(ConstraintProto*
ct);
172 ABSL_MUST_USE_RESULT
bool MarkConstraintAsFalse(ConstraintProto*
ct);
175 std::vector<int>* postsolve_mapping_;
179 std::vector<std::pair<int, int64>> tmp_terms_;
184 std::vector<int>* postsolve_mapping);
200 #endif // OR_TOOLS_SAT_CP_MODEL_PRESOLVE_H_