14#ifndef OR_TOOLS_MATH_OPT_CPP_MODEL_H_
15#define OR_TOOLS_MATH_OPT_CPP_MODEL_H_
21#include "absl/status/status.h"
22#include "absl/status/statusor.h"
23#include "absl/strings/string_view.h"
30#include "ortools/math_opt/model.pb.h"
31#include "ortools/math_opt/model_update.pb.h"
111 explicit Model(absl::string_view
name =
"");
140 std::unique_ptr<Model>
Clone()
const;
142 inline const std::string&
name()
const;
156 absl::string_view
name =
"");
161 absl::string_view
name =
"");
235 absl::string_view
name =
"");
330 inline void Maximize(
double objective);
341 inline void Minimize(
double objective);
466 inline void CheckOptionalModel(
const ModelStorage* other_storage)
const;
471 inline void CheckModel(
const ModelStorage* other_storage)
const;
479 const std::shared_ptr<ModelStorage> storage_;
492 const bool is_integer,
493 const absl::string_view
name) {
504 const absl::string_view
name) {
510 const absl::string_view
name) {
590 const absl::string_view
name) {
596 CheckModel(constraint.
storage());
622 <<
"No linear constraint with id: " <<
id.value();
627 CheckModel(constraint.
storage());
633 CheckModel(constraint.
storage());
639 CheckModel(constraint.
storage());
645 CheckModel(constraint.
storage());
651 CheckModel(constraint.
storage());
657 CheckModel(constraint.
storage());
665 CheckModel(constraint.
storage());
673 CheckModel(constraint.
storage());
737 const Variable second_variable)
const {
738 CheckModel(first_variable.
storage());
739 CheckModel(second_variable.
storage());
745 const double value) {
752 const double value) {
753 CheckModel(first_variable.
storage());
754 CheckModel(second_variable.
storage());
769 CheckModel(first_variable.
storage());
770 CheckModel(second_variable.
storage());
791void Model::CheckOptionalModel(
const ModelStorage*
const other_storage)
const {
792 if (other_storage !=
nullptr) {
798void Model::CheckModel(
const ModelStorage*
const other_storage)
const {
#define CHECK_EQ(val1, val2)
LinearConstraintId typed_id() const
const ModelStorage * storage() const
static absl::StatusOr< std::unique_ptr< Model > > FromModelProto(const ModelProto &model_proto)
void DeleteVariable(Variable variable)
int64_t next_variable_id() const
Variable AddBinaryVariable(absl::string_view name="")
double objective_coefficient(Variable variable) const
LinearConstraint linear_constraint(int64_t id) const
std::vector< Variable > RowNonzeros(LinearConstraint constraint)
const std::string & name() const
int num_linear_constraints() const
double coefficient(LinearConstraint constraint, Variable variable) const
int64_t next_linear_constraint_id() const
Model & operator=(const Model &)=delete
double lower_bound(Variable variable) const
BoundedLinearExpression AsBoundedLinearExpression(LinearConstraint constraint)
void SetObjective(double objective, bool is_maximize)
void Minimize(double objective)
std::unique_ptr< UpdateTracker > NewUpdateTracker()
LinearExpression ObjectiveAsLinearExpression() const
Model(absl::string_view name="")
Variable variable(int64_t id) const
Variable AddIntegerVariable(double lower_bound, double upper_bound, absl::string_view name="")
int num_variables() const
LinearConstraint AddLinearConstraint(absl::string_view name="")
double objective_offset() const
absl::Status ApplyUpdateProto(const ModelUpdateProto &update_proto)
bool has_variable(int64_t id) const
void Maximize(double objective)
void set_coefficient(LinearConstraint constraint, Variable variable, double value)
bool has_linear_constraint(int64_t id) const
bool is_objective_coefficient_nonzero(Variable variable) const
void AddToObjective(double objective)
double upper_bound(Variable variable) const
ModelProto ExportModel() const
bool is_coefficient_nonzero(LinearConstraint constraint, Variable variable) const
void set_is_maximize(bool is_maximize)
void set_is_integer(Variable variable, bool is_integer)
std::unique_ptr< Model > Clone() const
void set_continuous(Variable variable)
QuadraticExpression ObjectiveAsQuadraticExpression() const
void DeleteLinearConstraint(LinearConstraint constraint)
std::vector< Variable > Variables() const
std::vector< LinearConstraint > ColumnNonzeros(Variable variable)
void set_upper_bound(Variable variable, double upper_bound)
bool is_integer(Variable variable) const
Variable AddContinuousVariable(double lower_bound, double upper_bound, absl::string_view name="")
void set_lower_bound(Variable variable, double lower_bound)
std::vector< LinearConstraint > LinearConstraints() const
void set_integer(Variable variable)
std::vector< LinearConstraint > SortedLinearConstraints() const
void set_objective_coefficient(Variable variable, double value)
Model(const Model &)=delete
std::vector< Variable > SortedVariables() const
const ModelStorage * storage() const
Variable AddVariable(double lower_bound, double upper_bound, bool is_integer, absl::string_view name="")
void set_objective_offset(double value)
LinearConstraintId next_linear_constraint_id() const
void set_quadratic_objective_coefficient(VariableId first_variable, VariableId second_variable, double value)
void DeleteVariable(VariableId id)
const std::string & name() const
double linear_objective_coefficient(VariableId variable) const
int num_linear_constraints() const
double linear_constraint_coefficient(LinearConstraintId constraint, VariableId variable) const
void DeleteLinearConstraint(LinearConstraintId id)
void set_linear_objective_coefficient(VariableId variable, double value)
int num_variables() const
double linear_constraint_lower_bound(LinearConstraintId id) const
bool is_quadratic_objective_coefficient_nonzero(VariableId first_variable, VariableId second_variable) const
double objective_offset() const
void set_linear_constraint_coefficient(LinearConstraintId constraint, VariableId variable, double value)
void set_variable_upper_bound(VariableId id, double upper_bound)
void set_variable_is_integer(VariableId id, bool is_integer)
bool has_linear_constraint(LinearConstraintId id) const
const std::string & variable_name(VariableId id) const
void set_linear_constraint_upper_bound(LinearConstraintId id, double upper_bound)
void set_is_maximize(bool is_maximize)
double quadratic_objective_coefficient(VariableId first_variable, VariableId second_variable) const
void set_linear_constraint_lower_bound(LinearConstraintId id, double lower_bound)
VariableId next_variable_id() const
double linear_constraint_upper_bound(LinearConstraintId id) const
bool has_variable(VariableId id) const
double variable_lower_bound(VariableId id) const
bool is_linear_constraint_coefficient_nonzero(LinearConstraintId constraint, VariableId variable) const
bool is_variable_integer(VariableId id) const
const std::string & linear_constraint_name(LinearConstraintId id) const
bool is_linear_objective_coefficient_nonzero(VariableId variable) const
double variable_upper_bound(VariableId id) const
void set_variable_lower_bound(VariableId id, double lower_bound)
void set_objective_offset(double value)
const ModelStorage * storage() const
VariableId typed_id() const
CpModelProto const * model_proto
constexpr absl::string_view kObjectsFromOtherModelStorage
Collection of objects used to extend the Constraint Solver library.