proxsuite
0.6.4
The Advanced Proximal Optimization Toolbox
Loading...
Searching...
No Matches
backward_data.hpp
Go to the documentation of this file.
1
//
2
// Copyright (c) 2022 INRIA
3
//
7
#ifndef PROXSUITE_PROXQP_DENSE_BACKWARD_DATA_HPP
8
#define PROXSUITE_PROXQP_DENSE_BACKWARD_DATA_HPP
9
10
#include <
proxsuite/helpers/optional.hpp
>
11
#include <Eigen/Core>
12
#include "
proxsuite/linalg/veg/type_traits/core.hpp
"
13
#include "
proxsuite/proxqp/dense/fwd.hpp
"
14
15
namespace
proxsuite
{
16
namespace
proxqp
{
17
namespace
dense {
18
23
26
template
<
typename
T>
27
struct
BackwardData
28
{
30
using
Mat
= Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
31
32
// dL_dH
33
Mat
dL_dH
;
34
// dL_dg
35
Vec<T>
dL_dg
;
36
// dL_dA
37
Mat
dL_dA
;
38
// dL_db
39
Vec<T>
dL_db
;
40
// dL_dC
41
Mat
dL_dC
;
42
// dL_du
43
Vec<T>
dL_du
;
44
// dL_dl
45
Vec<T>
dL_dl
;
46
47
bool
is_valid
(isize dim, isize n_eq, isize n_in)
48
{
49
#define PROXSUITE_CHECK_SIZE(size, expected_size) \
50
if (size != 0) { \
51
if (!(size == expected_size)) \
52
return false; \
53
}
54
55
// check that all matrices and vectors of qpmodel have the correct size
56
// and that H and C have expected properties
57
58
// dx_dg
59
if
(
dL_dH
.size()) {
60
PROXSUITE_CHECK_SIZE
(
dL_dH
.rows(), dim);
61
PROXSUITE_CHECK_SIZE
(
dL_dH
.cols(), dim);
62
}
else
{
63
return
false
;
64
}
65
// dL_dg
66
if
(
dL_dg
.size()) {
67
PROXSUITE_CHECK_SIZE
(
dL_dg
.rows(), dim);
68
}
else
{
69
return
false
;
70
}
71
// dL_dA
72
if
(
dL_dA
.size()) {
73
PROXSUITE_CHECK_SIZE
(
dL_dA
.rows(), n_eq);
74
PROXSUITE_CHECK_SIZE
(
dL_dA
.cols(), dim);
75
}
else
{
76
return
false
;
77
}
78
// dL_db
79
if
(
dL_db
.size()) {
80
PROXSUITE_CHECK_SIZE
(
dL_db
.rows(), n_eq);
81
}
else
{
82
return
false
;
83
}
84
// dL_dC
85
if
(
dL_dC
.size()) {
86
PROXSUITE_CHECK_SIZE
(
dL_dC
.rows(), n_in);
87
PROXSUITE_CHECK_SIZE
(
dL_dC
.cols(), dim);
88
}
else
{
89
return
false
;
90
}
91
// dL_du
92
if
(
dL_du
.size()) {
93
PROXSUITE_CHECK_SIZE
(
dL_du
.rows(), n_in);
94
}
else
{
95
return
false
;
96
}
97
// dL_dl
98
if
(
dL_dl
.size()) {
99
PROXSUITE_CHECK_SIZE
(
dL_dl
.rows(), n_in);
100
}
else
{
101
return
false
;
102
}
103
return
true
;
104
#undef PROXSUITE_CHECK_SIZE
105
}
106
107
void
initialize
(isize dim, isize n_eq, isize n_in)
108
{
109
bool
valid_dimensions
=
is_valid
(dim, n_eq, n_in);
110
if
(
valid_dimensions
==
false
) {
111
112
dL_dH
.resize(dim, dim);
113
dL_dg
.resize(dim);
114
dL_dA
.resize(n_eq, dim);
115
dL_db
.resize(n_eq);
116
dL_dC
.resize(n_in, dim);
117
dL_du
.resize(n_in);
118
dL_dl
.resize(n_in);
119
}
120
dL_dH
.setZero();
121
dL_dg
.setZero();
122
dL_dA
.setZero();
123
dL_db
.setZero();
124
dL_dC
.setZero();
125
dL_du
.setZero();
126
dL_dl
.setZero();
127
}
128
};
129
130
}
// namespace dense
131
}
// namespace proxqp
132
}
// namespace proxsuite
133
134
#endif
/* end of include guard PROXSUITE_PROXQP_DENSE_BACKWARD_DATA_HPP */
PROXSUITE_CHECK_SIZE
#define PROXSUITE_CHECK_SIZE(size, expected_size)
tl::optional
Definition
tl-optional.hpp:815
proxsuite::proxqp
Definition
backward_data.hpp:16
proxsuite
Definition
common.hpp:14
optional.hpp
fwd.hpp
proxsuite::proxqp::dense::BackwardData
This class stores the jacobians of PROXQP solvers with dense backends at a solutions wrt model parame...
Definition
backward_data.hpp:28
proxsuite::proxqp::dense::BackwardData::dL_dg
Vec< T > dL_dg
Definition
backward_data.hpp:35
proxsuite::proxqp::dense::BackwardData::dL_dC
Mat dL_dC
Definition
backward_data.hpp:41
proxsuite::proxqp::dense::BackwardData::dL_dH
Mat dL_dH
Definition
backward_data.hpp:33
proxsuite::proxqp::dense::BackwardData::is_valid
bool is_valid(isize dim, isize n_eq, isize n_in)
Definition
backward_data.hpp:47
proxsuite::proxqp::dense::BackwardData::dL_du
Vec< T > dL_du
Definition
backward_data.hpp:43
proxsuite::proxqp::dense::BackwardData::Mat
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > Mat
Definition
backward_data.hpp:30
proxsuite::proxqp::dense::BackwardData::dL_db
Vec< T > dL_db
Definition
backward_data.hpp:39
proxsuite::proxqp::dense::BackwardData::dL_dl
Vec< T > dL_dl
Definition
backward_data.hpp:45
proxsuite::proxqp::dense::BackwardData::dL_dA
Mat dL_dA
Definition
backward_data.hpp:37
proxsuite::proxqp::dense::BackwardData::initialize
void initialize(isize dim, isize n_eq, isize n_in)
Definition
backward_data.hpp:107
core.hpp
include
proxsuite
proxqp
dense
backward_data.hpp
Generated by
1.10.0