33#ifndef OR_TOOLS_MATH_OPT_SOLVERS_GUROBI_G_GUROBI_H_
34#define OR_TOOLS_MATH_OPT_SOLVERS_GUROBI_G_GUROBI_H_
41#include "absl/status/status.h"
42#include "absl/status/statusor.h"
43#include "absl/types/span.h"
73 const std::optional<GurobiIsvKey>& isv_key = std::nullopt);
180 int where()
const {
return where_; }
185 absl::StatusOr<int>
CbGetInt(
int what)
const;
189 absl::StatusOr<double>
CbGetDouble(
int what)
const;
202 absl::Status
CbCut(absl::Span<const int> cutind,
203 absl::Span<const double> cutval,
char cutsense,
204 double cutrhs)
const;
207 absl::Status
CbLazy(absl::Span<const int> lazyind,
208 absl::Span<const double> lazyval,
char lazysense,
209 double lazyrhs)
const;
212 absl::StatusOr<double>
CbSolution(absl::Span<const double> solution)
const;
216 void*
const cb_data_;
230 static absl::StatusOr<std::unique_ptr<Gurobi>>
New(
263 absl::Status
AddVars(absl::Span<const double> obj,
264 absl::Span<const double> lb, absl::Span<const double> ub,
265 absl::Span<const char> vtype,
266 absl::Span<const std::string> names);
287 absl::Status
AddVars(absl::Span<const int> vbegin, absl::Span<const int> vind,
288 absl::Span<const double> vval,
289 absl::Span<const double> obj,
290 absl::Span<const double> lb, absl::Span<const double> ub,
291 absl::Span<const char> vtype,
292 absl::Span<const std::string> names);
295 absl::Status
DelVars(absl::Span<const int> ind);
304 absl::Status
AddConstrs(absl::Span<const char> sense,
305 absl::Span<const double> rhs,
306 absl::Span<const std::string> names);
309 absl::Status
DelConstrs(absl::Span<const int> ind);
316 absl::Status
ChgCoeffs(absl::Span<const int> cind, absl::Span<const int> vind,
317 absl::Span<const double> val);
324 absl::Status
AddQpTerms(absl::Span<const int> qrow,
325 absl::Span<const int> qcol,
326 absl::Span<const double> qval);
344 absl::StatusOr<int>
GetNnz(
int first_var,
int num_vars);
356 absl::Status
GetVars(absl::Span<int> vbegin, absl::Span<int> vind,
357 absl::Span<double> vval,
int first_var,
int num_vars);
366 absl::StatusOr<SparseMat>
GetVars(
int first_var,
int num_vars);
399 absl::Span<int> attr_out)
const;
403 absl::Span<const int> new_values);
405 absl::Span<const int> new_values);
408 absl::Span<double> attr_out)
const;
412 absl::Span<const double> new_values);
414 absl::Span<const double> new_values);
417 absl::Span<char> attr_out)
const;
421 absl::Span<const char> new_values);
423 absl::Span<const char> new_values);
463 static absl::StatusOr<std::unique_ptr<Gurobi>>
New(
466 absl::Status ToStatus(
467 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 GetVars(absl::Span< int > vbegin, absl::Span< int > vind, absl::Span< double > vval, int first_var, int num_vars)
absl::Status GetIntAttrArray(const char *name, absl::Span< int > attr_out) const
static absl::StatusOr< std::unique_ptr< Gurobi > > New(GRBenvUniquePtr master_env=nullptr)
absl::Status AddConstrs(absl::Span< const char > sense, absl::Span< const double > rhs, absl::Span< const std::string > names)
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::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()
static absl::StatusOr< std::unique_ptr< Gurobi > > NewWithSharedMasterEnv(GRBenv *master_env)
absl::Status SetIntAttr(const char *attr_name, int value)
absl::StatusOr< std::string > GetStringParam(const char *name)
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
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 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 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::Status SetCharAttrList(const char *name, absl::Span< const int > ind, absl::Span< const char > new_values)
struct _GRBmodel GRBmodel
absl::StatusOr< GRBenvUniquePtr > GurobiNewMasterEnv(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