14 #ifndef OR_TOOLS_SAT_CP_MODEL_PRESOLVE_H_
15 #define OR_TOOLS_SAT_CP_MODEL_PRESOLVE_H_
19 #include "ortools/sat/cp_model.pb.h"
23 #include "ortools/sat/sat_parameters.pb.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 PresolveReservoir(ConstraintProto*
ct);
103 bool PresolveAllDiff(ConstraintProto*
ct);
104 bool PresolveTable(ConstraintProto*
ct);
105 bool PresolveElement(ConstraintProto*
ct);
106 bool PresolveInterval(
int c, ConstraintProto*
ct);
107 bool PresolveIntDiv(ConstraintProto*
ct);
108 bool PresolveIntProd(ConstraintProto*
ct);
109 bool PresolveIntMin(ConstraintProto*
ct);
110 bool PresolveIntMax(ConstraintProto*
ct);
111 bool PresolveLinMin(ConstraintProto*
ct);
112 bool PresolveLinMax(ConstraintProto*
ct);
113 bool PresolveIntAbs(ConstraintProto*
ct);
114 bool PresolveBoolXor(ConstraintProto*
ct);
116 bool PresolveAtMostOrExactlyOne(ConstraintProto*
ct);
117 bool PresolveAtMostOne(ConstraintProto*
ct);
118 bool PresolveExactlyOne(ConstraintProto*
ct);
120 bool PresolveBoolAnd(ConstraintProto*
ct);
121 bool PresolveBoolOr(ConstraintProto*
ct);
122 bool PresolveEnforcementLiteral(ConstraintProto*
ct);
126 template <
typename ProtoWithVarsAndCoeffs>
127 bool CanonicalizeLinearExpressionInternal(
const ConstraintProto&
ct,
128 ProtoWithVarsAndCoeffs*
proto,
130 bool CanonicalizeLinearExpression(
const ConstraintProto&
ct,
131 LinearExpressionProto* exp);
134 bool CanonicalizeLinear(ConstraintProto*
ct);
135 bool PropagateDomainsInLinear(
int c, ConstraintProto*
ct);
136 bool RemoveSingletonInLinear(ConstraintProto*
ct);
137 bool PresolveSmallLinear(ConstraintProto*
ct);
138 bool PresolveLinearOnBooleans(ConstraintProto*
ct);
139 void PresolveLinearEqualityModuloTwo(ConstraintProto*
ct);
142 int64 StartMin(
const IntervalConstraintProto&
interval)
const;
144 int64 SizeMin(
const IntervalConstraintProto&
interval)
const;
145 int64 SizeMax(
const IntervalConstraintProto&
interval)
const;
149 bool ProcessSetPPC();
154 bool ProcessSetPPCSubset(
int c1,
int c2,
const std::vector<int>& c2_minus_c1,
155 const std::vector<int>& original_constraint_index,
156 std::vector<bool>* marked_for_removal);
158 void PresolvePureSatPart();
161 void ExtractAtMostOneFromLinear(ConstraintProto*
ct);
163 void DivideLinearByGcd(ConstraintProto*
ct);
165 void ExtractEnforcementLiteralFromLinearConstraint(
int ct_index,
166 ConstraintProto*
ct);
170 void TransformIntoMaxCliques();
173 void ExtractBoolAnd();
175 void ExpandObjective();
177 void TryToSimplifyDomain(
int var);
179 void MergeNoOverlapConstraints();
183 void EncodeAllAffineRelations();
184 bool PresolveAffineRelationIfAny(
int var);
186 bool ExploitEquivalenceRelations(
int c, ConstraintProto*
ct);
188 ABSL_MUST_USE_RESULT
bool RemoveConstraint(ConstraintProto*
ct);
189 ABSL_MUST_USE_RESULT
bool MarkConstraintAsFalse(ConstraintProto*
ct);
191 std::vector<int>* postsolve_mapping_;
195 std::vector<std::pair<int, int64>> tmp_terms_;
200 std::vector<int>* postsolve_mapping);
void RemoveEmptyConstraints()
CpModelPresolver(PresolveContext *context, std::vector< int > *postsolve_mapping)
bool PresolveOneConstraint(int c)
CpModelProto const * model_proto
GurobiMPCallbackContext * context
bool PresolveCpModel(PresolveContext *context, std::vector< int > *postsolve_mapping)
std::vector< int > FindDuplicateConstraints(const CpModelProto &model_proto)
void ApplyVariableMapping(const std::vector< int > &mapping, const PresolveContext &context)
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...