aligator
0.16.0
A versatile and efficient C++ library for real-time constrained trajectory optimization.
|
Namespaces | |
namespace | helpers |
Classes | |
struct | DenseKernel |
A dense Bunch-Kaufman based kernel. More... | |
struct | LqrKnotTpl |
Struct describing a stage of a constrained LQ problem. More... | |
struct | LqrProblemTpl |
class | ParallelRiccatiSolver |
A parallel-condensing LQ solver. More... | |
struct | ProximalRiccatiKernel |
Kernel for use in Riccati-like algorithms for the proximal LQ subproblem. More... | |
class | ProximalRiccatiSolver |
A Riccati-like solver for the proximal LQ subproblem in ProxDDP. More... | |
class | RiccatiSolverBase |
class | RiccatiSolverDense |
A stagewise-dense Riccati solver. This algorithm uses a dense Bunch-Kaufman factorization at every stage. More... | |
struct | StageFactor |
Per-node struct for all computations in the factorization. More... | |
Functions | |
template<typename MatrixType, class A> | |
MatrixType::PlainObject | blockTridiagToDenseMatrix (const std::vector< MatrixType, A > &subdiagonal, const std::vector< MatrixType, A > &diagonal, const std::vector< MatrixType, A > &superdiagonal) |
template<typename MatrixType, class A, typename InputType, typename OutType, typename Scalar = typename MatrixType::Scalar> | |
bool | blockTridiagMatMul (const std::vector< MatrixType, A > &Asub, const std::vector< MatrixType, A > &Adiag, const std::vector< MatrixType, A > &Asuper, const BlkMatrix< InputType, -1, 1 > &b, BlkMatrix< OutType, -1, 1 > &c, const Scalar beta) |
Evaluate c <- beta * c + A * b, where A is the block-tridiagonal matrix described by the first three inputs. | |
template<typename MatrixType, class A, class A2, typename RhsType, typename DecType> | |
bool | symmetricBlockTridiagSolve (std::vector< MatrixType, A > &subdiagonal, std::vector< MatrixType, A > &diagonal, const std::vector< MatrixType, A > &superdiagonal, BlkMatrix< RhsType, -1, 1 > &rhs, std::vector< DecType, A2 > &facs) |
Solve a symmetric block-tridiagonal \(Ax=b\) problem by in-place factorization. The subdiagonal will be used to store factorization coefficients. | |
template<typename MatrixType, class A, class A2, typename RhsType, typename DecType> | |
bool | blockTridiagRefinementStep (const std::vector< MatrixType, A > &transposedUfacs, const std::vector< MatrixType, A > &superdiagonal, const std::vector< DecType, A2 > &diagonalFacs, BlkMatrix< RhsType, -1, 1 > &rhs) |
Given the decomposed matrix data, just perform the backward-forward step of the algorithm. | |
template<typename MatrixType, class A, class A2, typename RhsType, typename DecType> | |
bool | symmetricBlockTridiagSolveDownLooking (std::vector< MatrixType, A > &subdiagonal, std::vector< MatrixType, A > &diagonal, std::vector< MatrixType, A > &superdiagonal, BlkMatrix< RhsType, -1, 1 > &rhs, std::vector< DecType, A2 > &facs) |
Solve a symmetric block-tridiagonal \(Ax=b\) problem by in-place factorization. The subdiagonal will be used to store factorization coefficients. This version starts by looking down from the top-left corner of the matrix. | |
template<typename Scalar> | |
bool | lqrKnotsSameDim (const LqrKnotTpl< Scalar > &lhs, const LqrKnotTpl< Scalar > &rhs) |
template<typename Scalar> | |
std::ostream & | operator<< (std::ostream &oss, const LqrKnotTpl< Scalar > &self) |
template<typename Scalar> | |
ParallelRiccatiSolver (LqrProblemTpl< Scalar > &, const uint) -> ParallelRiccatiSolver< Scalar > | |
template<typename Scalar> | |
ProximalRiccatiSolver (const LqrProblemTpl< Scalar > &) -> ProximalRiccatiSolver< Scalar > | |
template<class T, class A> | |
boost::span< T > | make_span_from_indices (std::vector< T, A > &vec, size_t i0, size_t i1) |
Create a boost::span object from a vector and two indices. | |
template<class T, class A> | |
boost::span< const T > | make_span_from_indices (const std::vector< T, A > &vec, size_t i0, size_t i1) |
Create a boost::span object from a vector and two indices. | |
template<typename Scalar> | |
void | lqrCreateSparseMatrix (const LqrProblemTpl< Scalar > &problem, const Scalar mueq, Eigen::SparseMatrix< Scalar > &mat, Eigen::Matrix< Scalar, -1, 1 > &rhs, bool update) |
template<typename Scalar> | |
std::array< Scalar, 3 > | lqrComputeKktError (const LqrProblemTpl< Scalar > &problem, boost::span< const typename math_types< Scalar >::VectorXs > xs, boost::span< const typename math_types< Scalar >::VectorXs > us, boost::span< const typename math_types< Scalar >::VectorXs > vs, boost::span< const typename math_types< Scalar >::VectorXs > lbdas, const Scalar mueq, const std::optional< typename math_types< Scalar >::ConstVectorRef > &theta=std::nullopt, bool verbose=false) |
template<typename Scalar> | |
uint | lqrNumRows (const LqrProblemTpl< Scalar > &problem) |
Compute the number of rows in the problem matrix. | |
template<typename Scalar> | |
void | lqrDenseSolutionToTraj (const LqrProblemTpl< Scalar > &problem, const typename math_types< Scalar >::ConstVectorRef solution, std::vector< typename math_types< Scalar >::VectorXs > &xs, std::vector< typename math_types< Scalar >::VectorXs > &us, std::vector< typename math_types< Scalar >::VectorXs > &vs, std::vector< typename math_types< Scalar >::VectorXs > &lbdas) |
Convert dense RHS solution to its trajectory [x,u,v,lambda] solution. | |
template<typename Scalar> | |
auto | lqrInitializeSolution (const LqrProblemTpl< Scalar > &problem) |
MatrixType::PlainObject aligator::gar::blockTridiagToDenseMatrix | ( | const std::vector< MatrixType, A > & | subdiagonal, |
const std::vector< MatrixType, A > & | diagonal, | ||
const std::vector< MatrixType, A > & | superdiagonal ) |
Definition at line 14 of file block-tridiagonal.hpp.
bool aligator::gar::blockTridiagMatMul | ( | const std::vector< MatrixType, A > & | Asub, |
const std::vector< MatrixType, A > & | Adiag, | ||
const std::vector< MatrixType, A > & | Asuper, | ||
const BlkMatrix< InputType, -1, 1 > & | b, | ||
BlkMatrix< OutType, -1, 1 > & | c, | ||
const Scalar | beta ) |
Evaluate c <- beta * c + A * b, where A
is the block-tridiagonal matrix described by the first three inputs.
Definition at line 52 of file block-tridiagonal.hpp.
bool aligator::gar::symmetricBlockTridiagSolve | ( | std::vector< MatrixType, A > & | subdiagonal, |
std::vector< MatrixType, A > & | diagonal, | ||
const std::vector< MatrixType, A > & | superdiagonal, | ||
BlkMatrix< RhsType, -1, 1 > & | rhs, | ||
std::vector< DecType, A2 > & | facs ) |
Solve a symmetric block-tridiagonal \(Ax=b\) problem by in-place factorization. The subdiagonal will be used to store factorization coefficients.
Definition at line 82 of file block-tridiagonal.hpp.
bool aligator::gar::blockTridiagRefinementStep | ( | const std::vector< MatrixType, A > & | transposedUfacs, |
const std::vector< MatrixType, A > & | superdiagonal, | ||
const std::vector< DecType, A2 > & | diagonalFacs, | ||
BlkMatrix< RhsType, -1, 1 > & | rhs ) |
Given the decomposed matrix data, just perform the backward-forward step of the algorithm.
transposedUfacs | - transposed U factors in the decomposition |
superdiagonal | - superdiagonal of the original matrix |
diagonalFacs | - diagonal factor decompositions |
Definition at line 147 of file block-tridiagonal.hpp.
bool aligator::gar::symmetricBlockTridiagSolveDownLooking | ( | std::vector< MatrixType, A > & | subdiagonal, |
std::vector< MatrixType, A > & | diagonal, | ||
std::vector< MatrixType, A > & | superdiagonal, | ||
BlkMatrix< RhsType, -1, 1 > & | rhs, | ||
std::vector< DecType, A2 > & | facs ) |
Solve a symmetric block-tridiagonal \(Ax=b\) problem by in-place factorization. The subdiagonal will be used to store factorization coefficients. This version starts by looking down from the top-left corner of the matrix.
Definition at line 188 of file block-tridiagonal.hpp.
|
nodiscard |
Definition at line 198 of file lqr-problem.hpp.
std::ostream & aligator::gar::operator<< | ( | std::ostream & | oss, |
const LqrKnotTpl< Scalar > & | self ) |
Definition at line 205 of file lqr-problem.hpp.
aligator::gar::ParallelRiccatiSolver | ( | LqrProblemTpl< Scalar > & | , |
const uint | ) -> ParallelRiccatiSolver< Scalar > |
aligator::gar::ProximalRiccatiSolver | ( | const LqrProblemTpl< Scalar > & | ) | -> ProximalRiccatiSolver< Scalar > |
|
inline |
Create a boost::span object from a vector and two indices.
Definition at line 19 of file riccati-kernel.hpp.
|
inline |
Create a boost::span object from a vector and two indices.
Definition at line 26 of file riccati-kernel.hpp.
void aligator::gar::lqrCreateSparseMatrix | ( | const LqrProblemTpl< Scalar > & | problem, |
const Scalar | mueq, | ||
Eigen::SparseMatrix< Scalar > & | mat, | ||
Eigen::Matrix< Scalar, -1, 1 > & | rhs, | ||
bool | update ) |
|
nodiscard |
uint aligator::gar::lqrNumRows | ( | const LqrProblemTpl< Scalar > & | problem | ) |
void aligator::gar::lqrDenseSolutionToTraj | ( | const LqrProblemTpl< Scalar > & | problem, |
const typename math_types< Scalar >::ConstVectorRef | solution, | ||
std::vector< typename math_types< Scalar >::VectorXs > & | xs, | ||
std::vector< typename math_types< Scalar >::VectorXs > & | us, | ||
std::vector< typename math_types< Scalar >::VectorXs > & | vs, | ||
std::vector< typename math_types< Scalar >::VectorXs > & | lbdas ) |
|
nodiscard |