14#ifndef OR_TOOLS_SAT_CP_MODEL_SEARCH_H_
15#define OR_TOOLS_SAT_CP_MODEL_SEARCH_H_
22#include "absl/container/flat_hash_map.h"
23#include "absl/random/bit_gen_ref.h"
24#include "absl/strings/string_view.h"
25#include "absl/types/span.h"
27#include "ortools/sat/cp_model.pb.h"
34#include "ortools/sat/sat_parameters.pb.h"
56 int64_t
Min(
int var)
const;
57 int64_t
Max(
int var)
const;
70 mutable absl::BitGenRef random_;
75 const CpModelProto& cp_model_proto,
Model* model);
79 const CpModelProto& cp_model_proto,
Model* model);
84 absl::Span<const IntegerVariable> variable_mapping,
85 IntegerVariable objective_var,
Model* model);
104 const CpModelProto& cp_model_proto,
105 absl::Span<const IntegerVariable> variable_mapping,
115 SatParameters base_params);
120 const SatParameters& base_params,
const CpModelProto& cp_model,
129 absl::Span<const SatParameters> base_params,
int num_params_to_generate);
135 const SatParameters& base_params);
144 bool Keep(absl::string_view name);
147 std::vector<SatParameters>
Filter(absl::Span<const SatParameters>
input) {
148 std::vector<SatParameters> result;
149 for (
const SatParameters& param :
input) {
150 if (
Keep(param.name())) {
151 result.push_back(param);
160 std::string
LastName()
const {
return last_name_; }
170 bool FNMatch(absl::string_view pattern, absl::string_view str);
172 std::vector<std::string> filter_patterns_;
173 std::vector<std::string> ignore_patterns_;
174 std::string last_name_;
176 std::vector<std::string> ignored_;
BooleanOrIntegerLiteral GreaterOrEqual(int var, int64_t value) const
Helpers to generate a decision.
BooleanOrIntegerLiteral LowerOrEqual(int var, int64_t value) const
BooleanOrIntegerLiteral MedianValue(int var) const
int64_t Max(int var) const
CpModelView(Model *model)
int64_t Min(int var) const
int NumVariables() const
The valid indices for the calls below are in [0, num_variables).
bool IsFixed(int var) const
Getters about the current domain of the given variable.
BooleanOrIntegerLiteral RandomSplit(int var, int64_t lb, int64_t ub) const
Simple class used to filter executed subsolver names.
SubsolverNameFilter(const SatParameters ¶ms)
Warning, params must outlive the class and be constant.
std::vector< SatParameters > Filter(absl::Span< const SatParameters > input)
Applies Keep() to all the input list.
bool Keep(absl::string_view name)
Shall we keep a parameter with given name?
std::string LastName() const
const std::vector< std::string > & AllIgnored()
Returns the list of all ignored subsolver for use in logs.
void STLSortAndRemoveDuplicates(T *v, const LessFunc &less_func)
std::vector< SatParameters > GetFullWorkerParameters(const SatParameters &base_params, const CpModelProto &cp_model, int num_already_present, SubsolverNameFilter *filter)
std::function< BooleanOrIntegerLiteral()> ConstructIntegerCompletionSearchStrategy(absl::Span< const IntegerVariable > variable_mapping, IntegerVariable objective_var, Model *model)
Constructs an integer completion search strategy.
std::function< BooleanOrIntegerLiteral()> ConstructFixedSearchStrategy(std::function< BooleanOrIntegerLiteral()> user_search, std::function< BooleanOrIntegerLiteral()> heuristic_search, std::function< BooleanOrIntegerLiteral()> integer_completion)
std::function< BooleanOrIntegerLiteral()> ConstructHintSearchStrategy(const CpModelProto &cp_model_proto, CpModelMapping *mapping, Model *model)
Constructs a search strategy that follow the hint from the model.
std::function< BooleanOrIntegerLiteral()> ConstructHeuristicSearchStrategy(const CpModelProto &cp_model_proto, Model *model)
Constructs a search strategy tailored for the current model.
std::vector< SatParameters > GetFirstSolutionBaseParams(const SatParameters &base_params)
std::vector< SatParameters > RepeatParameters(absl::Span< const SatParameters > base_params, int num_params_to_generate)
std::function< BooleanOrIntegerLiteral()> ConstructUserSearchStrategy(const CpModelProto &cp_model_proto, Model *model)
Constructs the search strategy specified in the given CpModelProto.
absl::flat_hash_map< std::string, SatParameters > GetNamedParameters(SatParameters base_params)
std::function< BooleanOrIntegerLiteral()> InstrumentSearchStrategy(const CpModelProto &cp_model_proto, absl::Span< const IntegerVariable > variable_mapping, std::function< BooleanOrIntegerLiteral()> instrumented_strategy, Model *model)
In SWIG mode, we don't want anything besides these top-level includes.
static int input(yyscan_t yyscanner)