 |
OR-Tools
8.1
|
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 =
"") {
292 int var_in_equality,
int64 coeff_in_equality,
293 const ConstraintProto& equality,
294 std::vector<int>* new_vars_in_objective =
nullptr);
299 return objective_map;
302 return objective_domain_is_constraining;
318 return constraint_to_vars_[c];
322 return var_to_constraints_[
var];
326 return interval_usage_[c];
388 void AddVariableUsage(
int c);
389 void UpdateLinear1Usage(
const ConstraintProto&
ct,
int c);
393 bool VariableIsNotRepresentativeOfEquivalenceClass(
int var)
const;
397 bool RemapEncodingMaps();
403 bool CanonicalizeEncoding(
int* ref,
int64*
value);
418 bool add_constraints);
421 bool is_unsat =
false;
424 std::vector<Domain> domains;
430 absl::flat_hash_map<int, int64> objective_map;
431 std::vector<std::pair<int, int64>> tmp_entries;
432 bool objective_domain_is_constraining =
false;
434 double objective_offset;
435 double objective_scaling_factor;
438 std::vector<std::vector<int>> constraint_to_vars_;
439 std::vector<absl::flat_hash_set<int>> var_to_constraints_;
442 std::vector<int> constraint_to_linear1_var_;
443 std::vector<int> var_to_num_linear1_;
446 std::vector<std::vector<int>> constraint_to_intervals_;
447 std::vector<int> interval_usage_;
450 absl::flat_hash_map<int, SavedVariable> abs_relations_;
456 absl::flat_hash_map<int64, SavedVariable> constant_to_ref_;
460 std::deque<int> encoding_remap_queue_;
464 absl::flat_hash_map<int, absl::flat_hash_map<int64, SavedLiteral>> encoding_;
470 absl::flat_hash_map<int, absl::flat_hash_map<int64, absl::flat_hash_set<int>>>
472 absl::flat_hash_map<int, absl::flat_hash_map<int64, absl::flat_hash_set<int>>>
483 std::vector<int> tmp_new_usage_;
486 absl::flat_hash_set<int> removed_variables_;
492 #endif // OR_TOOLS_SAT_PRESOLVE_CONTEXT_H_
CpModelProto * mapping_model
void AddImplication(int a, int b)
PresolveContext(CpModelProto *model, CpModelProto *mapping)
bool StoreAffineRelation(int ref_x, int ref_y, int64 coeff, int64 offset)
const std::vector< int > & ConstraintToVars(int c) const
const absl::flat_hash_set< int > & VarToConstraints(int var) const
#define VLOG(verboselevel)
bool StoreLiteralImpliesVarEqValue(int literal, int var, int64 value)
SparseBitset< int64 > modified_domains
void AddImplyInDomain(int b, int x, const Domain &domain)
Domain DomainOf(int ref) const
void UpdateConstraintVariableUsage(int c)
bool VariableWithCostIsUniqueAndRemovable(int ref) const
void ReadObjectiveFromProto()
void SubstituteVariableInObjective(int var_in_equality, int64 coeff_in_equality, const ConstraintProto &equality, std::vector< int > *new_vars_in_objective=nullptr)
int64 MaxOf(int ref) const
int NewIntVar(const Domain &domain)
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...
bool PropagateAffineRelation(int ref)
std::vector< Domain > tmp_left_domains
bool LiteralIsTrue(int lit) const
int NumEquivRelations() const
bool IsFixed(int ref) const
bool VariableWasRemoved(int ref) const
bool DomainIsEmpty(int ref) const
ABSL_MUST_USE_RESULT bool IntersectDomainWith(int ref, const Domain &domain, bool *domain_modified=nullptr)
We call domain any subset of Int64 = [kint64min, kint64max].
int GetLiteralRepresentative(int ref) const
int Get(PresolveContext *context) const
int GetOrCreateConstantVar(int64 cst)
A simple class to enforce both an elapsed time limit and a deterministic time limit in the same threa...
std::vector< absl::flat_hash_set< int > > var_to_lb_only_constraints
AffineRelation::Relation GetAffineRelation(int ref) const
GurobiMPCallbackContext * context
bool keep_all_feasible_solutions
const Domain & ObjectiveDomain() const
void RemoveVariableFromAffineRelation(int var)
bool DomainContains(int ref, int64 value) const
bool VariableIsUniqueAndRemovable(int ref) const
bool DomainOfVarIsIncludedIn(int var, const Domain &domain)
DomainDeductions deductions
void ExploitFixedDomain(int var)
void StoreBooleanEqualityRelation(int ref_a, int ref_b)
void MarkVariableAsRemoved(int ref)
absl::flat_hash_map< std::string, int > stats_by_rule_name
int GetOrCreateVarValueEncoding(int ref, int64 value)
bool LiteralIsFalse(int lit) const
int64 num_presolve_operations
constexpr int kAssumptionsConstraint
void RemoveAllVariablesFromAffineRelationConstraint()
void InitializeNewDomains()
bool ObjectiveDomainIsConstraining() const
int64 MinOf(int ref) const
#define DCHECK(condition)
absl::flat_hash_set< int > tmp_literal_set
int GetVariableRepresentative(int ref) const
std::vector< int > tmp_literals
std::vector< Domain > tmp_term_domains
void UpdateNewConstraintsVariableUsage()
void WriteObjectiveToProto() const
bool StoreAbsRelation(int target_ref, int ref)
ABSL_MUST_USE_RESULT bool CanonicalizeObjective()
ABSL_MUST_USE_RESULT bool NotifyThatModelIsUnsat(const std::string &message="")
void RegisterVariablesUsedInAssumptions()
bool ConstraintVariableUsageIsConsistent()
bool ModelIsUnsat() const
int Get(PresolveContext *context) const
void UpdateRuleStats(const std::string &name, int num_times=1)
const absl::flat_hash_map< int, int64 > & ObjectiveMap() const
bool ConstraintVariableGraphIsUpToDate() const
bool VariableIsOnlyUsedInEncoding(int ref) const
int IntervalUsage(int c) const
bool VariableIsNotUsedAnymore(int ref) const
void CanonicalizeDomainOfSizeTwo(int var)
CpModelProto * working_model
bool HasVarValueEncoding(int ref, int64 value, int *literal=nullptr)
constexpr int kObjectiveConstraint
void InsertVarValueEncoding(int literal, int ref, int64 value)
std::string AffineRelationDebugString(int ref) const
bool CanBeUsedAsLiteral(int ref) const
std::string RefDebugString(int ref) const
bool GetAbsRelation(int target_ref, int *ref)
ABSL_MUST_USE_RESULT bool SetLiteralToTrue(int lit)
ABSL_MUST_USE_RESULT bool SetLiteralToFalse(int lit)
bool StoreLiteralImpliesVarNEqValue(int literal, int var, int64 value)
std::vector< absl::flat_hash_set< int > > var_to_ub_only_constraints
constexpr int kAffineRelationConstraint
int NumAffineRelations() const