18 using ::operations_research::sat::LinearBooleanConstraint;
19 using ::operations_research::sat::LinearBooleanProblem;
20 using ::operations_research::sat::LinearObjective;
25 const std::string&
name)
28 values_(problem.num_variables(), false),
29 recompute_cost_(true),
30 recompute_is_feasible_(true),
34 const LinearObjective& objective = problem.objective();
35 for (
int i = 0; i < objective.coefficients_size(); ++i) {
36 const VariableIndex
var(objective.literals(i) - 1);
37 values_[
var] = objective.coefficients(i) < 0;
41 int64 BopSolution::ComputeCost()
const {
42 recompute_cost_ =
false;
44 const LinearObjective& objective = problem_->objective();
45 const size_t num_sparse_vars = objective.literals_size();
46 CHECK_EQ(num_sparse_vars, objective.coefficients_size());
47 for (
int i = 0; i < num_sparse_vars; ++i) {
48 CHECK_GT(objective.literals(i), 0);
49 const VariableIndex
var(abs(objective.literals(i)) - 1);
51 sum += objective.coefficients(i);
57 bool BopSolution::ComputeIsFeasible()
const {
58 recompute_is_feasible_ =
false;
59 for (
const LinearBooleanConstraint& constraint : problem_->constraints()) {
61 const size_t num_sparse_vars = constraint.literals_size();
62 CHECK_EQ(num_sparse_vars, constraint.coefficients_size());
64 for (
int i = 0; i < num_sparse_vars; ++i) {
66 CHECK_GT(constraint.literals(i), 0);
67 const VariableIndex
var(abs(constraint.literals(i)) - 1);
69 sum += constraint.coefficients(i);
73 if ((constraint.has_upper_bound() && sum > constraint.upper_bound()) ||
74 (constraint.has_lower_bound() && sum < constraint.lower_bound())) {