19 #include "google/protobuf/text_format.h"
39 using ::operations_research::sat::LinearBooleanProblem;
40 using ::operations_research::glop::ColIndex;
47 ProblemState* problem_state) {
48 CHECK(
nullptr != problem_state);
51 problem_state->MarkAsOptimal();
56 problem_state->MarkAsInfeasible();
70 problem_state_(problem),
90 LOG(ERROR) <<
"Invalid Boolean problem: " << valid.message();
96 return parameters_.number_of_solvers() > 1
105 parameters_.solver_optimizer_sets(0),
109 parameters_, problem_state_, &learned_info,
time_limit);
115 <<
" New solution! ";
128 learned_info.Clear();
153 VLOG(1) <<
"First solution is feasible.";
155 learned_info.
solution = first_solution;
163 <<
"First solution is infeasible. Using it as assignment preference.";
164 std::vector<bool> assignment_preference;
165 for (
int i = 0; i < first_solution.
Size(); ++i) {
166 assignment_preference.push_back(first_solution.
Value(VariableIndex(i)));
175 problem_, sat::Coefficient(problem_state_.
lower_bound()));
185 void BopSolver::UpdateParameters() {
186 if (parameters_.solver_optimizer_sets_size() == 0) {
189 CHECK(::google::protobuf::TextFormat::ParseFromString(
190 parameters_.default_solver_optimizer_sets(),
191 parameters_.add_solver_optimizer_sets()));