108#ifndef OR_TOOLS_MATH_OPT_CPP_MATH_OPT_H_
109#define OR_TOOLS_MATH_OPT_CPP_MATH_OPT_H_
118#include "absl/memory/memory.h"
119#include "absl/status/statusor.h"
120#include "absl/strings/string_view.h"
129#include "ortools/math_opt/model.pb.h"
130#include "ortools/math_opt/parameters.pb.h"
131#include "ortools/math_opt/result.pb.h"
146 SolverType solver_type, absl::string_view
name =
"",
147 SolverInitializerProto solver_initializer = SolverInitializerProto());
149 inline const std::string&
name()
const;
153 bool is_integer, absl::string_view
name =
"");
163 absl::string_view
name =
"");
168 absl::string_view
name =
"");
206 absl::string_view
name =
"");
274 absl::StatusOr<Result>
Solve(
275 const SolveParametersProto& solver_parameters,
287 void CheckModel(IndexedModel*
model);
288 const SolverType solver_type_;
289 const SolverInitializerProto solver_initializer_;
290 const std::unique_ptr<IndexedModel> model_;
291 std::unique_ptr<Solver> solver_;
292 std::unique_ptr<IndexedModel::UpdateTracker> update_tracker_;
300 SolverInitializerProto solver_initializer)
301 : solver_type_(solver_type),
302 solver_initializer_(
std::move(solver_initializer)),
308 return Variable(model_.get(), model_->AddVariable(
name));
312 const absl::string_view
name) {
323 const absl::string_view
name) {
329 const absl::string_view
name) {
335 model_->DeleteVariable(variable.
typed_id());
341 return model_->next_variable_id().value();
345 return model_->has_variable(VariableId(
id));
353 const absl::string_view
name) {
360 model_->DeleteLinearConstraint(constraint.
typed_id());
364 return model_->num_linear_constraints();
368 return model_->next_linear_constraint_id().value();
372 return model_->has_linear_constraint(LinearConstraintId(
id));
#define CHECK_EQ(val1, val2)
IndexedModel * model() const
LinearConstraintId typed_id() const
void DeleteVariable(Variable variable)
std::function< CallbackResult(CallbackData)> Callback
Variable AddBinaryVariable(absl::string_view name="")
MathOpt(const MathOpt &)=delete
MathOpt & operator=(const MathOpt &)=delete
const std::string & name() const
int num_linear_constraints() const
Variable AddIntegerVariable(double lower_bound, double upper_bound, absl::string_view name="")
int num_variables() const
LinearConstraint AddLinearConstraint(absl::string_view name="")
bool has_variable(int id) const
ModelProto ExportModel() const
int next_variable_id() const
std::vector< Variable > Variables()
void DeleteLinearConstraint(LinearConstraint constraint)
std::vector< LinearConstraint > ColumnNonzeros(Variable variable)
Variable AddContinuousVariable(double lower_bound, double upper_bound, absl::string_view name="")
int next_linear_constraint_id() const
absl::StatusOr< Result > Solve(const SolveParametersProto &solver_parameters, const ModelSolveParameters &model_parameters={}, const CallbackRegistration &callback_registration={}, Callback callback=nullptr)
std::vector< LinearConstraint > LinearConstraints()
bool has_linear_constraint(int id) const
std::vector< LinearConstraint > SortedLinearConstraints()
std::vector< Variable > SortedVariables()
Variable AddVariable(double lower_bound, double upper_bound, bool is_integer, absl::string_view name="")
IndexedModel * model() const
VariableId typed_id() const
Collection of objects used to extend the Constraint Solver library.