WPILibC++ 2027.0.0-alpha-4
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 /// Cost function value f(x) getter.
25 ///
26 /// <table>
27 /// <tr>
28 /// <th>Variable</th>
29 /// <th>Rows</th>
30 /// <th>Columns</th>
31 /// </tr>
32 /// <tr>
33 /// <td>x</td>
34 /// <td>num_decision_variables</td>
35 /// <td>1</td>
36 /// </tr>
37 /// <tr>
38 /// <td>f(x)</td>
39 /// <td>1</td>
40 /// <td>1</td>
41 /// </tr>
42 /// </table>
43 std::function<Scalar(const DenseVector& x)> f;
44
45 /// Cost function gradient ∇f(x) getter.
46 ///
47 /// <table>
48 /// <tr>
49 /// <th>Variable</th>
50 /// <th>Rows</th>
51 /// <th>Columns</th>
52 /// </tr>
53 /// <tr>
54 /// <td>x</td>
55 /// <td>num_decision_variables</td>
56 /// <td>1</td>
57 /// </tr>
58 /// <tr>
59 /// <td>∇f(x)</td>
60 /// <td>num_decision_variables</td>
61 /// <td>1</td>
62 /// </tr>
63 /// </table>
64 std::function<SparseVector(const DenseVector& x)> g;
65
66 /// Lagrangian Hessian ∇ₓₓ²L(x, y, z) getter.
67 ///
68 /// L(xₖ, yₖ, zₖ) = f(xₖ) − yₖᵀcₑ(xₖ) − zₖᵀcᵢ(xₖ)
69 ///
70 /// <table>
71 /// <tr>
72 /// <th>Variable</th>
73 /// <th>Rows</th>
74 /// <th>Columns</th>
75 /// </tr>
76 /// <tr>
77 /// <td>x</td>
78 /// <td>num_decision_variables</td>
79 /// <td>1</td>
80 /// </tr>
81 /// <tr>
82 /// <td>y</td>
83 /// <td>num_equality_constraints</td>
84 /// <td>1</td>
85 /// </tr>
86 /// <tr>
87 /// <td>z</td>
88 /// <td>num_inequality_constraints</td>
89 /// <td>1</td>
90 /// </tr>
91 /// <tr>
92 /// <td>∇ₓₓ²L(x, y, z)</td>
93 /// <td>num_decision_variables</td>
94 /// <td>num_decision_variables</td>
95 /// </tr>
96 /// </table>
97 std::function<SparseMatrix(const DenseVector& x, const DenseVector& y,
98 const DenseVector& z)>
100
101 /// Equality constraint value cₑ(x) getter.
102 ///
103 /// <table>
104 /// <tr>
105 /// <th>Variable</th>
106 /// <th>Rows</th>
107 /// <th>Columns</th>
108 /// </tr>
109 /// <tr>
110 /// <td>x</td>
111 /// <td>num_decision_variables</td>
112 /// <td>1</td>
113 /// </tr>
114 /// <tr>
115 /// <td>cₑ(x)</td>
116 /// <td>num_equality_constraints</td>
117 /// <td>1</td>
118 /// </tr>
119 /// </table>
120 std::function<DenseVector(const DenseVector& x)> c_e;
121
122 /// Equality constraint Jacobian ∂cₑ/∂x getter.
123 ///
124 /// ```
125 /// [∇ᵀcₑ₁(xₖ)]
126 /// Aₑ(x) = [∇ᵀcₑ₂(xₖ)]
127 /// [ ⋮ ]
128 /// [∇ᵀcₑₘ(xₖ)]
129 /// ```
130 ///
131 /// <table>
132 /// <tr>
133 /// <th>Variable</th>
134 /// <th>Rows</th>
135 /// <th>Columns</th>
136 /// </tr>
137 /// <tr>
138 /// <td>x</td>
139 /// <td>num_decision_variables</td>
140 /// <td>1</td>
141 /// </tr>
142 /// <tr>
143 /// <td>Aₑ(x)</td>
144 /// <td>num_equality_constraints</td>
145 /// <td>num_decision_variables</td>
146 /// </tr>
147 /// </table>
148 std::function<SparseMatrix(const DenseVector& x)> A_e;
149
150 /// Inequality constraint value cᵢ(x) getter.
151 ///
152 /// <table>
153 /// <tr>
154 /// <th>Variable</th>
155 /// <th>Rows</th>
156 /// <th>Columns</th>
157 /// </tr>
158 /// <tr>
159 /// <td>x</td>
160 /// <td>num_decision_variables</td>
161 /// <td>1</td>
162 /// </tr>
163 /// <tr>
164 /// <td>cᵢ(x)</td>
165 /// <td>num_inequality_constraints</td>
166 /// <td>1</td>
167 /// </tr>
168 /// </table>
169 std::function<DenseVector(const DenseVector& x)> c_i;
170
171 /// Inequality constraint Jacobian ∂cᵢ/∂x getter.
172 ///
173 /// ```
174 /// [∇ᵀcᵢ₁(xₖ)]
175 /// Aᵢ(x) = [∇ᵀcᵢ₂(xₖ)]
176 /// [ ⋮ ]
177 /// [∇ᵀcᵢₘ(xₖ)]
178 /// ```
179 ///
180 /// <table>
181 /// <tr>
182 /// <th>Variable</th>
183 /// <th>Rows</th>
184 /// <th>Columns</th>
185 /// </tr>
186 /// <tr>
187 /// <td>x</td>
188 /// <td>num_decision_variables</td>
189 /// <td>1</td>
190 /// </tr>
191 /// <tr>
192 /// <td>Aᵢ(x)</td>
193 /// <td>num_inequality_constraints</td>
194 /// <td>num_decision_variables</td>
195 /// </tr>
196 /// </table>
197 std::function<SparseMatrix(const DenseVector& x)> A_i;
198};
199
200} // namespace slp
Definition expression_graph.hpp:11
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:120
std::function< SparseMatrix(const DenseVector &x)> A_i
Inequality constraint Jacobian ∂cᵢ/∂x getter.
Definition interior_point_matrix_callbacks.hpp:197
std::function< SparseVector(const DenseVector &x)> g
Cost function gradient ∇f(x) getter.
Definition interior_point_matrix_callbacks.hpp:64
std::function< SparseMatrix(const DenseVector &x)> A_e
Equality constraint Jacobian ∂cₑ/∂x getter.
Definition interior_point_matrix_callbacks.hpp:148
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:99
std::function< Scalar(const DenseVector &x)> f
Cost function value f(x) getter.
Definition interior_point_matrix_callbacks.hpp:43
std::function< DenseVector(const DenseVector &x)> c_i
Inequality constraint value cᵢ(x) getter.
Definition interior_point_matrix_callbacks.hpp:169
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