OR-Tools  9.6
environment.cc
Go to the documentation of this file.
1 // Copyright 2010-2022 Google LLC
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 //
6 // http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13 
15 
16 #include <mutex>
17 #include <string>
18 
19 #include "absl/status/status.h"
20 #include "absl/status/statusor.h"
21 #include "absl/strings/match.h"
22 #include "absl/strings/str_cat.h"
23 #include "absl/strings/str_format.h"
24 #include "absl/strings/str_join.h"
25 #include "absl/synchronization/mutex.h"
26 #include "ortools/base/file.h"
27 #include "ortools/base/logging.h"
29 
30 namespace operations_research {
31 
33  absl::StatusOr<GRBenv*> status = GetGurobiEnv();
34  if (!status.ok() || status.value() == nullptr) {
35  return false;
36  }
37 
38  GRBfreeenv(status.value());
39 
40  return true;
41 }
42 
43 // This was generated with the parse_header.py script.
44 // See the comment at the top of the script.
45 
46 // This is the 'define' section.
47 std::function<int(GRBenv**, const char*, const char*, const char*, int,
48  const char*)>
49  GRBisqp = nullptr;
50 std::function<int(GRBmodel* model, const char* attrname)> GRBisattravailable =
51  nullptr;
52 std::function<int(GRBmodel* model, const char* attrname, int* valueP)>
53  GRBgetintattr = nullptr;
54 std::function<int(GRBmodel* model, const char* attrname, int newvalue)>
55  GRBsetintattr = nullptr;
56 std::function<int(GRBmodel* model, const char* attrname, int element,
57  int* valueP)>
59 std::function<int(GRBmodel* model, const char* attrname, int element,
60  int newvalue)>
62 std::function<int(GRBmodel* model, const char* attrname, int first, int len,
63  int* values)>
64  GRBgetintattrarray = nullptr;
65 std::function<int(GRBmodel* model, const char* attrname, int first, int len,
66  int* newvalues)>
67  GRBsetintattrarray = nullptr;
68 std::function<int(GRBmodel* model, const char* attrname, int len, int* ind,
69  int* newvalues)>
70  GRBsetintattrlist = nullptr;
71 std::function<int(GRBmodel* model, const char* attrname, int element,
72  char* valueP)>
74 std::function<int(GRBmodel* model, const char* attrname, int element,
75  char newvalue)>
77 std::function<int(GRBmodel* model, const char* attrname, int first, int len,
78  char* values)>
80 std::function<int(GRBmodel* model, const char* attrname, int first, int len,
81  char* newvalues)>
83 std::function<int(GRBmodel* model, const char* attrname, int len, int* ind,
84  char* newvalues)>
85  GRBsetcharattrlist = nullptr;
86 std::function<int(GRBmodel* model, const char* attrname, double* valueP)>
87  GRBgetdblattr = nullptr;
88 std::function<int(GRBmodel* model, const char* attrname, double newvalue)>
89  GRBsetdblattr = nullptr;
90 std::function<int(GRBmodel* model, const char* attrname, int element,
91  double* valueP)>
93 std::function<int(GRBmodel* model, const char* attrname, int element,
94  double newvalue)>
96 std::function<int(GRBmodel* model, const char* attrname, int first, int len,
97  double* values)>
98  GRBgetdblattrarray = nullptr;
99 std::function<int(GRBmodel* model, const char* attrname, int first, int len,
100  double* newvalues)>
102 std::function<int(GRBmodel* model, const char* attrname, int len, int* ind,
103  double* newvalues)>
104  GRBsetdblattrlist = nullptr;
105 std::function<int(GRBmodel* model, const char* attrname, char** valueP)>
106  GRBgetstrattr = nullptr;
107 std::function<int(GRBmodel* model, const char* attrname, const char* newvalue)>
108  GRBsetstrattr = nullptr;
109 std::function<int(GRBmodel* model, int(GUROBI_STDCALL* cb)(CB_ARGS),
110  void* usrdata)>
112 std::function<int(void* cbdata, int where, int what, void* resultP)> GRBcbget =
113  nullptr;
114 std::function<int(void* cbdata, const double* solution, double* objvalP)>
115  GRBcbsolution = nullptr;
116 std::function<int(void* cbdata, int cutlen, const int* cutind,
117  const double* cutval, char cutsense, double cutrhs)>
118  GRBcbcut = nullptr;
119 std::function<int(void* cbdata, int lazylen, const int* lazyind,
120  const double* lazyval, char lazysense, double lazyrhs)>
121  GRBcblazy = nullptr;
122 std::function<int(GRBmodel* model, int* numnzP, int* vbeg, int* vind,
123  double* vval, int start, int len)>
124  GRBgetvars = nullptr;
125 std::function<int(GRBmodel* model)> GRBoptimize = nullptr;
126 std::function<int(GRBmodel* model, const char* filename)> GRBwrite = nullptr;
127 std::function<int(GRBenv* env, GRBmodel** modelP, const char* Pname,
128  int numvars, double* obj, double* lb, double* ub, char* vtype,
129  char** varnames)>
130  GRBnewmodel = nullptr;
131 std::function<int(GRBmodel* model, int numnz, int* vind, double* vval,
132  double obj, double lb, double ub, char vtype,
133  const char* varname)>
134  GRBaddvar = nullptr;
135 std::function<int(GRBmodel* model, int numvars, int numnz, int* vbeg, int* vind,
136  double* vval, double* obj, double* lb, double* ub,
137  char* vtype, char** varnames)>
138  GRBaddvars = nullptr;
139 std::function<int(GRBmodel* model, int numnz, int* cind, double* cval,
140  char sense, double rhs, const char* constrname)>
141  GRBaddconstr = nullptr;
142 std::function<int(GRBmodel* model, int numconstrs, int numnz, int* cbeg,
143  int* cind, double* cval, char* sense, double* rhs,
144  char** constrnames)>
145  GRBaddconstrs = nullptr;
146 std::function<int(GRBmodel* model, int numnz, int* cind, double* cval,
147  double lower, double upper, const char* constrname)>
148  GRBaddrangeconstr = nullptr;
149 std::function<int(GRBmodel* model, int numsos, int nummembers, int* types,
150  int* beg, int* ind, double* weight)>
151  GRBaddsos = nullptr;
152 std::function<int(GRBmodel* model, const char* name, int resvar, int nvars,
153  const int* vars, double constant)>
155 std::function<int(GRBmodel* model, const char* name, int resvar, int nvars,
156  const int* vars, double constant)>
158 std::function<int(GRBmodel* model, const char* name, int resvar, int argvar)>
160 std::function<int(GRBmodel* model, const char* name, int resvar, int nvars,
161  const int* vars)>
163 std::function<int(GRBmodel* model, const char* name, int resvar, int nvars,
164  const int* vars)>
165  GRBaddgenconstrOr = nullptr;
166 std::function<int(GRBmodel* model, const char* name, int binvar, int binval,
167  int nvars, const int* vars, const double* vals, char sense,
168  double rhs)>
170 std::function<int(GRBmodel* model, int numlnz, int* lind, double* lval,
171  int numqnz, int* qrow, int* qcol, double* qval, char sense,
172  double rhs, const char* QCname)>
173  GRBaddqconstr = nullptr;
174 std::function<int(GRBmodel* model, int numqnz, int* qrow, int* qcol,
175  double* qval)>
176  GRBaddqpterms = nullptr;
177 std::function<int(GRBmodel* model, int len, int* ind)> GRBdelvars = nullptr;
178 std::function<int(GRBmodel* model, int len, int* ind)> GRBdelconstrs = nullptr;
179 std::function<int(GRBmodel* model, int len, int* ind)> GRBdelsos = nullptr;
180 std::function<int(GRBmodel* model, int len, int* ind)> GRBdelgenconstrs =
181  nullptr;
182 std::function<int(GRBmodel* model, int len, int* ind)> GRBdelqconstrs = nullptr;
183 std::function<int(GRBmodel* model)> GRBdelq = nullptr;
184 std::function<int(GRBmodel* model, int cnt, int* cind, int* vind, double* val)>
185  GRBchgcoeffs = nullptr;
186 std::function<int(GRBmodel* model)> GRBupdatemodel = nullptr;
187 std::function<int(GRBmodel* model)> GRBfreemodel = nullptr;
188 std::function<void(GRBmodel* model)> GRBterminate = nullptr;
189 std::function<int(GRBmodel* model, int index, int priority, double weight,
190  double abstol, double reltol, const char* name,
191  double constant, int lnz, int* lind, double* lval)>
192  GRBsetobjectiven = nullptr;
193 std::function<int(GRBenv* env, const char* paramname, int* valueP)>
194  GRBgetintparam = nullptr;
195 std::function<int(GRBenv* env, const char* paramname, double* valueP)>
196  GRBgetdblparam = nullptr;
197 std::function<int(GRBenv* env, const char* paramname, char* valueP)>
198  GRBgetstrparam = nullptr;
199 std::function<int(GRBenv* env, const char* paramname, const char* value)>
200  GRBsetparam = nullptr;
201 std::function<int(GRBenv* env, const char* paramname, int value)>
202  GRBsetintparam = nullptr;
203 std::function<int(GRBenv* env, const char* paramname, double value)>
204  GRBsetdblparam = nullptr;
205 std::function<int(GRBenv* env, const char* paramname, const char* value)>
206  GRBsetstrparam = nullptr;
207 std::function<int(GRBenv* env)> GRBresetparams = nullptr;
208 std::function<int(GRBenv* dest, GRBenv* src)> GRBcopyparams = nullptr;
209 std::function<int(GRBenv** envP, const char* logfilename)> GRBloadenv = nullptr;
210 std::function<GRBenv*(GRBmodel* model)> GRBgetenv = nullptr;
211 std::function<void(GRBenv* env)> GRBfreeenv = nullptr;
212 std::function<const char*(GRBenv* env)> GRBgeterrormsg = nullptr;
213 std::function<void(int* majorP, int* minorP, int* technicalP)> GRBversion =
214  nullptr;
215 std::function<char*(void)> GRBplatform = nullptr;
216 
217 void LoadGurobiFunctions(DynamicLibrary* gurobi_dynamic_library) {
218  // This was generated with the parse_header.py script.
219  // See the comment at the top of the script.
220 
221  // This is the 'assign' section.
222  gurobi_dynamic_library->GetFunction(&GRBisqp, "GRBisqp");
223  gurobi_dynamic_library->GetFunction(&GRBisattravailable,
224  "GRBisattravailable");
225  gurobi_dynamic_library->GetFunction(&GRBgetintattr, "GRBgetintattr");
226  gurobi_dynamic_library->GetFunction(&GRBsetintattr, "GRBsetintattr");
227  gurobi_dynamic_library->GetFunction(&GRBgetintattrelement,
228  "GRBgetintattrelement");
229  gurobi_dynamic_library->GetFunction(&GRBsetintattrelement,
230  "GRBsetintattrelement");
231  gurobi_dynamic_library->GetFunction(&GRBgetintattrarray,
232  "GRBgetintattrarray");
233  gurobi_dynamic_library->GetFunction(&GRBsetintattrarray,
234  "GRBsetintattrarray");
235  gurobi_dynamic_library->GetFunction(&GRBsetintattrlist, "GRBsetintattrlist");
236  gurobi_dynamic_library->GetFunction(&GRBgetcharattrelement,
237  "GRBgetcharattrelement");
238  gurobi_dynamic_library->GetFunction(&GRBsetcharattrelement,
239  "GRBsetcharattrelement");
240  gurobi_dynamic_library->GetFunction(&GRBgetcharattrarray,
241  "GRBgetcharattrarray");
242  gurobi_dynamic_library->GetFunction(&GRBsetcharattrarray,
243  "GRBsetcharattrarray");
244  gurobi_dynamic_library->GetFunction(&GRBsetcharattrlist,
245  "GRBsetcharattrlist");
246  gurobi_dynamic_library->GetFunction(&GRBgetdblattr, "GRBgetdblattr");
247  gurobi_dynamic_library->GetFunction(&GRBsetdblattr, "GRBsetdblattr");
248  gurobi_dynamic_library->GetFunction(&GRBgetdblattrelement,
249  "GRBgetdblattrelement");
250  gurobi_dynamic_library->GetFunction(&GRBsetdblattrelement,
251  "GRBsetdblattrelement");
252  gurobi_dynamic_library->GetFunction(&GRBgetdblattrarray,
253  "GRBgetdblattrarray");
254  gurobi_dynamic_library->GetFunction(&GRBsetdblattrarray,
255  "GRBsetdblattrarray");
256  gurobi_dynamic_library->GetFunction(&GRBsetdblattrlist, "GRBsetdblattrlist");
257  gurobi_dynamic_library->GetFunction(&GRBgetstrattr, "GRBgetstrattr");
258  gurobi_dynamic_library->GetFunction(&GRBsetstrattr, "GRBsetstrattr");
259  gurobi_dynamic_library->GetFunction(&GRBsetcallbackfunc,
260  "GRBsetcallbackfunc");
261  gurobi_dynamic_library->GetFunction(&GRBcbget, "GRBcbget");
262  gurobi_dynamic_library->GetFunction(&GRBcbsolution, "GRBcbsolution");
263  gurobi_dynamic_library->GetFunction(&GRBcbcut, "GRBcbcut");
264  gurobi_dynamic_library->GetFunction(&GRBcblazy, "GRBcblazy");
265  gurobi_dynamic_library->GetFunction(&GRBgetvars, "GRBgetvars");
266  gurobi_dynamic_library->GetFunction(&GRBoptimize, "GRBoptimize");
267  gurobi_dynamic_library->GetFunction(&GRBwrite, "GRBwrite");
268  gurobi_dynamic_library->GetFunction(&GRBnewmodel, "GRBnewmodel");
269  gurobi_dynamic_library->GetFunction(&GRBaddvar, "GRBaddvar");
270  gurobi_dynamic_library->GetFunction(&GRBaddvars, "GRBaddvars");
271  gurobi_dynamic_library->GetFunction(&GRBaddconstr, "GRBaddconstr");
272  gurobi_dynamic_library->GetFunction(&GRBaddconstrs, "GRBaddconstrs");
273  gurobi_dynamic_library->GetFunction(&GRBaddrangeconstr, "GRBaddrangeconstr");
274  gurobi_dynamic_library->GetFunction(&GRBaddsos, "GRBaddsos");
275  gurobi_dynamic_library->GetFunction(&GRBaddgenconstrMax,
276  "GRBaddgenconstrMax");
277  gurobi_dynamic_library->GetFunction(&GRBaddgenconstrMin,
278  "GRBaddgenconstrMin");
279  gurobi_dynamic_library->GetFunction(&GRBaddgenconstrAbs,
280  "GRBaddgenconstrAbs");
281  gurobi_dynamic_library->GetFunction(&GRBaddgenconstrAnd,
282  "GRBaddgenconstrAnd");
283  gurobi_dynamic_library->GetFunction(&GRBaddgenconstrOr, "GRBaddgenconstrOr");
284  gurobi_dynamic_library->GetFunction(&GRBaddgenconstrIndicator,
285  "GRBaddgenconstrIndicator");
286  gurobi_dynamic_library->GetFunction(&GRBaddqconstr, "GRBaddqconstr");
287  gurobi_dynamic_library->GetFunction(&GRBaddqpterms, "GRBaddqpterms");
288  gurobi_dynamic_library->GetFunction(&GRBdelvars, "GRBdelvars");
289  gurobi_dynamic_library->GetFunction(&GRBdelconstrs, "GRBdelconstrs");
290  gurobi_dynamic_library->GetFunction(&GRBdelsos, "GRBdelsos");
291  gurobi_dynamic_library->GetFunction(&GRBdelgenconstrs, "GRBdelgenconstrs");
292  gurobi_dynamic_library->GetFunction(&GRBdelqconstrs, "GRBdelqconstrs");
293  gurobi_dynamic_library->GetFunction(&GRBdelq, "GRBdelq");
294  gurobi_dynamic_library->GetFunction(&GRBchgcoeffs, "GRBchgcoeffs");
295  gurobi_dynamic_library->GetFunction(&GRBupdatemodel, "GRBupdatemodel");
296  gurobi_dynamic_library->GetFunction(&GRBfreemodel, "GRBfreemodel");
297  gurobi_dynamic_library->GetFunction(&GRBterminate, "GRBterminate");
298  gurobi_dynamic_library->GetFunction(&GRBsetobjectiven, "GRBsetobjectiven");
299  gurobi_dynamic_library->GetFunction(&GRBgetintparam, "GRBgetintparam");
300  gurobi_dynamic_library->GetFunction(&GRBgetdblparam, "GRBgetdblparam");
301  gurobi_dynamic_library->GetFunction(&GRBgetstrparam, "GRBgetstrparam");
302  gurobi_dynamic_library->GetFunction(&GRBsetparam, "GRBsetparam");
303  gurobi_dynamic_library->GetFunction(&GRBsetintparam, "GRBsetintparam");
304  gurobi_dynamic_library->GetFunction(&GRBsetdblparam, "GRBsetdblparam");
305  gurobi_dynamic_library->GetFunction(&GRBsetstrparam, "GRBsetstrparam");
306  gurobi_dynamic_library->GetFunction(&GRBresetparams, "GRBresetparams");
307  gurobi_dynamic_library->GetFunction(&GRBcopyparams, "GRBcopyparams");
308  gurobi_dynamic_library->GetFunction(&GRBloadenv, "GRBloadenv");
309  gurobi_dynamic_library->GetFunction(&GRBgetenv, "GRBgetenv");
310  gurobi_dynamic_library->GetFunction(&GRBfreeenv, "GRBfreeenv");
311  gurobi_dynamic_library->GetFunction(&GRBgeterrormsg, "GRBgeterrormsg");
312  gurobi_dynamic_library->GetFunction(&GRBversion, "GRBversion");
313  gurobi_dynamic_library->GetFunction(&GRBplatform, "GRBplatform");
314 }
315 
316 std::vector<std::string> GurobiDynamicLibraryPotentialPaths() {
317  std::vector<std::string> potential_paths;
318  const std::vector<std::string> kGurobiVersions = {"1000", "952", "951", "950",
319  "911", "910", "903", "902",
320  "811", "801", "752"};
321  potential_paths.reserve(kGurobiVersions.size() * 3);
322 
323  // Look for libraries pointed by GUROBI_HOME first.
324  const char* gurobi_home_from_env = getenv("GUROBI_HOME");
325  if (gurobi_home_from_env != nullptr) {
326  for (const std::string& version : kGurobiVersions) {
327  const std::string lib = version.substr(0, version.size() - 1);
328 #if defined(_MSC_VER) // Windows
329  potential_paths.push_back(
330  absl::StrCat(gurobi_home_from_env, "\\bin\\gurobi", lib, ".dll"));
331 #elif defined(__APPLE__) // OS X
332  potential_paths.push_back(
333  absl::StrCat(gurobi_home_from_env, "/lib/libgurobi", lib, ".dylib"));
334 #elif defined(__GNUC__) // Linux
335  potential_paths.push_back(
336  absl::StrCat(gurobi_home_from_env, "/lib/libgurobi", lib, ".so"));
337  potential_paths.push_back(
338  absl::StrCat(gurobi_home_from_env, "/lib64/libgurobi", lib, ".so"));
339 #else
340  LOG(ERROR) << "OS Not recognized by gurobi/environment.cc."
341  << " You won't be able to use Gurobi.";
342 #endif
343  }
344  }
345 
346  // Search for canonical places.
347  for (const std::string& version : kGurobiVersions) {
348  const std::string lib = version.substr(0, version.size() - 1);
349 #if defined(_MSC_VER) // Windows
350  potential_paths.push_back(absl::StrCat("C:\\Program Files\\gurobi", version,
351  "\\win64\\bin\\gurobi", lib,
352  ".dll"));
353  potential_paths.push_back(absl::StrCat(
354  "C:\\gurobi", version, "\\win64\\bin\\gurobi", lib, ".dll"));
355 #elif defined(__APPLE__) // OS X
356  potential_paths.push_back(absl::StrCat(
357  "/Library/gurobi", version, "/mac64/lib/libgurobi", lib, ".dylib"));
358  potential_paths.push_back(absl::StrCat("/Library/gurobi", version,
359  "/macos_universal2/lib/libgurobi",
360  lib, ".dylib"));
361 #elif defined(__GNUC__) // Linux
362  potential_paths.push_back(absl::StrCat(
363  "/opt/gurobi", version, "/linux64/lib/libgurobi", lib, ".so"));
364  potential_paths.push_back(absl::StrCat(
365  "/opt/gurobi", version, "/linux64/lib64/libgurobi", lib, ".so"));
366  potential_paths.push_back(
367  absl::StrCat("/opt/gurobi/linux64/lib/libgurobi", lib, ".so"));
368  potential_paths.push_back(
369  absl::StrCat("/opt/gurobi/linux64/lib64/libgurobi", lib, ".so"));
370 #else
371  LOG(ERROR) << "OS Not recognized by gurobi/environment.cc."
372  << " You won't be able to use Gurobi.";
373 #endif
374  }
375 
376 #if defined(__GNUC__) // path in linux64 gurobi/optimizer docker image.
377  for (const std::string& version : {"10.0.0", "9.5.2", "9.5.1", "9.5.0"}) {
378  potential_paths.push_back(
379  absl::StrCat("/opt/gurobi/linux64/lib/libgurobi.so.", version));
380  }
381 #endif
382  return potential_paths;
383 }
384 
386  std::vector<std::string> potential_paths) {
387  static std::once_flag gurobi_loading_done;
388  static absl::Status gurobi_load_status;
389  static DynamicLibrary gurobi_library;
390  static absl::Mutex mutex;
391 
392  absl::MutexLock lock(&mutex);
393 
394  std::call_once(gurobi_loading_done, [&potential_paths]() {
395  const std::vector<std::string> canonical_paths =
397  potential_paths.insert(potential_paths.end(), canonical_paths.begin(),
398  canonical_paths.end());
399  for (const std::string& path : potential_paths) {
400  if (gurobi_library.TryToLoad(path)) {
401  LOG(INFO) << "Found the Gurobi library in '" << path << ".";
402  break;
403  }
404  }
405 
406  if (gurobi_library.LibraryIsLoaded()) {
407  LoadGurobiFunctions(&gurobi_library);
408  gurobi_load_status = absl::OkStatus();
409  } else {
410  gurobi_load_status = absl::NotFoundError(absl::StrCat(
411  "Could not find the Gurobi shared library. Looked in: [",
412  absl::StrJoin(potential_paths, "', '"),
413  "]. If you know where it"
414  " is, pass the full path to 'LoadGurobiDynamicLibrary()'."));
415  }
416  });
417  return gurobi_load_status;
418 }
419 
420 absl::StatusOr<GRBenv*> GetGurobiEnv() {
422 
423  GRBenv* env = nullptr;
424 
425  if (GRBloadenv(&env, nullptr) != 0 || env == nullptr) {
426  return absl::FailedPreconditionError(
427  absl::StrCat("Found the Gurobi shared library, but could not create "
428  "Gurobi environment: is Gurobi licensed on this machine?",
429  GRBgeterrormsg(env)));
430  }
431  return env;
432 }
433 
434 } // namespace operations_research
#define RETURN_IF_ERROR(expr)
std::function< T > GetFunction(const char *function_name)
bool TryToLoad(const std::string &library_name)
bool LibraryIsLoaded() const
const std::string name
int64_t value
#define GUROBI_STDCALL
Definition: environment.h:27
struct _GRBenv GRBenv
Definition: environment.h:32
struct _GRBmodel GRBmodel
Definition: environment.h:31
#define CB_ARGS
Definition: environment.h:120
absl::Status status
Definition: g_gurobi.cc:41
double lower
Definition: glpk_solver.cc:81
double upper
Definition: glpk_solver.cc:82
GRBmodel * model
int where
int index
Collection of objects used to extend the Constraint Solver library.
std::function< int(GRBmodel *model, const char *attrname, int element, char *valueP)> GRBgetcharattrelement
Definition: environment.cc:73
std::function< int(GRBenv *env, const char *paramname, int *valueP)> GRBgetintparam
Definition: environment.cc:194
std::function< int(GRBmodel *model, const char *name, int resvar, int nvars, const int *vars, double constant)> GRBaddgenconstrMin
Definition: environment.cc:157
std::function< int(GRBmodel *model, int numnz, int *cind, double *cval, char sense, double rhs, const char *constrname)> GRBaddconstr
Definition: environment.cc:141
std::function< int(GRBmodel *model, const char *attrname, double *valueP)> GRBgetdblattr
Definition: environment.cc:87
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
Definition: environment.cc:173
std::function< int(GRBmodel *model, const char *attrname, int len, int *ind, double *newvalues)> GRBsetdblattrlist
Definition: environment.cc:104
std::function< int(GRBmodel *model, int numnz, int *vind, double *vval, double obj, double lb, double ub, char vtype, const char *varname)> GRBaddvar
Definition: environment.cc:134
std::function< char *(void)> GRBplatform
Definition: environment.cc:215
std::function< int(GRBmodel *model, int len, int *ind)> GRBdelgenconstrs
Definition: environment.cc:180
std::function< void(int *majorP, int *minorP, int *technicalP)> GRBversion
Definition: environment.cc:213
std::function< int(GRBenv *env, const char *paramname, const char *value)> GRBsetparam
Definition: environment.cc:200
std::function< int(GRBmodel *model, const char *attrname, int newvalue)> GRBsetintattr
Definition: environment.cc:55
std::function< int(GRBenv *env, const char *paramname, char *valueP)> GRBgetstrparam
Definition: environment.cc:198
std::function< int(void *cbdata, int lazylen, const int *lazyind, const double *lazyval, char lazysense, double lazyrhs)> GRBcblazy
Definition: environment.cc:121
std::function< int(GRBmodel *model, const char *attrname, int first, int len, int *values)> GRBgetintattrarray
Definition: environment.cc:64
std::function< int(GRBmodel *model, int numconstrs, int numnz, int *cbeg, int *cind, double *cval, char *sense, double *rhs, char **constrnames)> GRBaddconstrs
Definition: environment.cc:145
std::function< int(GRBenv *env, const char *paramname, int value)> GRBsetintparam
Definition: environment.cc:202
std::function< int(GRBmodel *model, const char *name, int resvar, int argvar)> GRBaddgenconstrAbs
Definition: environment.cc:159
std::function< int(void *cbdata, int where, int what, void *resultP)> GRBcbget
Definition: environment.cc:112
std::function< int(GRBmodel *model, int index, int priority, double weight, double abstol, double reltol, const char *name, double constant, int lnz, int *lind, double *lval)> GRBsetobjectiven
Definition: environment.cc:192
std::function< int(GRBmodel *model, const char *attrname, int first, int len, char *values)> GRBgetcharattrarray
Definition: environment.cc:79
std::function< int(GRBenv **envP, const char *logfilename)> GRBloadenv
Definition: environment.cc:209
std::function< int(GRBmodel *model, const char *attrname, int element, int *valueP)> GRBgetintattrelement
Definition: environment.cc:58
std::function< int(GRBenv *dest, GRBenv *src)> GRBcopyparams
Definition: environment.cc:208
std::function< int(GRBmodel *model, const char *attrname, int first, int len, double *newvalues)> GRBsetdblattrarray
Definition: environment.cc:101
std::function< int(GRBmodel *model)> GRBfreemodel
Definition: environment.cc:187
std::function< void(GRBmodel *model)> GRBterminate
Definition: environment.cc:188
std::function< int(GRBmodel *model, int numqnz, int *qrow, int *qcol, double *qval)> GRBaddqpterms
Definition: environment.cc:176
std::function< int(GRBenv *env, const char *paramname, double *valueP)> GRBgetdblparam
Definition: environment.cc:196
std::function< const char *(GRBenv *env)> GRBgeterrormsg
Definition: environment.cc:212
std::function< int(GRBmodel *model, int cnt, int *cind, int *vind, double *val)> GRBchgcoeffs
Definition: environment.cc:185
absl::StatusOr< GRBenv * > GetGurobiEnv()
Definition: environment.cc:420
std::function< GRBenv *(GRBmodel *model)> GRBgetenv
Definition: environment.cc:210
std::function< int(GRBmodel *model, int len, int *ind)> GRBdelconstrs
Definition: environment.cc:178
std::function< int(GRBmodel *model, const char *name, int resvar, int nvars, const int *vars, double constant)> GRBaddgenconstrMax
Definition: environment.cc:154
std::function< int(GRBenv *env, const char *paramname, const char *value)> GRBsetstrparam
Definition: environment.cc:206
std::function< int(GRBmodel *model, const char *attrname, int element, double newvalue)> GRBsetdblattrelement
Definition: environment.cc:95
void LoadGurobiFunctions(DynamicLibrary *gurobi_dynamic_library)
Definition: environment.cc:217
std::function< int(GRBenv *env)> GRBresetparams
Definition: environment.cc:207
std::function< int(GRBmodel *model, const char *attrname, int first, int len, double *values)> GRBgetdblattrarray
Definition: environment.cc:98
std::function< int(GRBmodel *model, int len, int *ind)> GRBdelqconstrs
Definition: environment.cc:182
std::function< int(GRBmodel *model)> GRBupdatemodel
Definition: environment.cc:186
std::function< int(GRBmodel *model, const char *name, int resvar, int nvars, const int *vars)> GRBaddgenconstrAnd
Definition: environment.cc:162
std::function< int(GRBmodel *model)> GRBdelq
Definition: environment.cc:183
std::function< int(GRBmodel *model, int numnz, int *cind, double *cval, double lower, double upper, const char *constrname)> GRBaddrangeconstr
Definition: environment.cc:148
std::vector< std::string > GurobiDynamicLibraryPotentialPaths()
Definition: environment.cc:316
std::function< int(GRBmodel *model, const char *attrname, int element, char newvalue)> GRBsetcharattrelement
Definition: environment.cc:76
std::function< int(GRBmodel *model, const char *attrname, int element, int newvalue)> GRBsetintattrelement
Definition: environment.cc:61
std::function< int(GRBmodel *model, const char *attrname, const char *newvalue)> GRBsetstrattr
Definition: environment.cc:108
std::function< int(GRBmodel *model, const char *attrname, int element, double *valueP)> GRBgetdblattrelement
Definition: environment.cc:92
std::function< int(GRBmodel *model, const char *name, int resvar, int nvars, const int *vars)> GRBaddgenconstrOr
Definition: environment.cc:165
std::function< int(GRBmodel *model, int len, int *ind)> GRBdelsos
Definition: environment.cc:179
std::function< int(void *cbdata, const double *solution, double *objvalP)> GRBcbsolution
Definition: environment.cc:115
std::function< int(GRBmodel *model, const char *attrname)> GRBisattravailable
Definition: environment.cc:50
std::function< int(GRBmodel *model)> GRBoptimize
Definition: environment.cc:125
std::function< int(GRBmodel *model, const char *filename)> GRBwrite
Definition: environment.cc:126
std::function< int(GRBenv **, const char *, const char *, const char *, int, const char *)> GRBisqp
Definition: environment.cc:49
std::function< int(GRBmodel *model, int len, int *ind)> GRBdelvars
Definition: environment.cc:177
bool GurobiIsCorrectlyInstalled()
Definition: environment.cc:32
std::function< int(GRBmodel *model, const char *attrname, int len, int *ind, char *newvalues)> GRBsetcharattrlist
Definition: environment.cc:85
std::function< int(GRBmodel *model, const char *attrname, char **valueP)> GRBgetstrattr
Definition: environment.cc:106
std::function< int(GRBenv *env, GRBmodel **modelP, const char *Pname, int numvars, double *obj, double *lb, double *ub, char *vtype, char **varnames)> GRBnewmodel
Definition: environment.cc:130
absl::Status LoadGurobiDynamicLibrary(std::vector< std::string > potential_paths)
Definition: environment.cc:385
std::function< void(GRBenv *env)> GRBfreeenv
Definition: environment.cc:211
std::function< int(GRBmodel *model, const char *attrname, int len, int *ind, int *newvalues)> GRBsetintattrlist
Definition: environment.cc:70
std::function< int(GRBmodel *model, int numsos, int nummembers, int *types, int *beg, int *ind, double *weight)> GRBaddsos
Definition: environment.cc:151
std::function< int(void *cbdata, int cutlen, const int *cutind, const double *cutval, char cutsense, double cutrhs)> GRBcbcut
Definition: environment.cc:118
std::function< int(GRBmodel *model, const char *attrname, double newvalue)> GRBsetdblattr
Definition: environment.cc:89
std::function< int(GRBmodel *model, const char *attrname, int first, int len, int *newvalues)> GRBsetintattrarray
Definition: environment.cc:67
std::function< int(GRBmodel *model, int(GUROBI_STDCALL *cb)(CB_ARGS), void *usrdata)> GRBsetcallbackfunc
Definition: environment.cc:111
std::function< int(GRBmodel *model, int *numnzP, int *vbeg, int *vind, double *vval, int start, int len)> GRBgetvars
Definition: environment.cc:124
std::function< int(GRBmodel *model, int numvars, int numnz, int *vbeg, int *vind, double *vval, double *obj, double *lb, double *ub, char *vtype, char **varnames)> GRBaddvars
Definition: environment.cc:138
std::function< int(GRBmodel *model, const char *attrname, int first, int len, char *newvalues)> GRBsetcharattrarray
Definition: environment.cc:82
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
Definition: environment.cc:169
std::function< int(GRBmodel *model, const char *attrname, int *valueP)> GRBgetintattr
Definition: environment.cc:53
std::function< int(GRBenv *env, const char *paramname, double value)> GRBsetdblparam
Definition: environment.cc:204
int64_t weight
Definition: pack.cc:510
int64_t start