19#include "google/protobuf/text_format.h"
38using ::operations_research::sat::LinearBooleanProblem;
42using ::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();
98 return parameters_.number_of_solvers() > 1
107 parameters_.solver_optimizer_sets(0),
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)));
177 problem_, sat::Coefficient(problem_state_.
lower_bound()));
187void BopSolver::UpdateParameters() {
188 if (parameters_.solver_optimizer_sets_size() == 0) {
191 CHECK(::google::protobuf::TextFormat::ParseFromString(
192 parameters_.default_solver_optimizer_sets(),
193 parameters_.add_solver_optimizer_sets()));
#define VLOG(verboselevel)
std::string StatString() const
A simple class to enforce both an elapsed time limit and a deterministic time limit in the same threa...
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...
double GetScaledCost() const
bool Value(VariableIndex var) const
BopSolveStatus SolveWithTimeLimit(TimeLimit *time_limit)
BopSolver(const sat::LinearBooleanProblem &problem)
double GetScaledGap() const
double GetScaledBestBound() const
const BopSolution & solution() const
int64_t lower_bound() const
bool MergeLearnedInfo(const LearnedInfo &learned_info, BopOptimizerBase::Status optimization_status)
const sat::LinearBooleanProblem & original_problem() const
void SetParameters(const BopParameters ¶meters)
void set_assignment_preference(const std::vector< bool > &a)
bool IsInfeasible() const
SharedTimeLimit * time_limit
@ FEASIBLE_SOLUTION_FOUND
StrictITIVector< ColIndex, Fractional > DenseRow
absl::Status ValidateBooleanProblem(const LinearBooleanProblem &problem)
double AddOffsetAndScaleObjectiveValue(const LinearBooleanProblem &problem, Coefficient v)
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...
#define IF_STATS_ENABLED(instructions)
#define SCOPED_TIME_STAT(stats)