10 #ifndef CROCODDYL_CORE_SOLVERS_KKT_HPP_ 11 #define CROCODDYL_CORE_SOLVERS_KKT_HPP_ 13 #include <Eigen/Dense> 14 #include <Eigen/Cholesky> 16 #include "crocoddyl/core/solver-base.hpp" 22 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
24 explicit SolverKKT(boost::shared_ptr<ShootingProblem> problem);
27 virtual bool solve(
const std::vector<Eigen::VectorXd>& init_xs = DEFAULT_VECTOR,
28 const std::vector<Eigen::VectorXd>& init_us = DEFAULT_VECTOR,
const std::size_t& maxiter = 100,
29 const bool& is_feasible =
false,
const double& regInit = 1e-9);
30 virtual void computeDirection(
const bool& recalc =
true);
31 virtual double tryStep(
const double& steplength = 1);
32 virtual double stoppingCriteria();
33 virtual const Eigen::Vector2d& expectedImprovement();
35 const Eigen::MatrixXd& get_kkt()
const;
36 const Eigen::VectorXd& get_kktref()
const;
37 const Eigen::VectorXd& get_primaldual()
const;
38 const std::vector<Eigen::VectorXd>& get_dxs()
const;
39 const std::vector<Eigen::VectorXd>& get_dus()
const;
40 const std::size_t& get_nx()
const;
41 const std::size_t& get_ndx()
const;
42 const std::size_t& get_nu()
const;
49 std::vector<Eigen::VectorXd> xs_try_;
50 std::vector<Eigen::VectorXd> us_try_;
56 std::vector<Eigen::VectorXd> dxs_;
57 std::vector<Eigen::VectorXd> dus_;
58 std::vector<Eigen::VectorXd> lambdas_;
60 void computePrimalDual();
61 void increaseRegularization();
62 void decreaseRegularization();
67 Eigen::VectorXd kktref_;
68 Eigen::VectorXd primaldual_;
69 Eigen::VectorXd primal_;
70 Eigen::VectorXd dual_;
71 std::vector<double> alphas_;
74 Eigen::VectorXd kkt_primal_;
80 #endif // CROCODDYL_CORE_SOLVERS_KKT_HPP_