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);
128 bool ProcessSetPPC();
133 bool ProcessSetPPCSubset(
int c1,
int c2,
const std::vector<int>& c2_minus_c1,
134 const std::vector<int>& original_constraint_index,
135 std::vector<bool>* marked_for_removal);
137 void PresolvePureSatPart();
140 void ExtractAtMostOneFromLinear(ConstraintProto*
ct);
142 void DivideLinearByGcd(ConstraintProto*
ct);
143 void ExtractEnforcementLiteralFromLinearConstraint(ConstraintProto*
ct);
147 void TransformIntoMaxCliques();
150 void ExtractBoolAnd();
152 void ExpandObjective();
154 void TryToSimplifyDomain(
int var);
156 void MergeNoOverlapConstraints();
160 void EncodeAllAffineRelations();
161 bool PresolveAffineRelationIfAny(
int var);
163 bool IntervalsCanIntersect(
const IntervalConstraintProto& interval1,
164 const IntervalConstraintProto& interval2);
166 bool ExploitEquivalenceRelations(
int c, ConstraintProto*
ct);
168 ABSL_MUST_USE_RESULT
bool RemoveConstraint(ConstraintProto*
ct);
169 ABSL_MUST_USE_RESULT
bool MarkConstraintAsFalse(ConstraintProto*
ct);
172 std::vector<int>* postsolve_mapping_;
176 std::vector<std::pair<int, int64>> tmp_terms_;
181 std::vector<int>* postsolve_mapping);
197 #endif // OR_TOOLS_SAT_CP_MODEL_PRESOLVE_H_