aligator  0.14.0
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
Loading...
Searching...
No Matches
cost-abstract.hpp
Go to the documentation of this file.
1
4#pragma once
5
6#include "aligator/fwd.hpp"
9
10namespace aligator {
13template <typename _Scalar> struct CostAbstractTpl {
14 using Scalar = _Scalar;
18
22 int nu;
23
24 int nx() const { return space->nx(); }
25 int ndx() const { return space->ndx(); }
26
27 template <class U>
28 CostAbstractTpl(U &&space, const int nu)
29 : space(std::forward<U>(space))
30 , nu(nu) {}
31
33 virtual void evaluate(const ConstVectorRef &x, const ConstVectorRef &u,
34 CostData &data) const;
35
37 virtual void computeGradients(const ConstVectorRef &x,
38 const ConstVectorRef &u, CostData &data) const;
39
41 virtual void computeHessians(const ConstVectorRef &x, const ConstVectorRef &u,
42 CostData &data) const;
43
44 virtual shared_ptr<CostData> createData() const {
45 return std::make_shared<CostData>(ndx(), nu);
46 }
47
48 virtual ~CostAbstractTpl() = default;
49};
50
51template <typename Scalar>
52void CostAbstractTpl<Scalar>::evaluate(const ConstVectorRef &,
53 const ConstVectorRef &,
54 CostData &) const {
55 ALIGATOR_RUNTIME_ERROR("not implemented");
56}
57
58template <typename Scalar>
60 const ConstVectorRef &,
61 CostData &) const {
62 ALIGATOR_RUNTIME_ERROR("not implemented");
63}
64
65template <typename Scalar>
66void CostAbstractTpl<Scalar>::computeHessians(const ConstVectorRef &,
67 const ConstVectorRef &,
68 CostData &) const {
69 ALIGATOR_RUNTIME_ERROR("not implemented");
70}
71
73template <typename _Scalar> struct CostDataAbstractTpl {
74 using Scalar = _Scalar;
76 int ndx_, nu_;
78 VectorXs grad_;
79 MatrixXs hess_;
80
82 VectorRef Lx_;
84 VectorRef Lu_;
86 MatrixRef Lxx_;
88 MatrixRef Lxu_;
90 MatrixRef Lux_;
92 MatrixRef Luu_;
93
94 CostDataAbstractTpl(const int ndx, const int nu)
95 : ndx_(ndx)
96 , nu_(nu)
97 , value_(0.)
98 , grad_(ndx + nu)
99 , hess_(ndx + nu, ndx + nu)
100 , Lx_(grad_.head(ndx))
101 , Lu_(grad_.tail(nu))
102 , Lxx_(hess_.topLeftCorner(ndx, ndx))
103 , Lxu_(hess_.topRightCorner(ndx, nu))
104 , Lux_(hess_.bottomLeftCorner(nu, ndx))
105 , Luu_(hess_.bottomRightCorner(nu, nu)) {
106 grad_.setZero();
107 hess_.setZero();
108 }
109
111 : CostDataAbstractTpl(cost.ndx(), cost.nu) {}
112
113 virtual ~CostDataAbstractTpl() = default;
114};
115
116} // namespace aligator
117
118#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
119#include "aligator/core/cost-abstract.txx"
120#endif
#define ALIGATOR_RUNTIME_ERROR(...)
Definition exceptions.hpp:7
Forward declarations.
Main package namespace.
Stage costs for control problems.
xyz::polymorphic< Manifold > space
virtual shared_ptr< CostData > createData() const
virtual void evaluate(const ConstVectorRef &x, const ConstVectorRef &u, CostData &data) const
Evaluate the cost function.
CostAbstractTpl(U &&space, const int nu)
ManifoldAbstractTpl< Scalar > Manifold
CostDataAbstractTpl< Scalar > CostData
virtual void computeGradients(const ConstVectorRef &x, const ConstVectorRef &u, CostData &data) const
Compute the cost gradients .
virtual void computeHessians(const ConstVectorRef &x, const ConstVectorRef &u, CostData &data) const
Compute the cost Hessians .
virtual ~CostAbstractTpl()=default
Data struct for CostAbstractTpl.
CostDataAbstractTpl(const int ndx, const int nu)
CostDataAbstractTpl(const CostAbstractTpl< Scalar > &cost)
virtual ~CostDataAbstractTpl()=default
Base class for manifolds, to use in cost funcs, solvers...
CostAbstractTpl(U &&space, const int nu)