26 #ifndef CASADI_PIQP_INTERFACE_HPP
27 #define CASADI_PIQP_INTERFACE_HPP
29 #include "casadi/core/conic_impl.hpp"
30 #include <casadi/interfaces/piqp/casadi_conic_piqp_export.h>
32 #include <Eigen/Dense>
33 #include <Eigen/Sparse>
36 #include <piqp/piqp.hpp>
49 struct PiqpMemory :
public ConicMemory {
50 typedef Eigen::Triplet<double> TripletT;
53 Eigen::VectorXd g_vector;
54 Eigen::VectorXd eq_b_vector;
56 Eigen::VectorXd uba_vector;
57 Eigen::VectorXd lba_vector;
58 Eigen::VectorXd ubx_vector;
59 Eigen::VectorXd lbx_vector;
62 std::vector<TripletT> tripletList;
63 std::vector<TripletT> tripletListEq;
64 std::vector<casadi_int> row, col;
67 std::unique_ptr<Eigen::VectorXd> results_x;
68 std::unique_ptr<Eigen::VectorXd> results_lam_x;
69 std::unique_ptr<Eigen::VectorXd> results_y;
70 std::unique_ptr<Eigen::VectorXd> results_z;
87 class PiqpInterface :
public Conic {
90 explicit PiqpInterface(
const std::string& name,
91 const std::map<std::string, Sparsity>& st);
94 static Conic* creator(
const std::string& name,
95 const std::map<std::string, Sparsity>& st) {
96 return new PiqpInterface(name, st);
100 ~PiqpInterface()
override;
103 const char* plugin_name()
const override {
return "piqp";}
106 std::string class_name()
const override {
return "PiqpInterface";}
110 static const Options options_;
111 const Options& get_options()
const override {
return options_;}
115 void init(
const Dict& opts)
override;
118 void finalize()
override;
121 void* alloc_mem()
const override {
return new PiqpMemory();}
124 int init_mem(
void* mem)
const override;
127 void free_mem(
void *mem)
const override {
delete static_cast<PiqpMemory*
>(mem);}
130 int solve(
const double** arg,
double** res,
131 casadi_int* iw,
double* w,
void* mem)
const override;
134 bool integer_support()
const override {
return false;}
137 bool psd_support()
const override {
return false;}
140 static const std::string meta_doc;
143 Dict get_stats(
void* mem)
const override;
146 casadi_int nnzH_, nnzA_;
148 piqp::Settings<double> settings_;
151 bool sparse_backend_;
153 void serialize_body(SerializingStream &s)
const override;
156 static ProtoFunction* deserialize(DeserializingStream& s) {
return new PiqpInterface(s); }
160 explicit PiqpInterface(DeserializingStream& e);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.