aligator  0.6.1
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
Loading...
Searching...
No Matches
alm-weights.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "aligator/fwd.hpp"
5
6namespace aligator {
7
9template <typename Scalar> class ConstraintProximalScalerTpl {
10public:
12 using ConstraintStack = ConstraintStackTpl<Scalar>;
13
15 const Scalar &mu)
16 : constraints_(&constraints), mu_(&mu),
17 scalingMatrix_(constraints.dims()) {
18 scalingMatrix_.matrix().setOnes();
19 }
20
21 std::size_t size() const { return constraints_->size(); }
22
23 void setWeight(const Scalar w, std::size_t j) {
24 scalingMatrix_[j].array() = w;
25 }
26
28 template <typename D> void setWeights(const Eigen::MatrixBase<D> &weights) {
29 EIGEN_STATIC_ASSERT_VECTOR_ONLY(D)
30 for (size_t i = 0; i < constraints_->size(); i++) {
31 scalingMatrix_[i].array() = weights[long(i)];
32 }
33 }
34
36 template <typename D> auto apply(const Eigen::MatrixBase<D> &m) const {
37 return diagMatrix() * m;
38 }
39
40 template <typename D> auto applyInverse(const Eigen::MatrixBase<D> &m) const {
41 return diagMatrix().inverse() * m;
42 }
43
44 template <typename D>
45 Scalar weightedNorm(const Eigen::MatrixBase<D> &m) const {
46 EIGEN_STATIC_ASSERT_VECTOR_ONLY(D)
47 return m.dot(apply(m));
48 }
49
50 inline auto diagMatrix() const {
51 return mu() * scalingMatrix_.matrix().asDiagonal();
52 }
53
54private:
55 using BlkVec = BlkMatrix<VectorXs, -1, 1>;
56 Scalar mu() const { return *mu_; }
57 const ConstraintStack *constraints_;
59 const Scalar *mu_;
61 BlkVec scalingMatrix_;
62};
63
64} // namespace aligator
Block matrix class, with a fixed-size number of row and column blocks.
MatrixType & matrix()
Weighting strategy for the constraints in a stack.
void setWeight(const Scalar w, std::size_t j)
Scalar weightedNorm(const Eigen::MatrixBase< D > &m) const
auto apply(const Eigen::MatrixBase< D > &m) const
Apply weighted penalty matrix.
void setWeights(const Eigen::MatrixBase< D > &weights)
Set all weights at once.
ConstraintProximalScalerTpl(const ConstraintStack &constraints, const Scalar &mu)
ConstraintStackTpl< Scalar > ConstraintStack
auto applyInverse(const Eigen::MatrixBase< D > &m) const
Forward declarations.
Main package namespace.