19#ifndef EIQUADPROGFAST_HPP_
20#define EIQUADPROGFAST_HPP_
24#define OPTIMIZE_STEP_1_2
25#define OPTIMIZE_COMPUTE_D
26#define OPTIMIZE_UPDATE_Z
27#define OPTIMIZE_HESSIAN_INVERSE
28#define OPTIMIZE_UNCONSTR_MINIM
34#define DEBUG_STREAM(msg)
36#ifdef PROFILE_EIQUADPROG
37#define START_PROFILER_EIQUADPROG_FAST(x) START_PROFILER(x)
38#define STOP_PROFILER_EIQUADPROG_FAST(x) STOP_PROFILER(x)
40#define START_PROFILER_EIQUADPROG_FAST(x)
41#define STOP_PROFILER_EIQUADPROG_FAST(x)
44#define EIQUADPROG_FAST_CHOLESKY_DECOMPOSITION "EIQUADPROG_FAST Cholesky dec"
45#define EIQUADPROG_FAST_CHOLESKY_INVERSE "EIQUADPROG_FAST Cholesky inv"
46#define EIQUADPROG_FAST_ADD_EQ_CONSTR "EIQUADPROG_FAST ADD_EQ_CONSTR"
47#define EIQUADPROG_FAST_ADD_EQ_CONSTR_1 "EIQUADPROG_FAST ADD_EQ_CONSTR_1"
48#define EIQUADPROG_FAST_ADD_EQ_CONSTR_2 "EIQUADPROG_FAST ADD_EQ_CONSTR_2"
49#define EIQUADPROG_FAST_STEP_1 "EIQUADPROG_FAST STEP_1"
50#define EIQUADPROG_FAST_STEP_1_1 "EIQUADPROG_FAST STEP_1_1"
51#define EIQUADPROG_FAST_STEP_1_2 "EIQUADPROG_FAST STEP_1_2"
52#define EIQUADPROG_FAST_STEP_1_UNCONSTR_MINIM \
53 "EIQUADPROG_FAST STEP_1_UNCONSTR_MINIM"
54#define EIQUADPROG_FAST_STEP_2 "EIQUADPROG_FAST STEP_2"
55#define EIQUADPROG_FAST_STEP_2A "EIQUADPROG_FAST STEP_2A"
56#define EIQUADPROG_FAST_STEP_2B "EIQUADPROG_FAST STEP_2B"
57#define EIQUADPROG_FAST_STEP_2C "EIQUADPROG_FAST STEP_2C"
59#define DEFAULT_MAX_ITER 1000
80 typedef Eigen::MatrixXd MatrixXd;
81 typedef Eigen::VectorXd VectorXd;
82 typedef Eigen::VectorXi VectorXi;
85 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
90 void reset(
size_t dim_qp,
size_t num_eq,
size_t num_ineq);
95 if (maxIter < 0)
return false;
138 const MatrixXd& CE,
const VectorXd& ce0,
139 const MatrixXd& CI,
const VectorXd& ci0,
153 Eigen::LLT<MatrixXd, Eigen::Lower> chol_;
198#ifdef OPTIMIZE_ADD_CONSTRAINT
209 inline void compute_d(VectorXd& d,
const MatrixXd& J,
const VectorXd& np) {
210#ifdef OPTIMIZE_COMPUTE_D
211 d.noalias() = J.adjoint() * np;
213 d = J.adjoint() * np;
217 inline void update_z(VectorXd& z,
const MatrixXd& J,
const VectorXd& d,
219#ifdef OPTIMIZE_UPDATE_Z
220 z.noalias() = J.rightCols(z.size() - iq) * d.tail(z.size() - iq);
222 z = J.rightCols(J.cols() - iq) * d.tail(J.cols() - iq);
226 inline void update_r(
const MatrixXd& R, VectorXd& r,
const VectorXd& d,
228 r.head(iq) = d.head(iq);
229 R.topLeftCorner(iq, iq).triangularView<Eigen::Upper>().solveInPlace(
233 inline bool add_constraint(MatrixXd& R, MatrixXd& J, VectorXd& d,
size_t& iq,
237 VectorXd& u,
size_t nEqCon,
size_t& iq,
Definition: eiquadprog-fast.hpp:79
double getObjValue() const
Definition: eiquadprog-fast.hpp:114
int getIteratios() const
Definition: eiquadprog-fast.hpp:109
size_t getActiveSetSize() const
Definition: eiquadprog-fast.hpp:104
int getMaxIter() const
Definition: eiquadprog-fast.hpp:92
MatrixXd m_J
Definition: eiquadprog-fast.hpp:142
bool setMaxIter(int maxIter)
Definition: eiquadprog-fast.hpp:94
const VectorXi & getActiveSet() const
Definition: eiquadprog-fast.hpp:129
bool is_inverse_provided_
Definition: eiquadprog-fast.hpp:143
const VectorXd & getLagrangeMultipliers() const
Definition: eiquadprog-fast.hpp:119
#define EIQUADPROG_DLLAPI
Definition: config.hpp:88
void update_z(Eigen::VectorXd &z, const Eigen::MatrixXd &J, const Eigen::VectorXd &d, size_t iq)
Definition: eiquadprog.hpp:93
EIQUADPROG_DLLAPI double solve_quadprog(Eigen::LLT< Eigen::MatrixXd, Eigen::Lower > &chol, double c1, Eigen::VectorXd &g0, const Eigen::MatrixXd &CE, const Eigen::VectorXd &ce0, const Eigen::MatrixXd &CI, const Eigen::VectorXd &ci0, Eigen::VectorXd &x, Eigen::VectorXi &A, size_t &q)
bool add_constraint(Eigen::MatrixXd &R, Eigen::MatrixXd &J, Eigen::VectorXd &d, size_t &iq, double &R_norm)
EiquadprogFast_status
Definition: eiquadprog-fast.hpp:71
@ EIQUADPROG_FAST_MAX_ITER_REACHED
Definition: eiquadprog-fast.hpp:75
@ EIQUADPROG_FAST_REDUNDANT_EQUALITIES
Definition: eiquadprog-fast.hpp:76
@ EIQUADPROG_FAST_OPTIMAL
Definition: eiquadprog-fast.hpp:72
@ EIQUADPROG_FAST_INFEASIBLE
Definition: eiquadprog-fast.hpp:73
@ EIQUADPROG_FAST_UNBOUNDED
Definition: eiquadprog-fast.hpp:74
void compute_d(Eigen::VectorXd &d, const Eigen::MatrixXd &J, const Eigen::VectorXd &np)
Definition: eiquadprog.hpp:88
void delete_constraint(Eigen::MatrixXd &R, Eigen::MatrixXd &J, Eigen::VectorXi &A, Eigen::VectorXd &u, size_t p, size_t &iq, size_t l)
void update_r(const Eigen::MatrixXd &R, Eigen::VectorXd &r, const Eigen::VectorXd &d, size_t iq)
Definition: eiquadprog.hpp:98
Definition: eiquadprog-fast.hpp:64