aligator
0.19.0
A versatile and efficient C++ library for real-time constrained trajectory optimization.
Toggle main menu visibility
Loading...
Searching...
No Matches
quad-costs.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include "
aligator/context.hpp
"
4
#include "
aligator/core/cost-abstract.hpp
"
5
#include "
aligator/core/manifold-base.hpp
"
6
#include "
aligator/core/vector-space.hpp
"
7
8
namespace
aligator
{
9
10
template
<
typename
Scalar>
struct
QuadraticCostDataTpl
;
11
13
template
<
typename
_Scalar>
struct
QuadraticCostTpl
:
CostAbstractTpl
<_Scalar> {
14
public
:
15
using
Scalar
= _Scalar;
16
ALIGATOR_DYNAMIC_TYPEDEFS
(
Scalar
);
17
using
Base
=
CostAbstractTpl<Scalar>
;
18
using
CostData
=
CostDataAbstractTpl<Scalar>
;
19
20
using
Data
=
QuadraticCostDataTpl<Scalar>
;
21
using
VectorSpace
=
::aligator::VectorSpaceTpl<Scalar, Eigen::Dynamic>
;
22
using
Manifold
=
ManifoldAbstractTpl<Scalar>
;
23
25
MatrixXs
Wxx_
;
27
MatrixXs
Wuu_
;
28
29
protected
:
31
MatrixXs
Wxu_
;
32
33
public
:
35
VectorXs
interp_x
;
37
VectorXs
interp_u
;
38
39
static
auto
get_vector_space
(Eigen::Index
nx
) {
40
return
xyz::polymorphic<Manifold>(
VectorSpace
((
int
)
nx
));
41
}
42
43
QuadraticCostTpl
(
const
ConstMatrixRef &w_x,
const
ConstMatrixRef &w_u,
44
const
ConstVectorRef &
interp_x
,
45
const
ConstVectorRef &
interp_u
)
46
:
Base
(
get_vector_space
(w_x.cols()), (int)w_u.cols())
47
,
Wxx_
(w_x)
48
,
Wuu_
(w_u)
49
,
Wxu_
(this->
ndx
(), this->
nu
)
50
,
interp_x
(
interp_x
)
51
,
interp_u
(
interp_u
)
52
,
has_cross_term_
(false) {
53
debug_check_dims();
54
Wxu_
.setZero();
55
}
56
57
QuadraticCostTpl
(
const
ConstMatrixRef &w_x,
const
ConstMatrixRef &w_u,
58
const
ConstMatrixRef &w_cross,
59
const
ConstVectorRef &
interp_x
,
60
const
ConstVectorRef &
interp_u
)
61
:
Base
(
get_vector_space
(w_x.cols()), (int)w_u.cols())
62
,
Wxx_
(w_x)
63
,
Wuu_
(w_u)
64
,
Wxu_
(w_cross)
65
,
interp_x
(
interp_x
)
66
,
interp_u
(
interp_u
)
67
,
has_cross_term_
(true) {
68
debug_check_dims();
69
}
70
71
QuadraticCostTpl
(
const
ConstMatrixRef &w_x,
const
ConstMatrixRef &w_u)
72
:
QuadraticCostTpl
(w_x, w_u, VectorXs::Zero(w_x.cols()),
73
VectorXs::Zero(w_u.cols())) {}
74
75
QuadraticCostTpl
(
const
ConstMatrixRef &w_x,
const
ConstMatrixRef &w_u,
76
const
ConstMatrixRef &w_cross)
77
:
QuadraticCostTpl
(w_x, w_u, w_cross, VectorXs::Zero(w_x.cols()),
78
VectorXs::Zero(w_u.cols())) {}
79
80
void
evaluate
(
const
ConstVectorRef &x,
const
ConstVectorRef &u,
81
CostData
&data)
const
{
82
Data
&d =
static_cast<
Data
&
>
(data);
83
d.
w_times_x_
.noalias() =
Wxx_
* x;
84
d.
w_times_u_
.noalias() =
Wuu_
* u;
85
if
(
has_cross_term_
) {
86
d.
cross_x_
.noalias() =
Wxu_
* u;
87
d.
cross_u_
.noalias() =
Wxu_
.transpose() * x;
88
89
d.
w_times_x_
+= d.
cross_x_
;
90
d.
w_times_u_
+= d.
cross_u_
;
91
}
92
data.value_ =
Scalar
(0.5) * x.dot(d.
w_times_x_
+ 2 *
interp_x
) +
93
Scalar
(0.5) * u.dot(d.
w_times_u_
+ 2 *
interp_u
);
94
}
95
96
void
computeGradients
(
const
ConstVectorRef &,
const
ConstVectorRef &,
97
CostData
&data)
const
{
98
Data
&d =
static_cast<
Data
&
>
(data);
99
d.
Lx_
= d.
w_times_x_
+
interp_x
;
100
d.
Lu_
= d.
w_times_u_
+
interp_u
;
101
}
102
103
void
computeHessians
(
const
ConstVectorRef &,
const
ConstVectorRef &,
104
CostData
&)
const
{}
105
106
shared_ptr<CostData>
createData
()
const
{
107
auto
data = std::make_shared<Data>(this->
ndx
(), this->
nu
);
108
data->Lxx_ =
Wxx_
;
109
data->Luu_ =
Wuu_
;
110
data->Lxu_ =
Wxu_
;
111
data->Lux_ =
Wxu_
.transpose();
112
return
data;
113
}
114
115
ConstMatrixRef
getCrossWeights
()
const
{
return
Wxu_
; }
116
void
setCrossWeight
(
const
ConstMatrixRef &w) {
117
Wxu_
= w;
118
has_cross_term_
=
true
;
119
debug_check_dims();
120
}
121
123
bool
hasCrossTerm
()
const
{
return
has_cross_term_
; }
124
125
protected
:
127
bool
has_cross_term_
;
128
129
private
:
130
static
void
_check_dim_equal(
long
n,
long
m, std::string_view msg =
""
) {
131
if
(n != m)
132
ALIGATOR_RUNTIME_ERROR
(
"Dimensions inconsistent: got {:d} and {:d}{}.\n"
,
133
n, m, msg);
134
}
135
136
void
debug_check_dims()
const
{
137
_check_dim_equal(
Wxx_
.rows(),
Wxx_
.cols(),
" for x weights"
);
138
_check_dim_equal(
Wuu_
.rows(),
Wuu_
.cols(),
" for u weights"
);
139
_check_dim_equal(
Wxu_
.rows(), this->ndx(),
" for cross-term weight"
);
140
_check_dim_equal(
Wxu_
.cols(), this->nu,
" for cross-term weight"
);
141
_check_dim_equal(
interp_x
.rows(),
Wxx_
.rows(),
142
" for x weights and intercept"
);
143
_check_dim_equal(
interp_u
.rows(),
Wuu_
.rows(),
144
" for u weights and intercept"
);
145
}
146
};
147
148
template
<
typename
Scalar>
149
struct
QuadraticCostDataTpl
:
CostDataAbstractTpl
<Scalar> {
150
using
Base
=
CostDataAbstractTpl<Scalar>
;
151
using
VectorXs
=
typename
Base::VectorXs;
152
VectorXs
w_times_x_
,
w_times_u_
,
cross_x_
,
cross_u_
;
153
154
QuadraticCostDataTpl
(
const
int
nx,
const
int
nu)
155
:
Base
(nx, nu)
156
,
w_times_x_
(nx)
157
,
w_times_u_
(nu)
158
,
cross_x_
(nu)
159
,
cross_u_
(nu) {
160
w_times_x_
.setZero();
161
w_times_u_
.setZero();
162
cross_x_
.setZero();
163
cross_u_
.setZero();
164
}
165
};
166
167
}
// namespace aligator
168
169
#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
170
#include "./quad-costs.txx"
171
#endif
context.hpp
cost-abstract.hpp
ALIGATOR_RUNTIME_ERROR
#define ALIGATOR_RUNTIME_ERROR(...)
Definition
exceptions.hpp:8
manifold-base.hpp
aligator
Main package namespace.
Definition
action-model-wrap.hpp:14
aligator::CostAbstractTpl::CostAbstractTpl
CostAbstractTpl(U &&space, const int nu)
Definition
cost-abstract.hpp:28
aligator::CostAbstractTpl< Scalar >::nx
int nx() const
Definition
cost-abstract.hpp:24
aligator::CostAbstractTpl< Scalar >::nu
int nu
Definition
cost-abstract.hpp:22
aligator::CostAbstractTpl< Scalar >::ndx
int ndx() const
Definition
cost-abstract.hpp:25
aligator::CostDataAbstractTpl
Data struct for CostAbstractTpl.
Definition
cost-abstract.hpp:73
aligator::CostDataAbstractTpl::Lx_
VectorRef Lx_
Gradient .
Definition
cost-abstract.hpp:82
aligator::CostDataAbstractTpl< Scalar >::CostDataAbstractTpl
CostDataAbstractTpl(const int ndx, const int nu)
Definition
cost-abstract.hpp:94
aligator::CostDataAbstractTpl::Lu_
VectorRef Lu_
Gradient .
Definition
cost-abstract.hpp:84
aligator::ManifoldAbstractTpl
Base class for manifolds, to use in cost funcs, solvers...
Definition
manifold-base.hpp:11
aligator::QuadraticCostDataTpl
Definition
quad-costs.hpp:149
aligator::QuadraticCostDataTpl::w_times_x_
VectorXs w_times_x_
Definition
quad-costs.hpp:152
aligator::QuadraticCostDataTpl::Base
CostDataAbstractTpl< Scalar > Base
Definition
quad-costs.hpp:150
aligator::QuadraticCostDataTpl::cross_u_
VectorXs cross_u_
Definition
quad-costs.hpp:152
aligator::QuadraticCostDataTpl::w_times_u_
VectorXs w_times_u_
Definition
quad-costs.hpp:152
aligator::QuadraticCostDataTpl::QuadraticCostDataTpl
QuadraticCostDataTpl(const int nx, const int nu)
Definition
quad-costs.hpp:154
aligator::QuadraticCostDataTpl::cross_x_
VectorXs cross_x_
Definition
quad-costs.hpp:152
aligator::QuadraticCostDataTpl::VectorXs
typename Base::VectorXs VectorXs
Definition
quad-costs.hpp:151
aligator::QuadraticCostTpl< Scalar >::Wuu_
MatrixXs Wuu_
Definition
quad-costs.hpp:27
aligator::QuadraticCostTpl< Scalar >::interp_x
VectorXs interp_x
Definition
quad-costs.hpp:35
aligator::QuadraticCostTpl::Data
QuadraticCostDataTpl< Scalar > Data
Definition
quad-costs.hpp:20
aligator::QuadraticCostTpl::QuadraticCostTpl
QuadraticCostTpl(const ConstMatrixRef &w_x, const ConstMatrixRef &w_u)
Definition
quad-costs.hpp:71
aligator::QuadraticCostTpl::ALIGATOR_DYNAMIC_TYPEDEFS
ALIGATOR_DYNAMIC_TYPEDEFS(Scalar)
aligator::QuadraticCostTpl< Scalar >::interp_u
VectorXs interp_u
Definition
quad-costs.hpp:37
aligator::QuadraticCostTpl::computeGradients
void computeGradients(const ConstVectorRef &, const ConstVectorRef &, CostData &data) const
Compute the cost gradients .
Definition
quad-costs.hpp:96
aligator::QuadraticCostTpl::Scalar
_Scalar Scalar
Definition
quad-costs.hpp:15
aligator::QuadraticCostTpl::QuadraticCostTpl
QuadraticCostTpl(const ConstMatrixRef &w_x, const ConstMatrixRef &w_u, const ConstMatrixRef &w_cross)
Definition
quad-costs.hpp:75
aligator::QuadraticCostTpl::createData
shared_ptr< CostData > createData() const
Definition
quad-costs.hpp:106
aligator::QuadraticCostTpl::evaluate
void evaluate(const ConstVectorRef &x, const ConstVectorRef &u, CostData &data) const
Evaluate the cost function.
Definition
quad-costs.hpp:80
aligator::QuadraticCostTpl< Scalar >::Wxu_
MatrixXs Wxu_
Definition
quad-costs.hpp:31
aligator::QuadraticCostTpl< Scalar >::has_cross_term_
bool has_cross_term_
Definition
quad-costs.hpp:127
aligator::QuadraticCostTpl::getCrossWeights
ConstMatrixRef getCrossWeights() const
Definition
quad-costs.hpp:115
aligator::QuadraticCostTpl::Manifold
ManifoldAbstractTpl< Scalar > Manifold
Definition
quad-costs.hpp:22
aligator::QuadraticCostTpl::Base
CostAbstractTpl< Scalar > Base
Definition
quad-costs.hpp:17
aligator::QuadraticCostTpl::hasCrossTerm
bool hasCrossTerm() const
Whether a cross term exists.
Definition
quad-costs.hpp:123
aligator::QuadraticCostTpl::CostData
CostDataAbstractTpl< Scalar > CostData
Definition
quad-costs.hpp:18
aligator::QuadraticCostTpl::QuadraticCostTpl
QuadraticCostTpl(const ConstMatrixRef &w_x, const ConstMatrixRef &w_u, const ConstVectorRef &interp_x, const ConstVectorRef &interp_u)
Definition
quad-costs.hpp:43
aligator::QuadraticCostTpl::get_vector_space
static auto get_vector_space(Eigen::Index nx)
Definition
quad-costs.hpp:39
aligator::QuadraticCostTpl::computeHessians
void computeHessians(const ConstVectorRef &, const ConstVectorRef &, CostData &) const
Compute the cost Hessians .
Definition
quad-costs.hpp:103
aligator::QuadraticCostTpl::VectorSpace
::aligator::VectorSpaceTpl< Scalar, Eigen::Dynamic > VectorSpace
Definition
quad-costs.hpp:21
aligator::QuadraticCostTpl::setCrossWeight
void setCrossWeight(const ConstMatrixRef &w)
Definition
quad-costs.hpp:116
aligator::QuadraticCostTpl< Scalar >::Wxx_
MatrixXs Wxx_
Definition
quad-costs.hpp:25
aligator::QuadraticCostTpl::QuadraticCostTpl
QuadraticCostTpl(const ConstMatrixRef &w_x, const ConstMatrixRef &w_u, const ConstMatrixRef &w_cross, const ConstVectorRef &interp_x, const ConstVectorRef &interp_u)
Definition
quad-costs.hpp:57
aligator::VectorSpaceTpl
Standard Euclidean vector space.
Definition
vector-space.hpp:13
vector-space.hpp
include
aligator
modelling
costs
quad-costs.hpp
Generated by
1.17.0