aligator  0.6.1
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
Loading...
Searching...
No Matches
proximal-penalty.hpp
Go to the documentation of this file.
1
3#pragma once
4
5#include "aligator/fwd.hpp"
6
7namespace aligator {
8
10template <typename Scalar> struct ProximalDataTpl;
11
18template <typename _Scalar>
20 using Scalar = _Scalar;
22
23 using ManifoldPtr = shared_ptr<ManifoldAbstractTpl<Scalar>>;
24 using Base = CostAbstractTpl<Scalar>;
25 using CostData = CostDataAbstractTpl<Scalar>;
26 using Data = ProximalDataTpl<Scalar>;
27
29 const VectorXs &x_ref, u_ref;
32 const bool no_ctrl_term;
33
34 ProximalPenaltyTpl(const ManifoldPtr &xspace, const ManifoldPtr &uspace,
35 const VectorXs &xt, const VectorXs &ut,
36 const bool no_ctrl_term)
37 : Base(xspace, uspace->ndx()), uspace_(uspace), x_ref(xt), u_ref(ut),
39
40 void evaluate(const ConstVectorRef &x, const ConstVectorRef &u,
41 CostData &data) const {
42 Data &d = static_cast<Data &>(data);
43 // x (-) x_ref
44 this->space->difference(x_ref, x, d.dx_);
45 d.value_ = 0.5 * d.dx_.squaredNorm();
46 if (this->no_ctrl_term)
47 return;
48 uspace_->difference(u_ref, u, d.du_);
49 d.value_ += 0.5 * d.du_.squaredNorm();
50 }
51
52 void computeGradients(const ConstVectorRef &x, const ConstVectorRef &u,
53 CostData &data) const {
54 Data &d = static_cast<Data &>(data);
55 this->space->Jdifference(x_ref, x, d.Jx_, 1);
56 d.Lx_ = d.Jx_.transpose() * d.dx_;
57 if (this->no_ctrl_term)
58 return;
59 uspace_->Jdifference(u_ref, u, d.Ju_, 1);
60 d.Lu_ = d.Ju_.transpose() * d.du_;
61 }
62
63 void computeHessians(const ConstVectorRef &, const ConstVectorRef &,
64 CostData &data) const {
65 Data &d = static_cast<Data &>(data);
66 d.Lxx_ = d.Jx_.transpose() * d.Jx_;
67 if (this->no_ctrl_term)
68 return;
69 d.Luu_ = d.Ju_.transpose() * d.Ju_;
70 }
71
72 shared_ptr<CostData> createData() const {
73 return std::make_shared<Data>(this);
74 }
75};
76
77template <typename Scalar>
79 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
80 using Base = CostDataAbstractTpl<Scalar>;
81 using VectorXs = typename math_types<Scalar>::VectorXs;
82 using MatrixXs = typename math_types<Scalar>::MatrixXs;
83 using Base::ndx_;
84 using Base::nu_;
87 explicit ProximalDataTpl(const ProximalPenaltyTpl<Scalar> *model);
88};
89
90} // namespace aligator
91
92#include "aligator/core/proximal-penalty.hxx"
Forward declarations.
Main package namespace.
Stage costs for control problems.
shared_ptr< Manifold > space
State dimension.
Data for proximal penalty.
ProximalDataTpl(const ProximalPenaltyTpl< Scalar > *model)
typename math_types< Scalar >::VectorXs VectorXs
typename math_types< Scalar >::MatrixXs MatrixXs
shared_ptr< ManifoldAbstractTpl< Scalar > > ManifoldPtr
ProximalPenaltyTpl(const ManifoldPtr &xspace, const ManifoldPtr &uspace, const VectorXs &xt, const VectorXs &ut, const bool no_ctrl_term)
ProximalDataTpl< Scalar > Data
void computeHessians(const ConstVectorRef &, const ConstVectorRef &, CostData &data) const
Compute the cost Hessians .
shared_ptr< CostData > createData() const
void computeGradients(const ConstVectorRef &x, const ConstVectorRef &u, CostData &data) const
Compute the cost gradients .
void evaluate(const ConstVectorRef &x, const ConstVectorRef &u, CostData &data) const
Evaluate the cost function.