19 using ::operations_research::sat::LinearBooleanConstraint;
20 using ::operations_research::sat::LinearBooleanProblem;
21 using ::operations_research::sat::LinearObjective;
27 const std::string&
name)
30 values_(problem.num_variables(), false),
31 recompute_cost_(true),
32 recompute_is_feasible_(true),
36 const LinearObjective& objective = problem.objective();
37 for (
int i = 0; i < objective.coefficients_size(); ++i) {
38 const VariableIndex
var(objective.literals(i) - 1);
39 values_[
var] = objective.coefficients(i) < 0;
43 int64 BopSolution::ComputeCost()
const {
44 recompute_cost_ =
false;
46 const LinearObjective& objective = problem_->objective();
47 const size_t num_sparse_vars = objective.literals_size();
48 CHECK_EQ(num_sparse_vars, objective.coefficients_size());
49 for (
int i = 0; i < num_sparse_vars; ++i) {
51 const VariableIndex
var(abs(objective.literals(i)) - 1);
53 sum += objective.coefficients(i);
59 bool BopSolution::ComputeIsFeasible()
const {
60 recompute_is_feasible_ =
false;
61 for (
const LinearBooleanConstraint& constraint : problem_->constraints()) {
63 const size_t num_sparse_vars = constraint.literals_size();
64 CHECK_EQ(num_sparse_vars, constraint.coefficients_size());
66 for (
int i = 0; i < num_sparse_vars; ++i) {
69 const VariableIndex
var(abs(constraint.literals(i)) - 1);
71 sum += constraint.coefficients(i);
75 if ((constraint.has_upper_bound() && sum > constraint.upper_bound()) ||
76 (constraint.has_lower_bound() && sum < constraint.lower_bound())) {