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();
98 return parameters_.number_of_solvers() > 1
107 parameters_.solver_optimizer_sets(0),
111 parameters_, problem_state_, &learned_info,
time_limit);
117 <<
" New solution! ";
124 return BopSolveStatus::INFEASIBLE_PROBLEM;
130 learned_info.Clear();
134 ? BopSolveStatus::FEASIBLE_SOLUTION_FOUND
135 : BopSolveStatus::NO_SOLUTION_FOUND;
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()));
187 void 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()));