10 #ifndef CROCODDYL_CORE_SOLVERS_DDP_HPP_
11 #define CROCODDYL_CORE_SOLVERS_DDP_HPP_
13 #include "crocoddyl/core/solver-base.hpp"
14 #include "crocoddyl/core/utils/deprecate.hpp"
52 class SolverDDP :
public SolverAbstract {
54 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
56 typedef typename MathBaseTpl<double>::MatrixXsRowMajor MatrixXdRowMajor;
63 explicit SolverDDP(std::shared_ptr<ShootingProblem> problem);
67 const std::vector<Eigen::VectorXd>& init_xs = DEFAULT_VECTOR,
68 const std::vector<Eigen::VectorXd>& init_us = DEFAULT_VECTOR,
69 const std::size_t maxiter = 100,
const bool is_feasible =
false,
70 const double init_reg = NAN);
71 virtual void computeDirection(
const bool recalc =
true);
72 virtual double tryStep(
const double steplength = 1);
73 virtual double stoppingCriteria();
74 virtual const Eigen::Vector2d& expectedImprovement();
75 virtual void resizeData();
86 virtual double calcDiff();
120 virtual void backwardPass();
135 virtual void forwardPass(
const double stepLength);
145 virtual void computeActionValueFunction(
146 const std::size_t t,
const std::shared_ptr<ActionModelAbstract>& model,
147 const std::shared_ptr<ActionDataAbstract>& data);
158 virtual void computeValueFunction(
159 const std::size_t t,
const std::shared_ptr<ActionModelAbstract>& model);
175 virtual void computeGains(
const std::size_t t);
181 void increaseRegularization();
187 void decreaseRegularization();
192 virtual void allocateData();
197 double get_reg_incfactor()
const;
202 double get_reg_decfactor()
const;
207 DEPRECATED(
"Use get_reg_incfactor() or get_reg_decfactor()",
208 double get_regfactor()
const;)
213 double get_reg_min()
const;
214 DEPRECATED(
"Use get_reg_min()",
double get_regmin()
const);
219 double get_reg_max()
const;
220 DEPRECATED(
"Use get_reg_max()",
double get_regmax()
const);
225 const std::vector<double>& get_alphas()
const;
230 double get_th_stepdec()
const;
235 double get_th_stepinc()
const;
241 double get_th_grad()
const;
246 const std::vector<Eigen::MatrixXd>& get_Vxx()
const;
251 const std::vector<Eigen::VectorXd>& get_Vx()
const;
257 const std::vector<Eigen::MatrixXd>& get_Qxx()
const;
263 const std::vector<Eigen::MatrixXd>& get_Qxu()
const;
269 const std::vector<Eigen::MatrixXd>& get_Quu()
const;
275 const std::vector<Eigen::VectorXd>& get_Qx()
const;
281 const std::vector<Eigen::VectorXd>& get_Qu()
const;
286 const std::vector<MatrixXdRowMajor>& get_K()
const;
291 const std::vector<Eigen::VectorXd>& get_k()
const;
296 void set_reg_incfactor(
const double reg_factor);
301 void set_reg_decfactor(
const double reg_factor);
306 DEPRECATED(
"Use set_reg_incfactor() or set_reg_decfactor()",
307 void set_regfactor(
const double reg_factor);)
312 void set_reg_min(
const double regmin);
313 DEPRECATED(
"Use set_reg_min()",
void set_regmin(
const double regmin));
318 void set_reg_max(
const double regmax);
319 DEPRECATED(
"Use set_reg_max()",
void set_regmax(
const double regmax));
324 void set_alphas(
const std::vector<double>& alphas);
329 void set_th_stepdec(
const double th_step);
334 void set_th_stepinc(
const double th_step);
340 void set_th_grad(
const double th_grad);
343 double reg_incfactor_;
345 double reg_decfactor_;
351 std::vector<Eigen::VectorXd>
353 std::vector<Eigen::VectorXd>
355 std::vector<Eigen::VectorXd>
359 std::vector<Eigen::MatrixXd>
363 std::vector<Eigen::VectorXd>
365 std::vector<Eigen::MatrixXd>
367 std::vector<Eigen::MatrixXd>
369 std::vector<Eigen::MatrixXd>
371 std::vector<Eigen::VectorXd>
373 std::vector<Eigen::VectorXd>
375 std::vector<MatrixXdRowMajor> K_;
376 std::vector<Eigen::VectorXd> k_;
378 Eigen::VectorXd xnext_;
379 MatrixXdRowMajor FxTVxx_p_;
381 std::vector<MatrixXdRowMajor>
385 Eigen::VectorXd fTVxx_p_;
387 std::vector<Eigen::LLT<Eigen::MatrixXd> > Quu_llt_;
388 std::vector<Eigen::VectorXd>