 |
OR-Tools
8.0
|
Go to the documentation of this file.
14 #ifndef OR_TOOLS_SAT_PRESOLVE_CONTEXT_H_
15 #define OR_TOOLS_SAT_PRESOLVE_CONTEXT_H_
102 int64 MinOf(
const LinearExpressionProto& expr)
const;
103 int64 MaxOf(
const LinearExpressionProto& expr)
const;
107 return domains[
var].IsIncludedIn(domain);
134 int ref,
const Domain& domain,
bool* domain_modified =
nullptr);
143 const std::string&
message =
"") {
145 VLOG(1) <<
"INFEASIBLE: " <<
message;
288 int var_in_equality,
int64 coeff_in_equality,
289 const ConstraintProto& equality,
290 std::vector<int>* new_vars_in_objective =
nullptr);
295 return objective_map;
298 return objective_domain_is_constraining;
314 return constraint_to_vars_[c];
318 return var_to_constraints_[
var];
322 return interval_usage_[c];
384 void AddVariableUsage(
int c);
385 void UpdateLinear1Usage(
const ConstraintProto&
ct,
int c);
389 bool VariableIsNotRepresentativeOfEquivalenceClass(
int var)
const;
393 bool RemapEncodingMaps();
399 bool CanonicalizeEncoding(
int* ref,
int64*
value);
414 bool add_constraints);
417 bool is_unsat =
false;
420 std::vector<Domain> domains;
426 absl::flat_hash_map<int, int64> objective_map;
427 std::vector<std::pair<int, int64>> tmp_entries;
428 bool objective_domain_is_constraining =
false;
430 double objective_offset;
431 double objective_scaling_factor;
434 std::vector<std::vector<int>> constraint_to_vars_;
435 std::vector<absl::flat_hash_set<int>> var_to_constraints_;
438 std::vector<int> constraint_to_linear1_var_;
439 std::vector<int> var_to_num_linear1_;
442 std::vector<std::vector<int>> constraint_to_intervals_;
443 std::vector<int> interval_usage_;
446 absl::flat_hash_map<int, SavedVariable> abs_relations_;
452 absl::flat_hash_map<int64, SavedVariable> constant_to_ref_;
456 std::deque<int> encoding_remap_queue_;
460 absl::flat_hash_map<int, absl::flat_hash_map<int64, SavedLiteral>> encoding_;
466 absl::flat_hash_map<int, absl::flat_hash_map<int64, absl::flat_hash_set<int>>>
468 absl::flat_hash_map<int, absl::flat_hash_map<int64, absl::flat_hash_set<int>>>
479 std::vector<int> tmp_new_usage_;
482 absl::flat_hash_set<int> removed_variables_;
488 #endif // OR_TOOLS_SAT_PRESOLVE_CONTEXT_H_
void AddImplyInDomain(int b, int x, const Domain &domain)
void UpdateRuleStats(const std::string &name)
ABSL_MUST_USE_RESULT bool SetLiteralToFalse(int lit)
int GetOrCreateVarValueEncoding(int ref, int64 value)
void ReadObjectiveFromProto()
const Domain & ObjectiveDomain() const
ABSL_MUST_USE_RESULT bool IntersectDomainWith(int ref, const Domain &domain, bool *domain_modified=nullptr)
bool PropagateAffineRelation(int ref)
bool LiteralIsFalse(int lit) const
const absl::flat_hash_map< int, int64 > & ObjectiveMap() const
bool keep_all_feasible_solutions
SparseBitset< int64 > modified_domains
int NewIntVar(const Domain &domain)
bool VariableIsOnlyUsedInEncoding(int ref) const
bool VariableWithCostIsUniqueAndRemovable(int ref) const
int IntervalUsage(int c) const
void RegisterVariablesUsedInAssumptions()
int NumEquivRelations() const
void UpdateNewConstraintsVariableUsage()
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...
int64 num_presolve_operations
bool CanBeUsedAsLiteral(int ref) const
void MarkVariableAsRemoved(int ref)
std::vector< Domain > tmp_left_domains
bool StoreAbsRelation(int target_ref, int ref)
bool LiteralIsTrue(int lit) const
We call domain any subset of Int64 = [kint64min, kint64max].
void RemoveAllVariablesFromAffineRelationConstraint()
GurobiMPCallbackContext * context
CpModelProto * mapping_model
bool VariableIsNotUsedAnymore(int ref) const
int Get(PresolveContext *context) const
bool DomainContains(int ref, int64 value) const
bool IsFixed(int ref) const
void UpdateConstraintVariableUsage(int c)
int GetVariableRepresentative(int ref) const
bool StoreLiteralImpliesVarNEqValue(int literal, int var, int64 value)
int GetLiteralRepresentative(int ref) const
int GetOrCreateConstantVar(int64 cst)
absl::flat_hash_map< std::string, int > stats_by_rule_name
void AddImplication(int a, int b)
ABSL_MUST_USE_RESULT bool SetLiteralToTrue(int lit)
bool StoreAffineRelation(int ref_x, int ref_y, int64 coeff, int64 offset)
A simple class to enforce both an elapsed time limit and a deterministic time limit in the same threa...
constexpr int kAssumptionsConstraint
int NumAffineRelations() const
std::vector< absl::flat_hash_set< int > > var_to_lb_only_constraints
PresolveContext(CpModelProto *model, CpModelProto *mapping)
void CanonicalizeDomainOfSizeTwo(int var)
void RemoveVariableFromAffineRelation(int var)
ABSL_MUST_USE_RESULT bool CanonicalizeObjective()
Domain DomainOf(int ref) const
bool HasVarValueEncoding(int ref, int64 value, int *literal=nullptr)
void ExploitFixedDomain(int var)
const std::vector< int > & ConstraintToVars(int c) const
ABSL_MUST_USE_RESULT bool NotifyThatModelIsUnsat(const std::string &message="")
CpModelProto * working_model
bool GetAbsRelation(int target_ref, int *ref)
std::vector< absl::flat_hash_set< int > > var_to_ub_only_constraints
DomainDeductions deductions
bool ConstraintVariableUsageIsConsistent()
bool ConstraintVariableGraphIsUpToDate() const
void InsertVarValueEncoding(int literal, int ref, int64 value)
std::vector< Domain > tmp_term_domains
bool ObjectiveDomainIsConstraining() const
void InitializeNewDomains()
absl::flat_hash_set< int > tmp_literal_set
AffineRelation::Relation GetAffineRelation(int ref) const
bool StoreLiteralImpliesVarEqValue(int literal, int var, int64 value)
constexpr int kObjectiveConstraint
bool VariableWasRemoved(int ref) const
bool ModelIsUnsat() const
void SubstituteVariableInObjective(int var_in_equality, int64 coeff_in_equality, const ConstraintProto &equality, std::vector< int > *new_vars_in_objective=nullptr)
std::vector< int > tmp_literals
void WriteObjectiveToProto()
const absl::flat_hash_set< int > & VarToConstraints(int var) const
int Get(PresolveContext *context) const
void StoreBooleanEqualityRelation(int ref_a, int ref_b)
constexpr int kAffineRelationConstraint
bool DomainIsEmpty(int ref) const
bool VariableIsUniqueAndRemovable(int ref) const
bool DomainOfVarIsIncludedIn(int var, const Domain &domain)
int64 MaxOf(int ref) const
int64 MinOf(int ref) const