25 #ifndef CASADI_CPLEX_INTERFACE_HPP
26 #define CASADI_CPLEX_INTERFACE_HPP
28 #include "casadi/core/conic_impl.hpp"
29 #include <casadi/interfaces/cplex/casadi_conic_cplex_export.h>
30 #include "ilcplex/cplexx.h"
47 struct CplexMemory :
public ConicMemory {
55 std::vector<char> sense;
58 std::vector<int> matcnt;
61 std::vector<double> rhs;
64 std::vector<double> rngval;
67 std::vector<int> qmatcnt;
70 std::vector<int> cstat;
73 std::vector<int> rstat;
79 std::vector<CPXDIM> a_row, h_row;
80 std::vector<CPXNNZ> a_colind, h_colind;
82 std::vector<CPXNNZ> socp_colind;
83 std::vector<CPXDIM> socp_qind, socp_lind, socp_row;
84 std::vector<double> socp_qval, socp_lbound, socp_lval, socp_lbx;
103 class CplexInterface :
public Conic {
106 static Conic* creator(
const std::string& name,
107 const std::map<std::string, Sparsity>& st) {
108 return new CplexInterface(name, st);
112 explicit CplexInterface(
const std::string& name,
113 const std::map<std::string, Sparsity>& st);
116 ~CplexInterface()
override;
119 const char* plugin_name()
const override {
return "cplex";}
122 std::string class_name()
const override {
return "CplexInterface";}
126 static const Options options_;
127 const Options& get_options()
const override {
return options_;}
131 void init(
const Dict& opts)
override;
134 void* alloc_mem()
const override {
return new CplexMemory();}
137 int init_mem(
void* mem)
const override;
140 void free_mem(
void *mem)
const override {
delete static_cast<CplexMemory*
>(mem);}
143 int solve(
const double** arg,
double** res,
144 casadi_int* iw,
double* w,
void* mem)
const override;
147 bool integer_support()
const override {
return true;}
150 bool psd_support()
const override {
return true;}
153 Dict get_stats(
void* mem)
const override;
160 casadi_int qp_method_;
162 std::string dump_filename_;
164 casadi_int dep_check_;
171 std::vector<char> ctype_;
174 static const std::string meta_doc;
177 SDPToSOCPMem sdp_to_socp_mem_;
179 void serialize_body(SerializingStream &s)
const override;
182 static ProtoFunction* deserialize(DeserializingStream& s) {
return new CplexInterface(s); }
185 std::vector< double > sos_weights_;
186 std::vector<casadi_int> sos_beg_;
187 std::vector<int> sos_ind_;
188 std::vector<char> sos_types_;
192 explicit CplexInterface(DeserializingStream& s);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.