aligator  0.6.1
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"
8#include <proxsuite-nlp/manifold-base.hpp>
9
10namespace aligator {
13template <typename _Scalar> struct CostAbstractTpl {
14 using Scalar = _Scalar;
16 using CostData = CostDataAbstractTpl<Scalar>;
17 using Manifold = ManifoldAbstractTpl<Scalar>;
18
20 shared_ptr<Manifold> space;
22 int nu;
23
24 int nx() const { return space->nx(); }
25 int ndx() const { return space->ndx(); }
26
27 CostAbstractTpl(shared_ptr<Manifold> space, const int nu)
28 : space(space), nu(nu) {}
29
31 virtual void evaluate(const ConstVectorRef &x, const ConstVectorRef &u,
32 CostData &data) const = 0;
33
35 virtual void computeGradients(const ConstVectorRef &x,
36 const ConstVectorRef &u,
37 CostData &data) const = 0;
38
40 virtual void computeHessians(const ConstVectorRef &x, const ConstVectorRef &u,
41 CostData &data) const = 0;
42
43 virtual shared_ptr<CostData> createData() const {
44 return std::make_shared<CostData>(ndx(), nu);
45 }
46
47 virtual ~CostAbstractTpl() = default;
48};
49
51template <typename _Scalar> struct CostDataAbstractTpl {
52 using Scalar = _Scalar;
54 int ndx_, nu_;
56 VectorXs grad_;
57 MatrixXs hess_;
58
60 VectorRef Lx_;
62 VectorRef Lu_;
64 MatrixRef Lxx_;
66 MatrixRef Lxu_;
68 MatrixRef Lux_;
70 MatrixRef Luu_;
71
72 CostDataAbstractTpl(const int ndx, const int nu)
73 : ndx_(ndx), nu_(nu), value_(0.), grad_(ndx + nu),
74 hess_(ndx + nu, ndx + nu), Lx_(grad_.head(ndx)), Lu_(grad_.tail(nu)),
75 Lxx_(hess_.topLeftCorner(ndx, ndx)),
76 Lxu_(hess_.topRightCorner(ndx, nu)),
77 Lux_(hess_.bottomLeftCorner(nu, ndx)),
78 Luu_(hess_.bottomRightCorner(nu, nu)) {
79 grad_.setZero();
80 hess_.setZero();
81 }
82
83 CostDataAbstractTpl(const CostAbstractTpl<Scalar> &cost)
84 : CostDataAbstractTpl(cost.ndx(), cost.nu) {}
85
86 virtual ~CostDataAbstractTpl() = default;
87};
88
89} // namespace aligator
90
91#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
92#include "aligator/core/cost-abstract.txx"
93#endif
Forward declarations.
Main package namespace.
Stage costs for control problems.
virtual shared_ptr< CostData > createData() const
CostAbstractTpl(shared_ptr< Manifold > space, const int nu)
ManifoldAbstractTpl< Scalar > Manifold
int nu
Control dimension.
virtual void evaluate(const ConstVectorRef &x, const ConstVectorRef &u, CostData &data) const =0
Evaluate the cost function.
shared_ptr< Manifold > space
State dimension.
virtual void computeHessians(const ConstVectorRef &x, const ConstVectorRef &u, CostData &data) const =0
Compute the cost Hessians .
virtual void computeGradients(const ConstVectorRef &x, const ConstVectorRef &u, CostData &data) const =0
Compute the cost gradients .
virtual ~CostAbstractTpl()=default
CostDataAbstractTpl(const int ndx, const int nu)
CostDataAbstractTpl(const CostAbstractTpl< Scalar > &cost)
virtual ~CostDataAbstractTpl()=default