Go to the documentation of this file.
19 #ifndef EIQUADPROGFAST_HPP_
20 #define EIQUADPROGFAST_HPP_
22 #include <Eigen/Dense>
24 #define OPTIMIZE_STEP_1_2 // compute s(x) = ci^T * x + ci0
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
61 #include "eiquadprog/eiquadprog-utils.hxx"
84 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
89 void reset(
size_t dim_qp,
size_t num_eq,
size_t num_ineq);
94 if (maxIter < 0)
return false;
152 Eigen::LLT<MatrixXd, Eigen::Lower>
chol_;
197 #ifdef OPTIMIZE_ADD_CONSTRAINT
209 #ifdef OPTIMIZE_COMPUTE_D
210 d.noalias() = J.adjoint() *
np;
212 d = J.adjoint() *
np;
218 #ifdef OPTIMIZE_UPDATE_Z
219 z.noalias() = J.rightCols(
z.size() - iq) *
d.tail(
z.size() - iq);
221 z = J.rightCols(J.cols() - iq) *
d.tail(J.cols() - iq);
227 r.head(iq) =
d.head(iq);
228 R.topLeftCorner(iq, iq).triangularView<Eigen::Upper>().solveInPlace(
void delete_constraint(MatrixXd &R, MatrixXd &J, VectorXi &A, VectorXd &u, size_t nEqCon, size_t &iq, size_t l)
const VectorXd & getLagrangeMultipliers() const
bool setMaxIter(int maxIter)
void update_z(VectorXd &z, const MatrixXd &J, const VectorXd &d, size_t iq)
EiquadprogFast_status solve_quadprog(const MatrixXd &Hess, const VectorXd &g0, const MatrixXd &CE, const VectorXd &ce0, const MatrixXd &CI, const VectorXd &ci0, VectorXd &x)
@ EIQUADPROG_FAST_REDUNDANT_EQUALITIES
@ EIQUADPROG_FAST_UNBOUNDED
VectorXd u
Lagrange multipliers.
const VectorXi & getActiveSet() const
@ EIQUADPROG_FAST_INFEASIBLE
int iter
number of active-set iterations
virtual ~EiquadprogFast()
VectorXd np
current constraint normal
double getObjValue() const
@ EIQUADPROG_FAST_MAX_ITER_REACHED
VectorXd r
infeasibility multipliers, i.e. negative step direction in dual space
bool add_constraint(MatrixXd &R, MatrixXd &J, VectorXd &d, size_t &iq, double &R_norm)
bool is_inverse_provided_
EIGEN_MAKE_ALIGNED_OPERATOR_NEW EiquadprogFast()
void update_r(const MatrixXd &R, VectorXd &r, const VectorXd &d, size_t iq)
VectorXd z
step direction in primal space
void reset(size_t dim_qp, size_t num_eq, size_t num_ineq)
size_t getActiveSetSize() const
Eigen::LLT< MatrixXd, Eigen::Lower > chol_
current value of cost function
double f_value
max number of active-set iterations
void compute_d(VectorXd &d, const MatrixXd &J, const VectorXd &np)
@ EIQUADPROG_FAST_OPTIMAL
eiquadprog
Author(s): Gabriele Buondonno, Andrea Del Prete, Luca Di Gaspero, Angelo Furfaro, Benjamin Stephens, Gael Guennebaud
autogenerated on Wed May 28 2025 02:55:57