aligator  0.6.1
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
Loading...
Searching...
No Matches
workspace.hpp
Go to the documentation of this file.
1
4#pragma once
5
9
10#include <proxsuite-nlp/modelling/constraints.hpp>
11
12namespace aligator {
13namespace {
14using proxsuite::nlp::ConstraintSetProductTpl;
15} // namespace
16
17template <typename Scalar>
18auto getConstraintProductSet(const ConstraintStackTpl<Scalar> &constraints) {
19 std::vector<ConstraintSetBase<Scalar> *> components;
20 for (size_t i = 0; i < constraints.size(); i++) {
21 components.push_back(constraints[i].set.get());
22 }
23 return ConstraintSetProductTpl<Scalar>{components, constraints.dims()};
24}
25
30template <typename Scalar> struct WorkspaceTpl : WorkspaceBaseTpl<Scalar> {
32 using StageModel = StageModelTpl<Scalar>;
33 using Base = WorkspaceBaseTpl<Scalar>;
34 using VecBool = Eigen::Matrix<bool, Eigen::Dynamic, 1>;
35 using CstrProxScaler = ConstraintProximalScalerTpl<Scalar>;
37 using ConstraintSetProduct = ConstraintSetProductTpl<Scalar>;
38 using BlkJacobianType = BlkMatrix<MatrixXs, -1, 2>; // jacobians
39
40 using Base::dyn_slacks;
41 using Base::nsteps;
43
44 gar::LQRProblemTpl<Scalar> lqr_problem; //< Linear-quadratic subproblem
45 std::vector<CstrProxScaler> cstr_scalers; //< Scaling for the constraints
46
49 std::vector<VectorXs> Lxs; //< State gradients
50 std::vector<VectorXs> Lus; //< Control gradients
51 std::vector<VectorXs> Lvs; //< Path multiplier gradients
52 std::vector<VectorXs> Lds; //< Costate gradients
54
57 using Base::trial_us;
58 using Base::trial_xs;
59 std::vector<VectorXs> trial_vs;
60 std::vector<VectorXs> trial_lams;
62
65 std::vector<VectorXs> lams_plus;
66 std::vector<VectorXs> lams_pdal;
67 std::vector<VectorXs> vs_plus;
68 std::vector<VectorXs> vs_pdal;
70
72 std::vector<VectorXs> shifted_constraints;
73 std::vector<VectorXs> cstr_lx_corr;
74 std::vector<VectorXs> cstr_lu_corr;
76 std::vector<BlkJacobianType> cstr_proj_jacs;
78 std::vector<VecBool> active_constraints;
80 std::vector<ConstraintSetProduct> cstr_product_sets;
81
84 std::vector<VectorXs> dxs;
85 std::vector<VectorXs> dus;
86 std::vector<VectorXs> dvs;
87 std::vector<VectorXs> dlams;
89
92 std::vector<VectorXs> prev_xs;
93 std::vector<VectorXs> prev_us;
94 std::vector<VectorXs> prev_vs;
95 std::vector<VectorXs> prev_lams;
97
103 std::vector<VectorXs> stage_infeasibilities;
109 Scalar inner_criterion = 0.;
110
112 WorkspaceTpl(const TrajOptProblemTpl<Scalar> &problem);
113
114 WorkspaceTpl(const WorkspaceTpl &) = delete;
116
119
120 void cycleLeft();
121
122 template <typename T>
123 friend std::ostream &operator<<(std::ostream &oss,
124 const WorkspaceTpl<T> &self);
125
126 template <typename F>
127 void configureScalers(const TrajOptProblemTpl<Scalar> &problem,
128 const Scalar &mu, F &&strat) {
129 cstr_scalers.reserve(nsteps + 1);
130
131 for (std::size_t t = 0; t < nsteps; t++) {
132 const StageModel &stage = *problem.stages_[t];
133 cstr_scalers.emplace_back(stage.constraints_, mu);
134 std::forward<F>(strat)(cstr_scalers[t]);
135 }
136
137 const ConstraintStackTpl<Scalar> &term_stack = problem.term_cstrs_;
138 if (!term_stack.empty()) {
139 cstr_scalers.emplace_back(term_stack, mu);
140 }
141 }
142};
143
144} // namespace aligator
145
146template <typename Scalar>
147struct fmt::formatter<aligator::WorkspaceTpl<Scalar>> : fmt::ostream_formatter {
148};
149
150#include "./workspace.hxx"
151
152#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
153#include "./workspace.txx"
154#endif
Block matrix class, with a fixed-size number of row and column blocks.
Main package namespace.
auto getConstraintProductSet(const ConstraintStackTpl< Scalar > &constraints)
Definition workspace.hpp:18
Base workspace struct for the algorithms.
std::size_t nsteps
Number of steps in the problem.
std::vector< VectorXs > trial_us
TrajOptDataTpl< Scalar > problem_data
Problem data.
std::vector< VectorXs > dyn_slacks
Dynamical infeasibility gaps.
std::vector< VectorXs > trial_xs
Workspace for solver SolverProxDDP.
Definition workspace.hpp:30
ALIGATOR_DYNAMIC_TYPEDEFS(Scalar)
WorkspaceTpl(const WorkspaceTpl &)=delete
VectorXs state_dual_infeas
Dual infeasibility in the states for each stage of the problem.
gar::LQRProblemTpl< Scalar > lqr_problem
Definition workspace.hpp:44
std::vector< VectorXs > dlams
Definition workspace.hpp:87
std::vector< VectorXs > dvs
Definition workspace.hpp:86
std::size_t nsteps
Number of steps in the problem.
ConstraintSetProductTpl< Scalar > ConstraintSetProduct
Definition workspace.hpp:37
std::vector< CstrProxScaler > cstr_scalers
Definition workspace.hpp:45
std::vector< VectorXs > trial_lams
Definition workspace.hpp:60
std::vector< VectorXs > vs_plus
Definition workspace.hpp:67
std::vector< VecBool > active_constraints
Masks for active constraint sets.
Definition workspace.hpp:78
friend std::ostream & operator<<(std::ostream &oss, const WorkspaceTpl< T > &self)
std::vector< VectorXs > dxs
Definition workspace.hpp:84
std::vector< VectorXs > lams_plus
Definition workspace.hpp:65
std::vector< VectorXs > Lus
Definition workspace.hpp:50
std::vector< VectorXs > shifted_constraints
Shifted constraints the projection operators should be applied to.
Definition workspace.hpp:72
std::vector< VectorXs > prev_lams
Definition workspace.hpp:95
std::vector< VectorXs > Lxs
Definition workspace.hpp:49
WorkspaceTpl(const TrajOptProblemTpl< Scalar > &problem)
std::vector< VectorXs > Lvs
Definition workspace.hpp:51
std::vector< VectorXs > lams_pdal
Definition workspace.hpp:66
Eigen::Matrix< bool, Eigen::Dynamic, 1 > VecBool
Definition workspace.hpp:34
VectorXs stage_cstr_violations
Constraint violation measures for each stage and constraint.
std::vector< BlkJacobianType > cstr_proj_jacs
Projected path constraint Jacobians (used to symmetrize the LQ subproblem)
Definition workspace.hpp:76
std::vector< VectorXs > vs_pdal
Definition workspace.hpp:68
std::vector< VectorXs > prev_vs
Definition workspace.hpp:94
std::vector< VectorXs > prev_us
Definition workspace.hpp:93
std::vector< VectorXs > dus
Definition workspace.hpp:85
VectorXs stage_inner_crits
Subproblem termination criterion for each stage.
Definition workspace.hpp:99
std::vector< VectorXs > stage_infeasibilities
Stagewise infeasibilities.
WorkspaceTpl & operator=(const WorkspaceTpl &)=delete
WorkspaceTpl & operator=(WorkspaceTpl &&)=default
std::vector< ConstraintSetProduct > cstr_product_sets
Cartesian products of the constraint sets of each stage.
Definition workspace.hpp:80
BlkMatrix< MatrixXs, -1, 2 > BlkJacobianType
Definition workspace.hpp:38
std::vector< VectorXs > cstr_lu_corr
Definition workspace.hpp:74
Scalar inner_criterion
Overall subproblem termination criterion.
std::vector< VectorXs > prev_xs
Definition workspace.hpp:92
std::vector< VectorXs > cstr_lx_corr
Definition workspace.hpp:73
WorkspaceTpl(WorkspaceTpl &&)=default
ConstraintProximalScalerTpl< Scalar > CstrProxScaler
Definition workspace.hpp:35
VectorXs control_dual_infeas
Dual infeasibility in the controls for each stage of the problem.
std::vector< VectorXs > trial_vs
Definition workspace.hpp:59
std::vector< VectorXs > Lds
Definition workspace.hpp:52
void configureScalers(const TrajOptProblemTpl< Scalar > &problem, const Scalar &mu, F &&strat)
Struct describing a stage of a constrained LQ problem.