|
Mundy: Multibody Nonlocal Dynamics Version of the Day
|
Mixed constrained quadratic programming problem (MCQPP) formulation. More...
#include <cqpp.hpp>
Public Types | |
| using | backend_t = Backend |
| using | linear_op_storage_a_t = ::mundy::storage<LinearOpA> |
| using | linear_op_storage_l_t = ::mundy::storage<LinearOpL> |
| using | q_vector_storage_t = ::mundy::storage<QVector> |
| using | f_vector_storage_t = ::mundy::storage<FVector> |
| using | q_vector_t = typename q_vector_storage_t::value_type |
| using | f_vector_t = typename f_vector_storage_t::value_type |
| using | space_t = ConvexSpace |
| using | a_workspace_t = WorkspaceA |
| using | l_workspace_t = WorkspaceL |
| using | value_type = impl::vector_value_type<q_vector_t> |
Public Member Functions | |
| MCQPP (Backend, LinearOpA &&A, QVector &&q, LinearOpL &&L, FVector &&f_b, const space_t &space) | |
| MCQPP (Backend, LinearOpA &&A, QVector &&q, LinearOpL &&L, FVector &&f_b, const space_t &space, a_workspace_t a_workspace, l_workspace_t l_workspace) | |
| Backend | backend () const |
| const auto & | A () const |
| const auto & | q () const |
| const auto & | L () const |
| const auto & | f_b () const |
| const space_t & | space () const |
| a_workspace_t & | a_workspace () const |
| This problem's cached scratch state for evaluating A and L (see Backend::apply and Op::Workspace types). | |
| l_workspace_t & | l_workspace () const |
This is for a mixed constrained convex quadratic programming problem such as: x^*, y^* = argmin_{x in Omega_x, y in R^m} q^T x + b^T y + 0.5 (Dx + By)^T M (Dx + By) + 0.5 y^T K^{-1} y where M and K^{-1} are symmetric positive definite matrices, D and B are linear operators, q and b are vectors, and Omega_x is a convex space.
This can be mapped onto a reduced CQPP in x alone via the Schur complement. Define: S^{-1} := B^T M B + K^{-1} (symmetric positive definite) H := D^T M D - D^T M B S B^T M D g := q - D^T M B S b Then the reduced CQPP is: x^* = argmin_{x in Omega_x} 0.5 x^T H x + g^T x y^* = -S^{-1}(b + B^T M D x^*)
In more general terms, the mixed problem exists because of an affine operator mapping x -> f: f = (I + L M) D x + f_b, where f_b = f(x = 0) and L is an spsd linear operator
In the less-general problem above: L = B S B^T and f_b = B S b. In this form, the reduced CQPP is: x^* = argmin_{x in Omega_x} 0.5 x^T H x + g^T x H := D^T M (D - L M D) g := q - D^T M f_b y^*, f^*, and u^* are all intermediates that may or may not be explicitly formed during the solution process depending on the structure of L. We refer to these variables as your "workspace" variables. They are updated by the linear operators during the solution process, and their final values are "committed" at the end of the solve to indicate that they are the correct values corresponding to the optimal x^*.
We may also have the simpler problem where D = I, in which case the reduced CQPP is: x^* = argmin_{x in Omega_x} 0.5 x^T H x + g^T x H := A (I - L A) g := q - A f_b
Just like the CQPP, we will either accept the simple case of (A, q, L, f_b) or the more general case of (DT, M, D, q, BT, S, B, b).
| using mundy::MCQPP< Backend, LinearOpA, QVector, LinearOpL, FVector, ConvexSpace, WorkspaceA, WorkspaceL >::backend_t = Backend |
| using mundy::MCQPP< Backend, LinearOpA, QVector, LinearOpL, FVector, ConvexSpace, WorkspaceA, WorkspaceL >::linear_op_storage_a_t = ::mundy::storage<LinearOpA> |
| using mundy::MCQPP< Backend, LinearOpA, QVector, LinearOpL, FVector, ConvexSpace, WorkspaceA, WorkspaceL >::linear_op_storage_l_t = ::mundy::storage<LinearOpL> |
| using mundy::MCQPP< Backend, LinearOpA, QVector, LinearOpL, FVector, ConvexSpace, WorkspaceA, WorkspaceL >::q_vector_storage_t = ::mundy::storage<QVector> |
| using mundy::MCQPP< Backend, LinearOpA, QVector, LinearOpL, FVector, ConvexSpace, WorkspaceA, WorkspaceL >::f_vector_storage_t = ::mundy::storage<FVector> |
| using mundy::MCQPP< Backend, LinearOpA, QVector, LinearOpL, FVector, ConvexSpace, WorkspaceA, WorkspaceL >::q_vector_t = typename q_vector_storage_t::value_type |
| using mundy::MCQPP< Backend, LinearOpA, QVector, LinearOpL, FVector, ConvexSpace, WorkspaceA, WorkspaceL >::f_vector_t = typename f_vector_storage_t::value_type |
| using mundy::MCQPP< Backend, LinearOpA, QVector, LinearOpL, FVector, ConvexSpace, WorkspaceA, WorkspaceL >::space_t = ConvexSpace |
| using mundy::MCQPP< Backend, LinearOpA, QVector, LinearOpL, FVector, ConvexSpace, WorkspaceA, WorkspaceL >::a_workspace_t = WorkspaceA |
| using mundy::MCQPP< Backend, LinearOpA, QVector, LinearOpL, FVector, ConvexSpace, WorkspaceA, WorkspaceL >::l_workspace_t = WorkspaceL |
| using mundy::MCQPP< Backend, LinearOpA, QVector, LinearOpL, FVector, ConvexSpace, WorkspaceA, WorkspaceL >::value_type = impl::vector_value_type<q_vector_t> |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |