19 #include "absl/strings/string_view.h"
24 using ::operations_research::sat::LinearBooleanConstraint;
25 using ::operations_research::sat::LinearBooleanProblem;
26 using ::operations_research::sat::LinearObjective;
32 absl::string_view
name)
35 values_(problem.num_variables(), false),
36 recompute_cost_(true),
37 recompute_is_feasible_(true),
41 const LinearObjective& objective = problem.objective();
42 for (
int i = 0; i < objective.coefficients_size(); ++i) {
43 const VariableIndex
var(objective.literals(i) - 1);
44 values_[
var] = objective.coefficients(i) < 0;
48 int64_t BopSolution::ComputeCost()
const {
49 recompute_cost_ =
false;
51 const LinearObjective& objective = problem_->objective();
52 const size_t num_sparse_vars = objective.literals_size();
53 CHECK_EQ(num_sparse_vars, objective.coefficients_size());
54 for (
int i = 0; i < num_sparse_vars; ++i) {
55 CHECK_GT(objective.literals(i), 0);
56 const VariableIndex
var(abs(objective.literals(i)) - 1);
58 sum += objective.coefficients(i);
64 bool BopSolution::ComputeIsFeasible()
const {
65 recompute_is_feasible_ =
false;
66 for (
const LinearBooleanConstraint& constraint : problem_->constraints()) {
68 const size_t num_sparse_vars = constraint.literals_size();
69 CHECK_EQ(num_sparse_vars, constraint.coefficients_size());
71 for (
int i = 0; i < num_sparse_vars; ++i) {
73 CHECK_GT(constraint.literals(i), 0);
74 const VariableIndex
var(abs(constraint.literals(i)) - 1);
76 sum += constraint.coefficients(i);
80 if ((constraint.has_upper_bound() && sum > constraint.upper_bound()) ||
81 (constraint.has_lower_bound() && sum < constraint.lower_bound())) {
BopSolution(const sat::LinearBooleanProblem &problem, absl::string_view name)
Collection of objects used to extend the Constraint Solver library.