18 #include "absl/status/status.h"
19 #include "absl/strings/match.h"
20 #include "absl/strings/str_cat.h"
21 #include "absl/strings/str_format.h"
27 constexpr
int GRB_OK = 0;
28 const char kGurobiEnvErrorMsg[] =
29 "Could not load Gurobi environment. Is gurobi correctly installed and "
30 "licensed on this machine?";
32 if (
GRBloadenv(env,
nullptr) != 0 || *env ==
nullptr) {
33 return absl::FailedPreconditionError(
34 absl::StrFormat(
"%s %s", kGurobiEnvErrorMsg,
GRBgeterrormsg(*env)));
36 return absl::OkStatus();
39 std::function<int(
GRBmodel*,
int,
int*,
double*,
double,
double,
const char*)>
41 std::function<int(
GRBmodel*
model,
int numnz,
int* vind,
double* vval,
42 double obj,
double lb,
double ub,
char vtype,
45 std::function<int(
GRBmodel*,
int,
int,
int*,
int*,
double*,
double*,
double*,
46 double*,
char*,
char**)>
48 std::function<int(
GRBmodel*
model,
int numchgs,
int* cind,
int* vind,
56 std::function<int(
GRBmodel*,
const char*,
int,
int,
double*)>
67 std::function<int(
GRBenv*,
GRBmodel**,
const char*,
int numvars,
double*,
68 double*,
double*,
char*,
char**)>
84 std::function<void(
int*,
int*,
int*)>
GRBversion =
nullptr;
86 std::function<int(
void* cbdata,
int where,
int what,
void* resultP)>
GRBcbget =
88 std::function<int(
void* cbdata,
int cutlen,
const int* cutind,
89 const double* cutval,
char cutsense,
double cutrhs)>
91 std::function<int(
void* cbdata,
int lazylen,
const int* lazyind,
92 const double* lazyval,
char lazysense,
double lazyrhs)>
94 std::function<int(
void* cbdata,
const double* solution,
double* objvalP)>
96 std::function<int(
GRBmodel*
model,
int numnz,
int* cind,
double* cval,
97 char sense,
double rhs,
const char* constrname)>
100 int nvars,
const int* vars,
const double* vals,
char sense,
103 std::function<int(
GRBmodel*
model,
const char* attrname,
int element,
108 std::function<int(
GRBenv* env,
const char* paramname,
const char*
value)>
110 std::function<int(
GRBmodel*
model,
int numsos,
int nummembers,
int* types,
111 int* beg,
int* ind,
double*
weight)>
113 std::function<int(
GRBmodel*
model,
int numlnz,
int* lind,
double* lval,
114 int numqnz,
int* qrow,
int* qcol,
double* qval,
char sense,
115 double rhs,
const char* QCname)>
118 const int* vars,
double constant)>
121 const int* vars,
double constant)>
131 std::function<int(
GRBmodel*
model,
int numqnz,
int* qrow,
int* qcol,
206 VLOG(1) <<
"Try to load from " << full_library_path;
211 const std::vector<std::vector<std::string>> GurobiVersionLib = {
212 {
"911",
"91"}, {
"910",
"91"}, {
"903",
"90"}, {
"902",
"90"}};
221 const char* gurobi_home_from_env = getenv(
"GUROBI_HOME");
222 for (
const std::vector<std::string>& version_lib : GurobiVersionLib) {
223 const std::string& dir = version_lib[0];
224 const std::string& number = version_lib[1];
225 #if defined(_MSC_VER)
226 if (gurobi_home_from_env !=
nullptr &&
228 gurobi_home_from_env,
"\\bin\\gurobi", number,
".dll"))) {
232 absl::StrCat(
"C:\\Program Files\\gurobi", dir,
233 "\\win64\\bin\\gurobi", number,
".dll"))) {
236 #elif defined(__APPLE__)
237 if (gurobi_home_from_env !=
nullptr &&
239 gurobi_home_from_env,
"/lib/libgurobi", number,
".dylib"))) {
243 "/Library/gurobi", dir,
"/mac64/lib/libgurobi", number,
".dylib"))) {
246 #elif defined(__GNUC__)
247 if (gurobi_home_from_env !=
nullptr &&
249 gurobi_home_from_env,
"/lib/libgurobi", number,
".so"))) {
252 if (gurobi_home_from_env !=
nullptr &&
254 gurobi_home_from_env,
"/lib64/libgurobi", number,
".so"))) {
282 bool MPSolver::GurobiIsCorrectlyInstalled() {
285 if (
GRBloadenv(&env,
nullptr) != 0 || env ==
nullptr)
return false;
#define VLOG(verboselevel)
static void SetGurobiLibraryPath(const std::string &full_library_path)
static bool LoadGurobiSharedLibrary()
struct _GRBmodel GRBmodel
A C++ wrapper that provides a simple and unified interface to several linear programming and mixed in...
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...
std::function< int(GRBenv *, GRBmodel **, const char *, int numvars, double *, double *, double *, char *, char **)> GRBnewmodel
std::function< void(int *, int *, int *)> GRBversion
std::function< int(GRBmodel *model, const char *name, int resvar, int nvars, const int *vars, double constant)> GRBaddgenconstrMin
std::function< int(GRBmodel *model, int numnz, int *cind, double *cval, char sense, double rhs, const char *constrname)> GRBaddconstr
std::function< int(GRBmodel *model, int numlnz, int *lind, double *lval, int numqnz, int *qrow, int *qcol, double *qval, char sense, double rhs, const char *QCname)> GRBaddqconstr
bool SearchForGurobiDynamicLibrary()
std::function< int(GRBmodel *model, int numnz, int *vind, double *vval, double obj, double lb, double ub, char vtype, const char *varname)> GRBaddvar
std::function< void(GRBenv *)> GRBfreeenv
std::function< int(GRBmodel *, const char *, int, char)> GRBsetcharattrelement
std::function< char *(GRBenv *)> GRBgeterrormsg
std::function< int(GRBmodel *, const char *, int)> GRBsetintattr
std::function< int(GRBmodel *, const char *)> GRBwrite
std::function< int(GRBenv *env, const char *paramname, const char *value)> GRBsetparam
std::function< int(GRBmodel *model, int(STDCALL *cb)(CB_ARGS), void *usrdata)> GRBsetcallbackfunc
std::function< int(void *cbdata, int lazylen, const int *lazyind, const double *lazyval, char lazysense, double lazyrhs)> GRBcblazy
std::function< int(GRBenv *, const char *)> GRBreadparams
std::unique_ptr< DynamicLibrary > gurobi_dynamic_library
std::function< int(GRBmodel *model, const char *name, int resvar, int argvar)> GRBaddgenconstrAbs
std::function< int(void *cbdata, int where, int what, void *resultP)> GRBcbget
std::function< int(GRBmodel *, const char *, int *)> GRBgetintattr
std::function< int(GRBmodel *, const char *, int, int *)> GRBgetintattrelement
std::function< int(GRBenv *, const char *, double)> GRBsetdblparam
std::function< void(GRBmodel *)> GRBterminate
std::function< int(GRBenv *dest, GRBenv *src)> GRBcopyparams
std::function< int(GRBmodel *, const char *, double)> GRBsetdblattr
void LoadGurobiFunctions()
std::function< int(GRBmodel *)> GRBoptimize
std::function< int(GRBmodel *)> GRBupdatemodel
std::function< int(GRBmodel *model, int numqnz, int *qrow, int *qcol, double *qval)> GRBaddqpterms
std::function< int(GRBmodel *model, const char *name, int resvar, int nvars, const int *vars, double constant)> GRBaddgenconstrMax
std::function< int(GRBmodel *)> GRBfreemodel
std::function< int(GRBmodel *, const char *, int, int, double *)> GRBgetdblattrarray
std::function< int(GRBmodel *, int, int, int *, int *, double *, double *, double *, double *, char *, char **)> GRBaddvars
bool LoadSpecificGurobiLibrary(const std::string &full_library_path)
std::function< int(GRBmodel *, const char *, int, char *)> GRBgetcharattrelement
std::function< int(GRBenv *)> GRBresetparams
std::function< int(GRBmodel *model, const char *name, int resvar, int nvars, const int *vars)> GRBaddgenconstrAnd
std::function< int(GRBmodel *model, const char *attrname, int element, int newvalue)> GRBsetintattrelement
std::function< int(GRBmodel *model, const char *name, int resvar, int nvars, const int *vars)> GRBaddgenconstrOr
std::function< int(GRBmodel *model, int numchgs, int *cind, int *vind, double *val)> GRBchgcoeffs
std::function< int(void *cbdata, const double *solution, double *objvalP)> GRBcbsolution
std::function< int(GRBenv *, const char *, double *)> GRBgetdblparam
std::function< int(GRBmodel *, const char *, double *)> GRBgetdblattr
absl::Status LoadGurobiEnvironment(GRBenv **env)
std::function< int(GRBmodel *, const char *, int, double)> GRBsetdblattrelement
std::function< int(GRBmodel *, const char *, int, double *)> GRBgetdblattrelement
std::string gurobi_library_path
std::function< int(GRBmodel *model, int numsos, int nummembers, int *types, int *beg, int *ind, double *weight)> GRBaddsos
std::function< int(void *cbdata, int cutlen, const int *cutind, const double *cutval, char cutsense, double cutrhs)> GRBcbcut
std::function< GRBenv *(GRBmodel *)> GRBgetenv
std::function< int(GRBenv **, const char *)> GRBloadenv
std::function< int(GRBmodel *model, const char *name, int binvar, int binval, int nvars, const int *vars, const double *vals, char sense, double rhs)> GRBaddgenconstrIndicator
std::function< int(GRBmodel *, int, int *, double *, double, double, const char *)> GRBaddrangeconstr
std::function< int(GRBenv *, const char *, int)> GRBsetintparam