33 #ifndef OR_TOOLS_MATH_OPT_SOLVERS_GUROBI_G_GUROBI_H_
34 #define OR_TOOLS_MATH_OPT_SOLVERS_GUROBI_G_GUROBI_H_
43 #include "absl/status/status.h"
44 #include "absl/status/statusor.h"
45 #include "absl/types/span.h"
76 const std::optional<GurobiIsvKey>& isv_key = std::nullopt);
183 int where()
const {
return where_; }
188 absl::StatusOr<int>
CbGetInt(
int what)
const;
192 absl::StatusOr<double>
CbGetDouble(
int what)
const;
205 absl::Status
CbCut(absl::Span<const int> cutind,
206 absl::Span<const double> cutval,
char cutsense,
207 double cutrhs)
const;
210 absl::Status
CbLazy(absl::Span<const int> lazyind,
211 absl::Span<const double> lazyval,
char lazysense,
212 double lazyrhs)
const;
215 absl::StatusOr<double>
CbSolution(absl::Span<const double> solution)
const;
219 void*
const cb_data_;
233 static absl::StatusOr<std::unique_ptr<Gurobi>>
New(
257 absl::Status
AddVar(
double obj,
double lb,
double ub,
char vtype,
258 const std::string&
name);
266 absl::Status
AddVar(absl::Span<const int> vind, absl::Span<const double> vval,
267 double obj,
double lb,
double ub,
char vtype,
268 const std::string&
name);
280 absl::Status
AddVars(absl::Span<const double> obj,
281 absl::Span<const double> lb, absl::Span<const double> ub,
282 absl::Span<const char> vtype,
283 absl::Span<const std::string> names);
304 absl::Status
AddVars(absl::Span<const int> vbegin, absl::Span<const int> vind,
305 absl::Span<const double> vval,
306 absl::Span<const double> obj,
307 absl::Span<const double> lb, absl::Span<const double> ub,
308 absl::Span<const char> vtype,
309 absl::Span<const std::string> names);
312 absl::Status
DelVars(absl::Span<const int> ind);
317 absl::Status
AddConstr(
char sense,
double rhs,
const std::string&
name);
322 absl::Status
AddConstr(absl::Span<const int> cind,
323 absl::Span<const double> cval,
char sense,
double rhs,
324 const std::string&
name);
333 absl::Status
AddConstrs(absl::Span<const char> sense,
334 absl::Span<const double> rhs,
335 absl::Span<const std::string> names);
338 absl::Status
DelConstrs(absl::Span<const int> ind);
345 absl::Status
ChgCoeffs(absl::Span<const int> cind, absl::Span<const int> vind,
346 absl::Span<const double> val);
353 absl::Status
AddQpTerms(absl::Span<const int> qrow,
354 absl::Span<const int> qcol,
355 absl::Span<const double> qval);
369 double abs_tol,
double rel_tol,
370 const std::string&
name,
double constant,
371 absl::Span<const int> lind,
372 absl::Span<const double> lval);
379 absl::Status
AddQConstr(absl::Span<const int> lind,
380 absl::Span<const double> lval,
381 absl::Span<const int> qrow,
382 absl::Span<const int> qcol,
383 absl::Span<const double> qval,
char sense,
double rhs,
384 const std::string&
name);
389 absl::Status
DelQConstrs(
const absl::Span<const int> ind);
403 absl::Status
AddSos(absl::Span<const int> types, absl::Span<const int> beg,
404 absl::Span<const int> ind,
405 absl::Span<const double>
weight);
410 absl::Status
DelSos(absl::Span<const int> ind);
416 absl::Span<const int> ind,
417 absl::Span<const double> val,
char sense,
436 absl::StatusOr<int>
GetNnz(
int first_var,
int num_vars);
448 absl::Status
GetVars(absl::Span<int> vbegin, absl::Span<int> vind,
449 absl::Span<double> vval,
int first_var,
int num_vars);
458 absl::StatusOr<SparseMat>
GetVars(
int first_var,
int num_vars);
491 absl::Span<int> attr_out)
const;
495 absl::Span<const int> new_values);
497 absl::Span<const int> new_values);
500 absl::Span<double> attr_out)
const;
504 absl::Span<const double> new_values);
506 absl::Span<const double> new_values);
509 absl::Span<char> attr_out)
const;
513 absl::Span<const char> new_values);
515 absl::Span<const char> new_values);
564 static absl::StatusOr<std::unique_ptr<Gurobi>>
New(
567 absl::Status ToStatus(
568 int grb_err, absl::StatusCode code = absl::StatusCode::kInvalidArgument,
static constexpr SourceLocation current()
absl::StatusOr< double > CbGetDouble(int what) const
absl::StatusOr< double > CbSolution(absl::Span< const double > solution) const
CallbackContext(Gurobi *gurobi, void *cb_data, int where)
absl::Status CbGetDoubleArray(int what, absl::Span< double > result) const
absl::Status CbCut(absl::Span< const int > cutind, absl::Span< const double > cutval, char cutsense, double cutrhs) const
absl::StatusOr< std::string > CbGetMessage() const
absl::StatusOr< int > CbGetInt(int what) const
absl::Status CbLazy(absl::Span< const int > lazyind, absl::Span< const double > lazyval, char lazysense, double lazyrhs) const
absl::Status AddConstr(char sense, double rhs, const std::string &name)
absl::Status GetVars(absl::Span< int > vbegin, absl::Span< int > vind, absl::Span< double > vval, int first_var, int num_vars)
absl::Status AddVar(double obj, double lb, double ub, char vtype, const std::string &name)
absl::Status GetIntAttrArray(const char *name, absl::Span< int > attr_out) const
absl::Status SetCharAttrElement(const char *name, int element, char new_value)
absl::Status DelQConstrs(const absl::Span< const int > ind)
absl::Status AddConstrs(absl::Span< const char > sense, absl::Span< const double > rhs, absl::Span< const std::string > names)
absl::StatusOr< double > GetDoubleAttrElement(const char *name, int element) const
absl::StatusOr< double > GetDoubleParam(const char *name)
absl::Status Optimize(Callback cb=nullptr)
absl::Status ChgCoeffs(absl::Span< const int > cind, absl::Span< const int > vind, absl::Span< const double > val)
absl::Status DelGenConstrs(absl::Span< const int > ind)
absl::StatusOr< int > GetIntParam(const char *name)
absl::Status SetDoubleAttr(const char *attr_name, double value)
absl::Status AddQpTerms(absl::Span< const int > qrow, absl::Span< const int > qcol, absl::Span< const double > qval)
absl::StatusOr< int > GetNnz(int first_var, int num_vars)
absl::Status SetDoubleParam(const char *name, double value)
std::function< absl::Status(const CallbackContext &)> Callback
absl::Status UpdateModel()
absl::Status AddIndicator(const std::string &name, int binvar, int binval, absl::Span< const int > ind, absl::Span< const double > val, char sense, double rhs)
absl::Status SetIntAttr(const char *attr_name, int value)
static absl::StatusOr< std::unique_ptr< Gurobi > > NewWithSharedPrimaryEnv(GRBenv *primary_env)
absl::StatusOr< std::string > GetStringParam(const char *name)
absl::Status SetDoubleAttrElement(const char *name, int element, double new_value)
absl::Status GetCharAttrArray(const char *name, absl::Span< char > attr_out) const
absl::Status SetCharAttrArray(const char *name, absl::Span< const char > new_values)
absl::StatusOr< int > GetIntAttr(const char *name) const
static absl::StatusOr< std::unique_ptr< Gurobi > > New(GRBenvUniquePtr primary_env=nullptr)
absl::Status DelVars(absl::Span< const int > ind)
absl::StatusOr< std::string > GetStringAttr(const char *name) const
absl::Status SetIntAttrList(const char *name, absl::Span< const int > ind, absl::Span< const int > new_values)
absl::Status GetDoubleAttrArray(const char *name, absl::Span< double > attr_out) const
absl::Status DelSos(absl::Span< const int > ind)
absl::Status SetDoubleAttrArray(const char *name, absl::Span< const double > new_values)
absl::Status SetParam(const char *name, const std::string &value)
bool IsAttrAvailable(const char *name) const
absl::Status SetDoubleAttrList(const char *name, absl::Span< const int > ind, absl::Span< const double > new_values)
absl::StatusOr< double > GetDoubleAttr(const char *name) const
absl::Status SetNthObjective(int index, int priority, double weight, double abs_tol, double rel_tol, const std::string &name, double constant, absl::Span< const int > lind, absl::Span< const double > lval)
absl::Status AddSos(absl::Span< const int > types, absl::Span< const int > beg, absl::Span< const int > ind, absl::Span< const double > weight)
absl::Status ResetParameters()
absl::Status SetIntParam(const char *name, int value)
absl::Status SetIntAttrArray(const char *name, absl::Span< const int > new_values)
absl::Status SetStringParam(const char *name, const std::string &value)
absl::Status DelConstrs(absl::Span< const int > ind)
absl::Status SetStringAttr(const char *attr_name, const std::string &value)
absl::Status AddVars(absl::Span< const double > obj, absl::Span< const double > lb, absl::Span< const double > ub, absl::Span< const char > vtype, absl::Span< const std::string > names)
absl::StatusOr< char > GetCharAttrElement(const char *name, int element) const
absl::Status SetCharAttrList(const char *name, absl::Span< const int > ind, absl::Span< const char > new_values)
absl::Status AddQConstr(absl::Span< const int > lind, absl::Span< const double > lval, absl::Span< const int > qrow, absl::Span< const int > qcol, absl::Span< const double > qval, char sense, double rhs, const std::string &name)
struct _GRBmodel GRBmodel
absl::StatusOr< GRBenvUniquePtr > GurobiNewPrimaryEnv(const std::optional< GurobiIsvKey > &isv_key)
std::unique_ptr< GRBenv, GurobiFreeEnv > GRBenvUniquePtr
std::vector< double > vals
std::vector< int > begins
void operator()(GRBenv *const env) const
std::string application_name