1#ifndef ZONOOPT_GUROBI_API_HPP_
2#define ZONOOPT_GUROBI_API_HPP_
13 #define ZONOOPT_GET_SYMBOL GetProcAddress
17 #define ZONOOPT_GET_SYMBOL dlsym
33 void operator()(
void*
model)
const;
36 using Model = std::unique_ptr<void, ModelDeleter>;
37 using Env = std::shared_ptr<void>;
39 using LibPtr = std::shared_ptr<void>;
42 typedef int (*GRBloadenv_t)(
void**,
const char*);
43 typedef int (*GRBnewmodel_t)(
void*,
void**,
const char*, int,
double*,
double*,
double*,
char*,
const char**);
44 typedef void (*GRBfreeenv_t)(
void*);
45 typedef void (*GRBfreemodel_t)(
void*);
46 typedef int (*GRBaddconstr_t)(
void*, int,
int*,
double*, char, double,
const char*);
47 typedef int (*GRBoptimize_t)(
void*);
48 typedef int (*GRBaddqpterms_t)(
void*, int,
int*,
int*,
double*);
49 typedef int (*GRBupdatemodel_t)(
void*);
50 typedef int (*GRBgetintattr_t)(
void*,
const char*,
int*);
51 typedef int (*GRBgetdblattr_t)(
void*,
const char*,
double*);
52 typedef int (*GRBgetdblattrarray_t)(
void*,
const char*, int, int,
double*);
53 typedef int (*GRBsetintparam_t)(
void*,
const char*, int);
54 typedef int (*GRBsetdblparam_t)(
void*,
const char*, double);
55 typedef int (*GRBsetstrparam_t)(
void*,
const char*,
const char*);
56 typedef void (*GRBversion_t)(
int*,
int*,
int*);
57 typedef void* (*GRBgetenv_t)(
void*);
58 typedef int (*GRBemptyenv_t)(
void**);
59 typedef int (*GRBstartenv_t)(
void*);
62 GRBloadenv_t GRBloadenv =
nullptr;
63 GRBnewmodel_t GRBnewmodel =
nullptr;
64 GRBfreeenv_t GRBfreeenv =
nullptr;
65 GRBfreemodel_t GRBfreemodel =
nullptr;
66 GRBaddconstr_t GRBaddconstr =
nullptr;
67 GRBoptimize_t GRBoptimize =
nullptr;
68 GRBaddqpterms_t GRBaddqpterms =
nullptr;
69 GRBupdatemodel_t GRBupdatemodel =
nullptr;
70 GRBgetintattr_t GRBgetintattr =
nullptr;
71 GRBgetdblattr_t GRBgetdblattr =
nullptr;
72 GRBgetdblattrarray_t GRBgetdblattrarray =
nullptr;
73 GRBsetintparam_t GRBsetintparam =
nullptr;
74 GRBsetdblparam_t GRBsetdblparam =
nullptr;
75 GRBsetstrparam_t GRBsetstrparam =
nullptr;
76 GRBversion_t GRBversion =
nullptr;
77 GRBgetenv_t GRBgetenv =
nullptr;
78 GRBemptyenv_t GRBemptyenv =
nullptr;
79 GRBstartenv_t GRBstartenv =
nullptr;
82 static GurobiApi& instance();
84 bool is_available()
const {
return _lib_ptr !=
nullptr; }
88 const std::string& unavailable_reason()
const {
return _unavailable_reason; }
95 static constexpr int MIN_GUROBI_MAJOR = 9;
98 Env create_env(
const std::string& log =
"");
99 Model create_model(Env&
env,
const std::string& name,
int numvars = 0,
double* obj =
nullptr,
100 double* lb =
nullptr,
double* ub =
nullptr,
char*
vtype =
nullptr,
101 const char** varnames =
nullptr);
104 void add_constr(Model&
model,
int nnz,
int* ind,
double* val,
char sense,
double rhs,
const char* name =
nullptr);
105 void optimize(Model&
model);
106 void add_qp_terms(Model&
model,
int nnz,
int* qrow,
int* qcol,
double* qval);
107 void update_model(Model&
model);
108 void get_int_attr(Model&
model,
const std::string& attr_name,
int& value_out);
109 void get_dbl_attr(Model&
model,
const std::string& attr_name,
double& value_out);
110 void get_dbl_attr_array(Model&
model,
const std::string& attr_name,
int start,
int len,
double* arr_out);
111 void set_int_param(Model&
model,
const std::string& param_name,
int value);
112 void set_dbl_param(Model&
model,
const std::string& param_name,
double value);
113 void set_str_param(Model&
model,
const std::string& param_name,
const std::string& value);
116 LibPtr _lib_ptr =
nullptr;
117 std::string _unavailable_reason;
119 ~GurobiApi() =
default;
120 GurobiApi(
const GurobiApi&) =
delete;
121 GurobiApi& operator=(
const GurobiApi&) =
delete;
124 ZonoOptLibHandle load_library_from_path(
const std::string& path,
const std::vector<std::string>& names);
void * ZonoOptLibHandle
Definition GurobiApi.hpp:16
std::vector< char > vtype
Definition GurobiSolver.cpp:374
GurobiApi::Env env
Definition GurobiSolver.cpp:81
GurobiApi::Model model
Definition GurobiSolver.cpp:82
Definition ZonoOpt.hpp:58