26 #ifndef CASADI_CONIC_IMPL_HPP
27 #define CASADI_CONIC_IMPL_HPP
30 #include "function_internal.hpp"
31 #include "plugin_interface.hpp"
37 struct CASADI_EXPORT ConicMemory :
public FunctionMemory {
44 class CASADI_EXPORT Conic :
public FunctionInternal,
public PluginInterface<Conic> {
50 Conic(
const std::string& name,
const std::map<std::string, Sparsity> &st);
53 ~Conic()
override = 0;
59 size_t get_n_in()
override {
return CONIC_NUM_IN;}
60 size_t get_n_out()
override {
return CONIC_NUM_OUT;}
67 Sparsity get_sparsity_in(casadi_int i)
override;
68 Sparsity get_sparsity_out(casadi_int i)
override;
75 std::string get_name_in(casadi_int i)
override {
return conic_in(i);}
76 std::string get_name_out(casadi_int i)
override {
return conic_out(i);}
83 static const Options options_;
84 const Options& get_options()
const override {
return options_;}
88 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w,
void* mem)
const final;
91 virtual int solve(
const double** arg,
double** res,
92 casadi_int* iw,
double* w,
void* mem)
const = 0;
95 void init(
const Dict& opts)
override;
100 int init_mem(
void* mem)
const override;
105 void set_work(
void* mem,
const double**& arg,
double**& res,
106 casadi_int*& iw,
double*& w)
const override;
109 virtual void check_inputs(
const double* lbx,
const double* ubx,
110 const double* lba,
const double* uba)
const;
113 virtual void generateNativeCode(std::ostream& file)
const;
116 typedef Conic* (*Creator)(
const std::string& name,
117 const std::map<std::string, Sparsity>& st);
123 static std::map<std::string, Plugin> solvers_;
126 static const std::string infix_;
129 static std::string shortname() {
return "conic";}
134 bool is_a(
const std::string& type,
bool recursive)
const override;
139 double get_default_in(casadi_int ind)
const override;
142 virtual bool integer_support()
const {
return false;}
145 virtual bool psd_support()
const {
return false;}
148 Dict get_stats(
void* mem)
const override;
153 void qp_codegen_body(CodeGenerator& g)
const;
157 std::vector<bool> discrete_;
158 std::vector<bool> equality_;
162 Sparsity H_, A_, Q_, P_;
174 struct SDPToSOCPMem {
176 std::vector<casadi_int> r;
180 std::vector<casadi_int> A_mapping;
186 std::vector<casadi_int> map_P;
189 casadi_int indval_size;
193 void sdp_to_socp_init(SDPToSOCPMem& mem)
const;
195 void serialize(SerializingStream &s,
const SDPToSOCPMem& m)
const;
196 void deserialize(DeserializingStream &s, SDPToSOCPMem& m);
202 void serialize_body(SerializingStream &s)
const override;
206 void serialize_type(SerializingStream &s)
const override;
211 std::string serialize_base_function()
const override {
return "Conic"; }
215 static ProtoFunction* deserialize(DeserializingStream& s);
222 explicit Conic(DeserializingStream& s);
CASADI_EXPORT std::vector< std::string > conic_out()
Get QP solver output scheme of QP solvers.
CASADI_EXPORT std::vector< std::string > conic_in()
Get input scheme of QP solvers.
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.