25 #ifndef CASADI_XPRESS_INTERFACE_HPP
26 #define CASADI_XPRESS_INTERFACE_HPP
30 #include "casadi/core/conic_impl.hpp"
31 #include <casadi/interfaces/xpress/casadi_conic_xpress_export.h>
36 #include "xpress_runtime.hpp"
55 struct XpressMemory :
public ConicMemory {
59 std::vector<casadi_int> iis_rows, iis_cols;
60 std::string iis_row_types, iis_col_bound_types;
61 bool iis_valid =
false;
72 class XpressInterface :
public Conic {
75 static Conic* creator(
const std::string& name,
76 const std::map<std::string, Sparsity>& st) {
77 return new XpressInterface(name, st);
81 explicit XpressInterface(
const std::string& name,
82 const std::map<std::string, Sparsity>& st);
85 ~XpressInterface()
override;
88 const char* plugin_name()
const override {
return "xpress";}
91 std::string class_name()
const override {
return "XpressInterface";}
95 static const Options options_;
96 const Options& get_options()
const override {
return options_;}
99 void set_xpress_prob();
100 void set_xpress_prob(CodeGenerator& g)
const;
103 void codegen_body(CodeGenerator& g)
const override;
106 void codegen_init_mem(CodeGenerator& g)
const override;
109 void codegen_free_mem(CodeGenerator& g)
const override;
112 std::string codegen_mem_type()
const override {
return "struct casadi_xpress_data"; }
115 bool codegen_needs_mem()
const override {
return true; }
118 void init(
const Dict& opts)
override;
121 void init_dependent();
124 void* alloc_mem()
const override {
return new XpressMemory();}
127 int init_mem(
void* mem)
const override;
130 void free_mem(
void *mem)
const override;
133 void set_work(
void* mem,
const double**& arg,
double**& res,
134 casadi_int*& iw,
double*& w)
const override;
137 Dict get_stats(
void* mem)
const override;
140 int solve(
const double** arg,
double** res,
141 casadi_int* iw,
double* w,
void* mem)
const override;
144 static const std::string meta_doc;
153 std::string log_file_;
158 void serialize_body(SerializingStream &s)
const override;
161 static ProtoFunction* deserialize(DeserializingStream& s) {
return new XpressInterface(s); }
164 bool integer_support()
const override {
return true; }
167 bool psd_support()
const override {
return true; }
171 explicit XpressInterface(DeserializingStream& s);
179 std::vector<int> colinda_, rowa_;
189 std::vector<int> qobj_col1_, qobj_col2_;
190 std::vector<int> qobj_nz_idx_;
194 std::vector<char> coltype_;
199 std::vector<char> sos_settype_;
200 std::vector<int> sos_setstart_, sos_setind_;
201 std::vector<double> sos_refval_;
208 std::vector<casadi_int> socp_r_;
209 std::vector<casadi_int> socp_mq_colind_, socp_mq_row_, socp_mq_data_;
210 std::vector<casadi_int> socp_map_P_;
213 void build_socp_config();
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.