WPILibC++ 2027.0.0-alpha-5
Loading...
Searching...
No Matches
interior_point_matrix_callbacks.hpp
Go to the documentation of this file.
1// Copyright (c) Sleipnir contributors
2
3#pragma once
4
5#include <functional>
6
7#include <Eigen/Core>
8#include <Eigen/SparseCore>
9
10namespace slp {
11
12/// Matrix callbacks for the interior-point method solver.
13///
14/// @tparam Scalar Scalar type.
15template <typename Scalar>
17 /// Type alias for dense vector.
18 using DenseVector = Eigen::Vector<Scalar, Eigen::Dynamic>;
19 /// Type alias for sparse matrix.
20 using SparseMatrix = Eigen::SparseMatrix<Scalar>;
21 /// Type alias for sparse vector.
22 using SparseVector = Eigen::SparseVector<Scalar>;
23
24 /// Number of decision variables.
26
27 /// Number of equality constraints.
29
30 /// Number of inequality constraints.
32
33 /// Cost function value f(x) getter.
34 ///
35 /// <table>
36 /// <tr>
37 /// <th>Variable</th>
38 /// <th>Rows</th>
39 /// <th>Columns</th>
40 /// </tr>
41 /// <tr>
42 /// <td>x</td>
43 /// <td>num_decision_variables</td>
44 /// <td>1</td>
45 /// </tr>
46 /// <tr>
47 /// <td>f(x)</td>
48 /// <td>1</td>
49 /// <td>1</td>
50 /// </tr>
51 /// </table>
52 std::function<Scalar(const DenseVector& x)> f;
53
54 /// Cost function gradient ∇f(x) getter.
55 ///
56 /// <table>
57 /// <tr>
58 /// <th>Variable</th>
59 /// <th>Rows</th>
60 /// <th>Columns</th>
61 /// </tr>
62 /// <tr>
63 /// <td>x</td>
64 /// <td>num_decision_variables</td>
65 /// <td>1</td>
66 /// </tr>
67 /// <tr>
68 /// <td>∇f(x)</td>
69 /// <td>num_decision_variables</td>
70 /// <td>1</td>
71 /// </tr>
72 /// </table>
73 std::function<SparseVector(const DenseVector& x)> g;
74
75 /// Lagrangian Hessian ∇ₓₓ²L(x, y, z) getter.
76 ///
77 /// L(x, y, z) = f(x) − yᵀcₑ(x) − zᵀcᵢ(x)
78 ///
79 /// <table>
80 /// <tr>
81 /// <th>Variable</th>
82 /// <th>Rows</th>
83 /// <th>Columns</th>
84 /// </tr>
85 /// <tr>
86 /// <td>x</td>
87 /// <td>num_decision_variables</td>
88 /// <td>1</td>
89 /// </tr>
90 /// <tr>
91 /// <td>y</td>
92 /// <td>num_equality_constraints</td>
93 /// <td>1</td>
94 /// </tr>
95 /// <tr>
96 /// <td>z</td>
97 /// <td>num_inequality_constraints</td>
98 /// <td>1</td>
99 /// </tr>
100 /// <tr>
101 /// <td>∇ₓₓ²L(x, y, z)</td>
102 /// <td>num_decision_variables</td>
103 /// <td>num_decision_variables</td>
104 /// </tr>
105 /// </table>
106 std::function<SparseMatrix(const DenseVector& x, const DenseVector& y,
107 const DenseVector& z)>
109
110 /// Constraint part of Lagrangian Hessian ∇ₓₓ²(−yᵀcₑ(x) − zᵀcᵢ(x)) getter.
111 ///
112 /// <table>
113 /// <tr>
114 /// <th>Variable</th>
115 /// <th>Rows</th>
116 /// <th>Columns</th>
117 /// </tr>
118 /// <tr>
119 /// <td>x</td>
120 /// <td>num_decision_variables</td>
121 /// <td>1</td>
122 /// </tr>
123 /// <tr>
124 /// <td>y</td>
125 /// <td>num_equality_constraints</td>
126 /// <td>1</td>
127 /// </tr>
128 /// <tr>
129 /// <td>z</td>
130 /// <td>num_inequality_constraints</td>
131 /// <td>1</td>
132 /// </tr>
133 /// <tr>
134 /// <td>∇ₓₓ²(−yᵀcₑ(x) − zᵀcᵢ(x))</td>
135 /// <td>num_decision_variables</td>
136 /// <td>num_decision_variables</td>
137 /// </tr>
138 /// </table>
139 std::function<SparseMatrix(const DenseVector& x, const DenseVector& y,
140 const DenseVector& z)>
142
143 /// Equality constraint value cₑ(x) getter.
144 ///
145 /// <table>
146 /// <tr>
147 /// <th>Variable</th>
148 /// <th>Rows</th>
149 /// <th>Columns</th>
150 /// </tr>
151 /// <tr>
152 /// <td>x</td>
153 /// <td>num_decision_variables</td>
154 /// <td>1</td>
155 /// </tr>
156 /// <tr>
157 /// <td>cₑ(x)</td>
158 /// <td>num_equality_constraints</td>
159 /// <td>1</td>
160 /// </tr>
161 /// </table>
162 std::function<DenseVector(const DenseVector& x)> c_e;
163
164 /// Equality constraint Jacobian ∂cₑ/∂x getter.
165 ///
166 /// ```
167 /// [∇ᵀcₑ₁(x)]
168 /// Aₑ(x) = [∇ᵀcₑ₂(x)]
169 /// [ ⋮ ]
170 /// [∇ᵀcₑₘ(x)]
171 /// ```
172 ///
173 /// <table>
174 /// <tr>
175 /// <th>Variable</th>
176 /// <th>Rows</th>
177 /// <th>Columns</th>
178 /// </tr>
179 /// <tr>
180 /// <td>x</td>
181 /// <td>num_decision_variables</td>
182 /// <td>1</td>
183 /// </tr>
184 /// <tr>
185 /// <td>Aₑ(x)</td>
186 /// <td>num_equality_constraints</td>
187 /// <td>num_decision_variables</td>
188 /// </tr>
189 /// </table>
190 std::function<SparseMatrix(const DenseVector& x)> A_e;
191
192 /// Inequality constraint value cᵢ(x) getter.
193 ///
194 /// <table>
195 /// <tr>
196 /// <th>Variable</th>
197 /// <th>Rows</th>
198 /// <th>Columns</th>
199 /// </tr>
200 /// <tr>
201 /// <td>x</td>
202 /// <td>num_decision_variables</td>
203 /// <td>1</td>
204 /// </tr>
205 /// <tr>
206 /// <td>cᵢ(x)</td>
207 /// <td>num_inequality_constraints</td>
208 /// <td>1</td>
209 /// </tr>
210 /// </table>
211 std::function<DenseVector(const DenseVector& x)> c_i;
212
213 /// Inequality constraint Jacobian ∂cᵢ/∂x getter.
214 ///
215 /// ```
216 /// [∇ᵀcᵢ₁(x)]
217 /// Aᵢ(x) = [∇ᵀcᵢ₂(x)]
218 /// [ ⋮ ]
219 /// [∇ᵀcᵢₘ(x)]
220 /// ```
221 ///
222 /// <table>
223 /// <tr>
224 /// <th>Variable</th>
225 /// <th>Rows</th>
226 /// <th>Columns</th>
227 /// </tr>
228 /// <tr>
229 /// <td>x</td>
230 /// <td>num_decision_variables</td>
231 /// <td>1</td>
232 /// </tr>
233 /// <tr>
234 /// <td>Aᵢ(x)</td>
235 /// <td>num_inequality_constraints</td>
236 /// <td>num_decision_variables</td>
237 /// </tr>
238 /// </table>
239 std::function<SparseMatrix(const DenseVector& x)> A_i;
240};
241
242} // namespace slp
Definition to_underlying.hpp:7
Matrix callbacks for the interior-point method solver.
Definition interior_point_matrix_callbacks.hpp:16
Eigen::SparseVector< Scalar > SparseVector
Type alias for sparse vector.
Definition interior_point_matrix_callbacks.hpp:22
std::function< DenseVector(const DenseVector &x)> c_e
Equality constraint value cₑ(x) getter.
Definition interior_point_matrix_callbacks.hpp:162
std::function< SparseMatrix(const DenseVector &x)> A_i
Inequality constraint Jacobian ∂cᵢ/∂x getter.
Definition interior_point_matrix_callbacks.hpp:239
std::function< SparseVector(const DenseVector &x)> g
Cost function gradient ∇f(x) getter.
Definition interior_point_matrix_callbacks.hpp:73
std::function< SparseMatrix(const DenseVector &x)> A_e
Equality constraint Jacobian ∂cₑ/∂x getter.
Definition interior_point_matrix_callbacks.hpp:190
std::function< SparseMatrix(const DenseVector &x, const DenseVector &y, const DenseVector &z)> H_c
Constraint part of Lagrangian Hessian ∇ₓₓ²(−yᵀcₑ(x) − zᵀcᵢ(x)) getter.
Definition interior_point_matrix_callbacks.hpp:141
std::function< SparseMatrix(const DenseVector &x, const DenseVector &y, const DenseVector &z)> H
Lagrangian Hessian ∇ₓₓ²L(x, y, z) getter.
Definition interior_point_matrix_callbacks.hpp:108
int num_inequality_constraints
Number of inequality constraints.
Definition interior_point_matrix_callbacks.hpp:31
int num_equality_constraints
Number of equality constraints.
Definition interior_point_matrix_callbacks.hpp:28
std::function< Scalar(const DenseVector &x)> f
Cost function value f(x) getter.
Definition interior_point_matrix_callbacks.hpp:52
std::function< DenseVector(const DenseVector &x)> c_i
Inequality constraint value cᵢ(x) getter.
Definition interior_point_matrix_callbacks.hpp:211
int num_decision_variables
Number of decision variables.
Definition interior_point_matrix_callbacks.hpp:25
Eigen::SparseMatrix< Scalar > SparseMatrix
Type alias for sparse matrix.
Definition interior_point_matrix_callbacks.hpp:20
Eigen::Vector< Scalar, Eigen::Dynamic > DenseVector
Type alias for dense vector.
Definition interior_point_matrix_callbacks.hpp:18