38 void ControlLimitedFeasibilityDrivenDDPSolver::Instantiate(
const ControlLimitedFeasibilityDrivenDDPSolverInitializer& init)
43 clamp_to_control_limits_in_forward_pass_ = base_parameters_.ClampControlsInForwardPass;
44 initial_regularization_rate_ = base_parameters_.RegularizationRate;
45 th_stepinc_ = base_parameters_.ThresholdRegularizationIncrease;
46 th_stepdec_ = base_parameters_.ThresholdRegularizationDecrease;
48 th_stop_ = parameters_.GradientToleranceConvergenceThreshold;
49 th_gradient_tolerance_ = parameters_.GradientTolerance;
50 th_acceptstep_ = parameters_.DescentStepAcceptanceThreshold;
51 th_acceptnegstep_ = parameters_.AscentStepAcceptanceThreshold;
54 void ControlLimitedFeasibilityDrivenDDPSolver::AllocateData()
56 AbstractFeasibilityDrivenDDPSolver::AllocateData();
58 Quu_inv_.resize(T_ - 1);
59 for (
int t = 0; t < T_ - 1; ++t)
61 Quu_inv_[t] = Eigen::MatrixXd::Zero(NU_, NU_);
68 void ControlLimitedFeasibilityDrivenDDPSolver::ComputeGains(
const int t)
73 AbstractFeasibilityDrivenDDPSolver::ComputeGains(t);
77 du_lb_ = control_limits_.col(0) - us_[t];
78 du_ub_ = control_limits_.col(1) - us_[t];
82 if (parameters_.UseNewBoxQP)
84 boxqp_sol =
BoxQP(Quu_[t], Qu_[t], du_lb_, du_ub_, k_[t], 0.1, 100, 1e-5, ureg_, parameters_.BoxQPUsePolynomialLinesearch, parameters_.BoxQPUseCholeskyFactorization);
88 boxqp_sol =
ExoticaBoxQP(Quu_[t], Qu_[t], du_lb_, du_ub_, k_[t], 0.1, 100, 1e-5, ureg_, parameters_.BoxQPUsePolynomialLinesearch, parameters_.BoxQPUseCholeskyFactorization);
92 Quu_inv_[t].setZero();
95 for (std::size_t i = 0; i < boxqp_sol.
free_idx.size(); ++i)
97 for (std::size_t j = 0; j < boxqp_sol.
free_idx.size(); ++j)
103 K_[t].noalias() = Quu_inv_[t] * Qxu_[t].transpose();
104 k_[t].noalias() = -boxqp_sol.
x;
110 for (std::size_t i = 0; i < boxqp_sol.
clamped_idx.size(); ++i)
#define REGISTER_MOTIONSOLVER_TYPE(TYPE, DERIV)
std::vector< size_t > clamped_idx
std::vector< size_t > free_idx
BoxQPSolution ExoticaBoxQP(const Eigen::MatrixXd &H, const Eigen::VectorXd &q, const Eigen::VectorXd &b_low, const Eigen::VectorXd &b_high, const Eigen::VectorXd &x_init, const double gamma, const int max_iterations, const double epsilon, const double lambda, bool use_polynomial_linesearch=false, bool use_cholesky_factorization=false)
BoxQPSolution BoxQP(const Eigen::MatrixXd &H, const Eigen::VectorXd &q, const Eigen::VectorXd &b_low, const Eigen::VectorXd &b_high, const Eigen::VectorXd &x_init, const double th_acceptstep, const int max_iterations, const double th_gradient_tolerance, const double lambda, bool use_polynomial_linesearch=true, bool use_cholesky_factorization=true)