26 #ifndef CASADI_QPOASES_INTERFACE_HPP
27 #define CASADI_QPOASES_INTERFACE_HPP
29 #include "casadi/core/conic_impl.hpp"
30 #include "casadi/core/linsol.hpp"
31 #include <casadi/interfaces/qpoases/casadi_conic_qpoases_export.h>
32 #include <qpOASES.hpp>
34 namespace qpOASES = casadi_qpOASES;
49 class QpoasesInterface;
51 struct QpoasesMemory :
public ConicMemory {
56 std::string linsol_plugin;
60 qpOASES::SQProblem *sqp;
61 qpOASES::QProblemB *qp;
65 qpOASES::SymSparseMat *h;
66 qpOASES::SparseMatrix *a;
72 std::vector<casadi_int> lin_map;
75 std::vector<casadi_int> row, col, nz_map;
77 std::vector<int> h_row, h_colind, a_row, a_colind;
80 std::vector<double> nz;
100 class QpoasesInterface :
public Conic {
103 explicit QpoasesInterface();
106 static Conic* creator(
const std::string& name,
107 const std::map<std::string, Sparsity>& st) {
108 return new QpoasesInterface(name, st);
112 explicit QpoasesInterface(
const std::string& name,
113 const std::map<std::string, Sparsity>& st);
116 ~QpoasesInterface()
override;
119 const char* plugin_name()
const override {
return "qpoases";}
122 std::string class_name()
const override {
return "QpoasesInterface";}
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 QpoasesMemory();}
137 int init_mem(
void* mem)
const override;
140 void free_mem(
void *mem)
const override {
delete static_cast<QpoasesMemory*
>(mem);}
143 int solve(
const double** arg,
double** res,
144 casadi_int* iw,
double* w,
void* mem)
const override;
147 static const std::string meta_doc;
150 static int qpoases_init(
void* mem,
int dim,
int nnz,
const int* row,
const int* col);
153 static int qpoases_sfact(
void* mem,
const double* vals);
156 static int qpoases_nfact(
void* mem,
const double* vals,
int* neig,
int* rank);
159 static int qpoases_solve(
void* mem,
int nrhs,
double* rhs);
162 static void qpoases_printf(
const char* s);
165 Dict get_stats(
void* mem)
const override;
169 void serialize_body(SerializingStream &s)
const override;
172 static ProtoFunction* deserialize(DeserializingStream& s) {
return new QpoasesInterface(s); }
176 explicit QpoasesInterface(DeserializingStream& s);
180 static bool from_BooleanType(qpOASES::BooleanType b);
181 static qpOASES::BooleanType to_BooleanType(
bool b);
182 static std::string from_SubjectToStatus(qpOASES::SubjectToStatus b);
183 static qpOASES::SubjectToStatus to_SubjectToStatus(std::string b);
184 static std::string from_PrintLevel(qpOASES::PrintLevel b);
185 static qpOASES::PrintLevel to_PrintLevel(std::string b);
190 casadi_int max_nWSR_;
192 qpOASES::Options ops_;
193 qpOASES::HessianType hess_;
196 casadi_int max_schur_;
197 std::string linsol_plugin_;
201 static void qpoases_error(
const std::string& module, casadi_int flag);
204 static std::string getErrorMessage(casadi_int flag);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.