9#ifndef CROCODDYL_CORE_SOLVERS_BOX_FDDP_HPP_ 10#define CROCODDYL_CORE_SOLVERS_BOX_FDDP_HPP_ 12#include "crocoddyl/core/solvers/box-qp.hpp" 13#include "crocoddyl/core/solvers/fddp.hpp" 17template <
typename _Scalar>
20 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
21 CROCODDYL_DERIVED_FLOATINGPOINT_CAST(
SolverBase, SolverBoxFDDPTpl)
23 typedef _Scalar Scalar;
28 typedef typename ShootingProblem::ActionModelAbstract ActionModelAbstract;
29 typedef typename ShootingProblem::ActionDataAbstract ActionDataAbstract;
31 typedef typename MathBase::VectorXs VectorXs;
32 typedef typename MathBase::MatrixXs MatrixXs;
34 explicit SolverBoxFDDPTpl(std::shared_ptr<ShootingProblem> problem,
35 const DynamicsSolverType dyn_solver = FeasShoot,
36 const EqualitySolverType term_solver = LuNull);
37 virtual ~SolverBoxFDDPTpl() =
default;
40 virtual void forwardPass(
const Scalar steplength);
51 template <
typename NewScalar>
52 SolverBoxFDDPTpl<NewScalar>
cast()
const;
54 const std::vector<MatrixXs>& get_Quu_inv()
const;
98 std::vector<MatrixXs> Quu_inv_;
99 std::vector<VectorXs> du_lb_;
100 std::vector<VectorXs> du_ub_;
109#include "crocoddyl/core/solvers/box-fddp.hxx" This class implements a Box QP solver based on a Projected Newton method.
This class encapsulates a shooting problem.
std::vector< VectorXs > fs_
std::vector< VectorXs > us_try_
std::shared_ptr< ShootingProblem > problem_
std::vector< std::shared_ptr< CallbackAbstract > > callbacks_
std::vector< VectorXs > xs_
std::vector< VectorXs > us_
std::vector< Scalar > alphas_
std::vector< VectorXs > xs_try_
virtual void resizeRunningData() override
Resize data associated with the running models of the shooting problem.
SolverBoxFDDPTpl< NewScalar > cast() const
Cast the Box-FDDP solver to a different scalar type.
virtual void computePolicy(const std::size_t t) override
Compute the feedforward and feedback terms (control policy) computed via a Cholesky decomposition.
std::vector< VectorXs > dx_
std::vector< MatrixXs > Vxx_
Scalar upsilon_decfactor_
DynamicsSolverType dyn_solver_
void allocateData()
Allocate all the internal data needed for the solver.
SolverFDDPTpl(std::shared_ptr< ShootingProblem > problem, const DynamicsSolverType dyn_solver=FeasShoot, const EqualitySolverType term_solver=LuNull)
Initialize the FDDP solver.
std::vector< MatrixXs > Qxu_
std::vector< MatrixXs > Quu_
std::vector< VectorXs > Vx_
std::vector< VectorXs > Qu_
std::vector< MatrixXsRowMajor > K_
EqualitySolverType term_solver_
std::vector< VectorXs > k_