21using ::operations_research::sat::LinearBooleanConstraint;
22using ::operations_research::sat::LinearBooleanProblem;
23using ::operations_research::sat::LinearObjective;
29 const std::string&
name)
32 values_(problem.num_variables(), false),
33 recompute_cost_(true),
34 recompute_is_feasible_(true),
38 const LinearObjective& objective = problem.objective();
39 for (
int i = 0; i < objective.coefficients_size(); ++i) {
40 const VariableIndex
var(objective.literals(i) - 1);
41 values_[
var] = objective.coefficients(i) < 0;
45int64_t BopSolution::ComputeCost()
const {
46 recompute_cost_ =
false;
48 const LinearObjective& objective = problem_->objective();
49 const size_t num_sparse_vars = objective.literals_size();
50 CHECK_EQ(num_sparse_vars, objective.coefficients_size());
51 for (
int i = 0; i < num_sparse_vars; ++i) {
53 const VariableIndex
var(abs(objective.literals(i)) - 1);
55 sum += objective.coefficients(i);
61bool BopSolution::ComputeIsFeasible()
const {
62 recompute_is_feasible_ =
false;
63 for (
const LinearBooleanConstraint& constraint : problem_->constraints()) {
65 const size_t num_sparse_vars = constraint.literals_size();
66 CHECK_EQ(num_sparse_vars, constraint.coefficients_size());
68 for (
int i = 0; i < num_sparse_vars; ++i) {
71 const VariableIndex
var(abs(constraint.literals(i)) - 1);
73 sum += constraint.coefficients(i);
77 if ((constraint.has_upper_bound() && sum > constraint.upper_bound()) ||
78 (constraint.has_lower_bound() && sum < constraint.lower_bound())) {
#define CHECK_EQ(val1, val2)
#define CHECK_GT(val1, val2)
BopSolution(const sat::LinearBooleanProblem &problem, const std::string &name)
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...