19 #include "google/protobuf/text_format.h" 38 using ::operations_research::sat::LinearBooleanProblem;
42 using ::operations_research::glop::ColIndex;
49 ProblemState* problem_state) {
50 CHECK(
nullptr != problem_state);
53 problem_state->MarkAsOptimal();
58 problem_state->MarkAsInfeasible();
72 problem_state_(problem),
92 LOG(
ERROR) <<
"Invalid Boolean problem: " << valid.message();
111 parameters_, problem_state_, &learned_info,
time_limit);
117 <<
" New solution! ";
130 learned_info.Clear();
155 VLOG(1) <<
"First solution is feasible.";
157 learned_info.
solution = first_solution;
165 <<
"First solution is infeasible. Using it as assignment preference.";
166 std::vector<bool> assignment_preference;
167 for (
int i = 0; i < first_solution.
Size(); ++i) {
168 assignment_preference.push_back(first_solution.
Value(VariableIndex(i)));
187 void BopSolver::UpdateParameters() {
191 CHECK(::google::protobuf::TextFormat::ParseFromString(
A simple class to enforce both an elapsed time limit and a deterministic time limit in the same threa...
std::string StatString() const
double AddOffsetAndScaleObjectiveValue(const LinearBooleanProblem &problem, Coefficient v)
const sat::LinearBooleanProblem & original_problem() const
bool IsInfeasible() const
BopSolver(const sat::LinearBooleanProblem &problem)
ModelSharedTimeLimit * time_limit
bool Value(VariableIndex var) const
#define VLOG(verboselevel)
int64_t lower_bound() const
const ::operations_research::bop::BopSolverOptimizerSet & solver_optimizer_sets(int index) const
const std::string & default_solver_optimizer_sets() const
#define SCOPED_TIME_STAT(stats)
bool MergeLearnedInfo(const LearnedInfo &learned_info, BopOptimizerBase::Status optimization_status)
absl::Status ValidateBooleanProblem(const LinearBooleanProblem &problem)
double GetScaledGap() const
BopSolveStatus SolveWithTimeLimit(TimeLimit *time_limit)
const BopSolution & solution() const
static std::unique_ptr< TimeLimit > FromParameters(const Parameters ¶meters)
Creates a time limit object initialized from an object that provides methods max_time_in_seconds() an...
std::tuple< int64_t, int64_t, const double > Coefficient
Status Optimize(const BopParameters ¶meters, const ProblemState &problem_state, LearnedInfo *learned_info, TimeLimit *time_limit) override
double GetScaledBestBound() const
Collection of objects used to extend the Constraint Solver library.
int solver_optimizer_sets_size() const
void set_assignment_preference(const std::vector< bool > &a)
::PROTOBUF_NAMESPACE_ID::int32 number_of_solvers() const
double GetScaledCost() const
StrictITIVector< ColIndex, Fractional > DenseRow
void SetParameters(const BopParameters ¶meters)
#define IF_STATS_ENABLED(instructions)
::operations_research::bop::BopSolverOptimizerSet * add_solver_optimizer_sets()