29#ifndef HPP_CONSTRAINTS_SOLVER_IMPL_HIERARCHICAL_ITERATIVE_HH
30#define HPP_CONSTRAINTS_SOLVER_IMPL_HIERARCHICAL_ITERATIVE_HH
40template <
typename SolverType>
43 solver.integrate(arg, darg, arg);
47template <
typename SolverType>
57 hppDout(error,
"The descent direction is not valid: " << t /
c);
74 if (f_arg_norm2 - f_arg_darg_norm2 >= -alpha * t) {
82 hppDout(error,
"Could find alpha such that ||f(q)||**2 + "
84 <<
" * 2*(f(q)^T * J * dq) is doing worse than "
85 "||f(q + alpha * dq)||**2");
89 solver.integrate(arg, u, arg);
93template <
typename SolverType>
95 const SolverType&
solver)
const {
97 for (std::size_t i = 0; i <
solver.stacks_.size(); ++i) {
98 typename SolverType::Data& d =
solver.datas_[i];
99 const size_type nrows = d.reducedJ.rows();
100 if (
df.size() < nrows)
df.resize(nrows);
101 df.head(nrows).noalias() = d.reducedJ *
solver.dqSmall_;
103 df.head(nrows).dot(d.activeRowsOfJ.keepRows().rview(d.error).eval());
108template <
typename SolverType>
113 solver.integrate(arg, darg, arg);
117template <
typename SolverType>
123 solver.integrate(arg, darg, arg);
128template <
typename LineSearchType>
132 hppDout(info,
"before projection: " << arg.transpose());
133 assert(!arg.hasNaN());
136 value_type previousSquaredNorm = std::numeric_limits<value_type>::infinity();
138 Eigen::NumTraits<value_type>::dummy_precision();
152 if (
dq_.squaredNorm() < dqMinSquaredNorm) {
173 hppDout(info,
"number of iterations: " << iter);
175 hppDout(info,
"Projection failed.");
178 hppDout(info,
"After projection: " << arg.transpose());
179 assert(!arg.hasNaN());
size_type reducedDimension_
Definition hierarchical-iterative.hh:618
size_type maxIterations_
Definition hierarchical-iterative.hh:614
value_type squaredNorm_
Definition hierarchical-iterative.hh:641
void computeValue(vectorIn_t arg) const
Compute the value of each level, and the jacobian if ComputeJac is true.
Status solve(vectorOut_t arg, LineSearchType ls=LineSearchType()) const
void computeSaturation(vectorIn_t arg) const
value_type squaredErrorThreshold_
Definition hierarchical-iterative.hh:613
vector_t dq_
Definition hierarchical-iterative.hh:636
Status
Definition hierarchical-iterative.hh:245
@ ERROR_INCREASED
Definition hierarchical-iterative.hh:245
@ SUCCESS
Definition hierarchical-iterative.hh:245
@ MAX_ITERATION_REACHED
Definition hierarchical-iterative.hh:245
@ INFEASIBLE
Definition hierarchical-iterative.hh:245
void computeError() const
void computeDescentDirection() const
#define hppDout(channel, data)
Definition hierarchical-iterative.hh:45
Definition active-set-differentiable-function.hh:37
pinocchio::size_type size_type
Definition fwd.hh:47
pinocchio::value_type value_type
Definition fwd.hh:48
pinocchio::vectorOut_t vectorOut_t
Definition fwd.hh:61
vector_t df
Definition hierarchical-iterative.hh:64
vector_t arg_darg
Definition hierarchical-iterative.hh:64
value_type smallAlpha
Definition hierarchical-iterative.hh:63
value_type tau
Definition hierarchical-iterative.hh:63
bool operator()(const SolverType &solver, vectorOut_t arg, vectorOut_t darg)
Definition hierarchical-iterative.hh:48
value_type computeLocalSlope(const SolverType &solver) const
Definition hierarchical-iterative.hh:94
value_type c
Definition hierarchical-iterative.hh:63
vector_t darg
Definition hierarchical-iterative.hh:64
bool operator()(const SolverType &solver, vectorOut_t arg, vectorOut_t darg)
Definition hierarchical-iterative.hh:41
bool operator()(const SolverType &solver, vectorOut_t arg, vectorOut_t darg)
Definition hierarchical-iterative.hh:118
value_type b
Definition hierarchical-iterative.hh:92
value_type K
Definition hierarchical-iterative.hh:92
value_type a
Definition hierarchical-iterative.hh:92
value_type C
Definition hierarchical-iterative.hh:92
value_type alphaMax
Definition hierarchical-iterative.hh:77
bool operator()(const SolverType &solver, vectorOut_t arg, vectorOut_t darg)
Definition hierarchical-iterative.hh:109
value_type K
Definition hierarchical-iterative.hh:77
value_type alpha
Definition hierarchical-iterative.hh:76