21#include "absl/container/flat_hash_map.h"
22#include "absl/memory/memory.h"
23#include "absl/status/status.h"
24#include "absl/status/statusor.h"
25#include "absl/strings/string_view.h"
38 return std::make_unique<Model>(std::move(
storage));
45 : storage_(
std::move(storage)) {}
48 return std::make_unique<Model>(storage_->Clone());
65 std::vector<Variable> result;
67 for (
const VariableId var_id :
storage()->variables()) {
74 std::vector<Variable> result =
Variables();
75 std::sort(result.begin(), result.end(),
77 return l.typed_id() < r.typed_id();
84 std::vector<LinearConstraint> result;
85 for (
const LinearConstraintId constraint :
93 CheckModel(constraint.
storage());
94 std::vector<Variable> result;
104 CheckModel(constraint.
storage());
106 for (
const VariableId
var :
118 std::vector<LinearConstraint> result;
120 for (
const LinearConstraintId lin_con_id :
storage()->linear_constraints()) {
128 std::sort(result.begin(), result.end(),
130 return l.typed_id() < r.typed_id();
136 const bool is_maximize) {
137 CheckOptionalModel(objective.
storage());
147 const bool is_maximize) {
148 CheckOptionalModel(objective.
storage());
162 CheckOptionalModel(objective_terms.
storage());
172 CheckOptionalModel(objective_terms.
storage());
181 vars.first, vars.second,
182 coef +
storage()->quadratic_objective_coefficient(vars.first,
189 <<
"The objective function contains quadratic terms and cannot be "
190 "represented as a LinearExpression";
192 for (
const auto& [v,
coef] :
storage()->linear_objective()) {
200 for (
const auto& [v,
coef] :
storage()->linear_objective()) {
203 for (
const auto& [vars,
coef] :
storage()->quadratic_objective()) {
213 return std::make_unique<UpdateTracker>(storage_);
#define ASSIGN_OR_RETURN(lhs, rexpr)
LinearConstraintId typed_id() const
const ModelStorage * storage() const
const absl::flat_hash_map< VariableId, double > & raw_terms() const
const ModelStorage * storage() const
static absl::StatusOr< std::unique_ptr< Model > > FromModelProto(const ModelProto &model_proto)
std::vector< Variable > RowNonzeros(LinearConstraint constraint)
const std::string & name() const
int num_linear_constraints() const
BoundedLinearExpression AsBoundedLinearExpression(LinearConstraint constraint)
void SetObjective(double objective, bool is_maximize)
std::unique_ptr< UpdateTracker > NewUpdateTracker()
LinearExpression ObjectiveAsLinearExpression() const
Model(absl::string_view name="")
Variable variable(int64_t id) const
int num_variables() const
LinearConstraint AddLinearConstraint(absl::string_view name="")
double objective_offset() const
absl::Status ApplyUpdateProto(const ModelUpdateProto &update_proto)
void AddToObjective(double objective)
ModelProto ExportModel() const
std::unique_ptr< Model > Clone() const
QuadraticExpression ObjectiveAsQuadraticExpression() const
std::vector< Variable > Variables() const
std::vector< LinearConstraint > ColumnNonzeros(Variable variable)
std::vector< LinearConstraint > LinearConstraints() const
std::vector< LinearConstraint > SortedLinearConstraints() const
std::vector< Variable > SortedVariables() const
const ModelStorage * storage() const
void set_quadratic_objective_coefficient(VariableId first_variable, VariableId second_variable, double value)
static absl::StatusOr< std::unique_ptr< ModelStorage > > FromModelProto(const ModelProto &model_proto)
double linear_constraint_coefficient(LinearConstraintId constraint, VariableId variable) const
void set_linear_objective_coefficient(VariableId variable, double value)
double linear_constraint_lower_bound(LinearConstraintId id) const
double objective_offset() const
absl::Status ApplyUpdateProto(const ModelUpdateProto &update_proto)
void set_linear_constraint_coefficient(LinearConstraintId constraint, VariableId variable, double value)
ModelProto ExportModel() const
void set_is_maximize(bool is_maximize)
double linear_constraint_upper_bound(LinearConstraintId id) const
LinearConstraintId AddLinearConstraint(absl::string_view name="")
void set_objective_offset(double value)
const absl::flat_hash_map< QuadraticProductId, double > & raw_quadratic_terms() const
const absl::flat_hash_map< VariableId, double > & raw_linear_terms() const
const ModelStorage * storage() const
const ModelStorage * storage() const
VariableId typed_id() const
CpModelProto const * model_proto
Collection of objects used to extend the Constraint Solver library.
double upper_bound_minus_offset() const
LinearExpression expression
double lower_bound_minus_offset() const