aligator  0.16.0
A versatile and efficient C++ library for real-time constrained trajectory optimization.
Loading...
Searching...
No Matches
aligator::gar Namespace Reference

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)
 

Detailed Description

Function Documentation

◆ blockTridiagToDenseMatrix()

template<typename MatrixType, class A>
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.

◆ blockTridiagMatMul()

template<typename MatrixType, class A, typename InputType, typename OutType, typename Scalar = typename MatrixType::Scalar>
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.

◆ symmetricBlockTridiagSolve()

template<typename MatrixType, class A, class A2, typename RhsType, typename DecType>
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.

◆ blockTridiagRefinementStep()

template<typename MatrixType, class A, class A2, typename RhsType, typename DecType>
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.

Parameters
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.

◆ symmetricBlockTridiagSolveDownLooking()

template<typename MatrixType, class A, class A2, typename RhsType, typename DecType>
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.

◆ lqrKnotsSameDim()

template<typename Scalar>
bool aligator::gar::lqrKnotsSameDim ( const LqrKnotTpl< Scalar > & lhs,
const LqrKnotTpl< Scalar > & rhs )
nodiscard

Definition at line 198 of file lqr-problem.hpp.

◆ operator<<()

template<typename Scalar>
std::ostream & aligator::gar::operator<< ( std::ostream & oss,
const LqrKnotTpl< Scalar > & self )

Definition at line 205 of file lqr-problem.hpp.

◆ ParallelRiccatiSolver()

template<typename Scalar>
aligator::gar::ParallelRiccatiSolver ( LqrProblemTpl< Scalar > & ,
const uint  ) -> ParallelRiccatiSolver< Scalar >

◆ ProximalRiccatiSolver()

template<typename Scalar>
aligator::gar::ProximalRiccatiSolver ( const LqrProblemTpl< Scalar > & ) -> ProximalRiccatiSolver< Scalar >

◆ make_span_from_indices() [1/2]

template<class T, class A>
boost::span< T > aligator::gar::make_span_from_indices ( std::vector< T, A > & vec,
size_t i0,
size_t i1 )
inline

Create a boost::span object from a vector and two indices.

Definition at line 19 of file riccati-kernel.hpp.

◆ make_span_from_indices() [2/2]

template<class T, class A>
boost::span< const T > aligator::gar::make_span_from_indices ( const std::vector< T, A > & vec,
size_t i0,
size_t i1 )
inline

Create a boost::span object from a vector and two indices.

Definition at line 26 of file riccati-kernel.hpp.

◆ lqrCreateSparseMatrix()

template<typename Scalar>
void aligator::gar::lqrCreateSparseMatrix ( const LqrProblemTpl< Scalar > & problem,
const Scalar mueq,
Eigen::SparseMatrix< Scalar > & mat,
Eigen::Matrix< Scalar, -1, 1 > & rhs,
bool update )

◆ lqrComputeKktError()

template<typename Scalar>
std::array< Scalar, 3 > aligator::gar::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 )
nodiscard

◆ lqrNumRows()

template<typename Scalar>
uint aligator::gar::lqrNumRows ( const LqrProblemTpl< Scalar > & problem)

Compute the number of rows in the problem matrix.

Definition at line 64 of file utils.hpp.

◆ lqrDenseSolutionToTraj()

template<typename Scalar>
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 )

Convert dense RHS solution to its trajectory [x,u,v,lambda] solution.

Definition at line 80 of file utils.hpp.

◆ lqrInitializeSolution()

template<typename Scalar>
auto aligator::gar::lqrInitializeSolution ( const LqrProblemTpl< Scalar > & problem)
nodiscard

Definition at line 113 of file utils.hpp.