14#ifndef OR_TOOLS_MATH_OPT_CPP_MODEL_H_
15#define OR_TOOLS_MATH_OPT_CPP_MODEL_H_
22#include "absl/status/status.h"
23#include "absl/status/statusor.h"
24#include "absl/strings/string_view.h"
30#include "ortools/math_opt/model.pb.h"
31#include "ortools/math_opt/model_update.pb.h"
147 explicit Model(absl::string_view
name =
"");
174 std::unique_ptr<Model>
Clone()
const;
176 inline const std::string&
name()
const;
190 absl::string_view
name =
"");
195 absl::string_view
name =
"");
218 inline const std::string&
name(
Variable variable)
const;
260 absl::string_view
name =
"");
346 inline void Maximize(
double objective);
357 inline void Minimize(
double objective);
482 inline void CheckOptionalModel(
const ModelStorage* other_storage)
const;
487 inline void CheckModel(
const ModelStorage* other_storage)
const;
495 const std::shared_ptr<ModelStorage> storage_;
508 const bool is_integer,
509 const absl::string_view
name) {
520 const absl::string_view
name) {
526 const absl::string_view
name) {
531 CheckModel(variable.
storage());
546 CheckModel(variable.
storage());
551 CheckModel(variable.
storage());
556 CheckModel(variable.
storage());
561 CheckModel(variable.
storage());
566 CheckModel(variable.
storage());
571 CheckModel(variable.
storage());
584 CheckModel(variable.
storage());
593 const absl::string_view
name) {
599 CheckModel(constraint.
storage());
616 CheckModel(constraint.
storage());
622 CheckModel(constraint.
storage());
628 CheckModel(constraint.
storage());
634 CheckModel(constraint.
storage());
640 CheckModel(constraint.
storage());
646 CheckModel(constraint.
storage());
647 CheckModel(variable.
storage());
654 CheckModel(constraint.
storage());
655 CheckModel(variable.
storage());
662 CheckModel(constraint.
storage());
663 CheckModel(variable.
storage());
721 CheckModel(variable.
storage());
726 const Variable second_variable)
const {
727 CheckModel(first_variable.
storage());
728 CheckModel(second_variable.
storage());
734 const double value) {
735 CheckModel(variable.
storage());
741 const double value) {
742 CheckModel(first_variable.
storage());
743 CheckModel(second_variable.
storage());
751 CheckModel(variable.
storage());
758 CheckModel(first_variable.
storage());
759 CheckModel(second_variable.
storage());
780void Model::CheckOptionalModel(
const ModelStorage*
const other_storage)
const {
781 if (other_storage !=
nullptr) {
787void 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)
Variable AddBinaryVariable(absl::string_view name="")
double objective_coefficient(Variable variable) const
std::vector< Variable > RowNonzeros(LinearConstraint constraint)
const std::string & name() const
int num_linear_constraints() const
double coefficient(LinearConstraint constraint, Variable variable) 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)
LinearExpression ObjectiveAsLinearExpression() const
Model(absl::string_view name="")
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)
void Maximize(double objective)
bool has_variable(int id) const
void set_coefficient(LinearConstraint constraint, Variable variable, double value)
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
int next_variable_id() 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
int next_linear_constraint_id() const
void set_integer(Variable variable)
std::vector< LinearConstraint > SortedLinearConstraints() const
std::unique_ptr< UpdateTracker > NewUpdateTracker() const
void set_objective_coefficient(Variable variable, double value)
Model(const Model &)=delete
bool has_linear_constraint(int id) const
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.