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;
98 void finalize()
override;
103 int init_mem(
void* mem)
const override;
108 void set_work(
void* mem,
const double**& arg,
double**& res,
109 casadi_int*& iw,
double*& w)
const override;
112 virtual void check_inputs(
const double* lbx,
const double* ubx,
113 const double* lba,
const double* uba)
const;
116 virtual void generateNativeCode(std::ostream& file)
const;
119 typedef Conic* (*Creator)(
const std::string& name,
120 const std::map<std::string, Sparsity>& st);
126 static std::map<std::string, Plugin> solvers_;
128 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
129 static std::mutex mutex_solvers_;
133 static const std::string infix_;
136 static std::string shortname() {
return "conic";}
141 bool is_a(
const std::string& type,
bool recursive)
const override;
146 double get_default_in(casadi_int ind)
const override;
149 virtual bool integer_support()
const {
return false;}
152 virtual bool psd_support()
const {
return false;}
155 Dict get_stats(
void* mem)
const override;
158 static MX sens_kkt(
const MX& H,
const MX& A,
const MX& lam_x,
const MX& lam_a,
159 const MX& lbx,
const MX& ubx,
const MX& lba,
const MX& uba,
160 double min_lam,
bool force_equality,
161 MX& lbIx, MX& ubIx, MX& lbIa, MX& ubIa);
166 bool uses_output()
const override {
return true;}
172 bool has_forward(casadi_int nfwd)
const override {
return true;}
173 Function get_forward(casadi_int nfwd,
const std::string& name,
174 const std::vector<std::string>& inames,
175 const std::vector<std::string>& onames,
176 const Dict& opts)
const override;
183 bool has_reverse(casadi_int nadj)
const override {
return true;}
184 Function get_reverse(casadi_int nadj,
const std::string& name,
185 const std::vector<std::string>& inames,
186 const std::vector<std::string>& onames,
187 const Dict& opts)
const override;
193 void qp_codegen_body(CodeGenerator& g)
const;
197 std::vector<bool> discrete_;
198 std::vector<bool> equality_;
200 bool solver_version_check_;
201 double sens_min_lam_;
202 bool sens_force_equality_;
203 std::string sens_linsol_;
204 Dict sens_linsol_options_;
207 Sparsity H_, A_, Q_, P_;
219 struct SDPToSOCPMem {
221 std::vector<casadi_int> r;
225 std::vector<casadi_int> A_mapping;
231 std::vector<casadi_int> map_P;
234 casadi_int indval_size;
238 void sdp_to_socp_init(SDPToSOCPMem& mem)
const;
240 void serialize(SerializingStream &s,
const SDPToSOCPMem& m)
const;
241 void deserialize(DeserializingStream &s, SDPToSOCPMem& m);
247 void serialize_body(SerializingStream &s)
const override;
251 void serialize_type(SerializingStream &s)
const override;
256 std::string serialize_base_function()
const override {
return "Conic"; }
260 static ProtoFunction* deserialize(DeserializingStream& s);
267 explicit Conic(DeserializingStream& s);
CASADI_EXPORT std::vector< std::string > conic_out()
Get the output scheme of QP solvers.
CASADI_EXPORT std::vector< std::string > conic_in()
Get the input scheme of QP solvers.
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.