26 #ifndef CASADI_GUROBI_INTERFACE_HPP
27 #define CASADI_GUROBI_INTERFACE_HPP
29 #include "casadi/core/conic_impl.hpp"
30 #include <casadi/interfaces/gurobi/casadi_conic_gurobi_export.h>
49 struct LazyCallbackMemory {
52 casadi_int sz_arg, sz_res, sz_iw, sz_w;
55 std::vector<double> x_vals;
60 std::vector<double> input_data;
64 std::vector<double> a_vec;
68 std::vector<casadi_int> iw;
69 std::vector<double> w;
70 std::vector<const double*> arg;
71 std::vector<double*> res;
74 class GurobiInterface;
76 struct GurobiMemory :
public ConicMemory {
80 const GurobiInterface* interface;
85 std::vector<double> pool_obj_vals;
86 std::vector<std::vector<double>> pool_solutions;
89 std::vector<double> sos_weights;
90 std::vector<int> sos_beg;
91 std::vector<int> sos_ind;
92 std::vector<int> sos_types;
94 LazyCallbackMemory lazy_cb_mem;
109 class GurobiInterface :
public Conic {
112 explicit GurobiInterface(
const std::string& name,
113 const std::map<std::string, Sparsity>& st);
116 static Conic* creator(
const std::string& name,
117 const std::map<std::string, Sparsity>& st) {
118 return new GurobiInterface(name, st);
122 ~GurobiInterface()
override;
125 const char* plugin_name()
const override {
return "gurobi";}
128 std::string class_name()
const override {
return "GurobiInterface";}
132 static const Options options_;
133 const Options& get_options()
const override {
return options_;}
137 void init(
const Dict& opts)
override;
140 void* alloc_mem()
const override {
return new GurobiMemory();}
143 int init_mem(
void* mem)
const override;
146 void free_mem(
void *mem)
const override {
delete static_cast<GurobiMemory*
>(mem);}
149 int solve(
const double** arg,
double** res,
150 casadi_int* iw,
double* w,
void* mem)
const override;
153 bool integer_support()
const override {
return true;}
156 bool psd_support()
const override {
return true;}
159 static const std::string meta_doc;
162 Dict get_stats(
void* mem)
const override;
165 std::vector<char> vtype_;
168 std::vector<double> sos_weights_;
169 std::vector<int> sos_beg_;
170 std::vector<int> sos_ind_;
171 std::vector<int> sos_types_;
177 SDPToSOCPMem sdp_to_socp_mem_;
179 void serialize_body(SerializingStream &s)
const override;
182 static ProtoFunction* deserialize(DeserializingStream& s) {
return new GurobiInterface(s); }
185 Function lazy_constraints_callback_;
188 void handle_lazy_constraints_callback(GurobiMemory* mem, GRBmodel *model,
189 void *cbdata,
int where)
const;
192 void process_lazy_constraints(GRBmodel *model,
void *cbdata,
193 std::vector<double>* a_vec,
194 double* b_val)
const;
198 explicit GurobiInterface(DeserializingStream& s);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.