Mundy: Multibody Nonlocal Dynamics Version of the Day
Loading...
Searching...
No Matches
mundy::LCP< Backend, LinearOp, QVector, Workspace > Class Template Reference

Linear complementarity problem (LCP) formulation. More...

#include <lcp.hpp>

Public Types

using backend_t = Backend
using linear_op_storage_t = ::mundy::storage<LinearOp>
using q_vector_storage_t = ::mundy::storage<QVector>
using linear_op_t = typename linear_op_storage_t::value_type
using q_vector_t = typename q_vector_storage_t::value_type
using workspace_t = Workspace
using value_type = impl::vector_value_type<q_vector_t>

Public Member Functions

 LCP (Backend, LinearOp &&A, QVector &&q)
 LCP (Backend, LinearOp &&A, QVector &&q, workspace_t workspace)
Backend backend () const
const auto & A () const
const auto & q () const
workspace_tworkspace () const

Detailed Description

template<typename Backend, typename LinearOp, typename QVector, typename Workspace = impl::workspace_for_t<std::remove_cvref_t<LinearOp>>>
class mundy::LCP< Backend, LinearOp, QVector, Workspace >

This is for a linear complementarity problem of the form: 0 <= A x + q _|_ x >= 0 where A is a symmetric positive semi-definite matrix, q is a vector, and x is the solution vector.

This is equivalent to solving the following constrained quadratic programming problem: x^* = argmin 0.5 x^T A x + q^T x s.t. x in R^n, x >= 0

Member Typedef Documentation

◆ backend_t

template<typename Backend, typename LinearOp, typename QVector, typename Workspace = impl::workspace_for_t<std::remove_cvref_t<LinearOp>>>
using mundy::LCP< Backend, LinearOp, QVector, Workspace >::backend_t = Backend

◆ linear_op_storage_t

template<typename Backend, typename LinearOp, typename QVector, typename Workspace = impl::workspace_for_t<std::remove_cvref_t<LinearOp>>>
using mundy::LCP< Backend, LinearOp, QVector, Workspace >::linear_op_storage_t = ::mundy::storage<LinearOp>

◆ q_vector_storage_t

template<typename Backend, typename LinearOp, typename QVector, typename Workspace = impl::workspace_for_t<std::remove_cvref_t<LinearOp>>>
using mundy::LCP< Backend, LinearOp, QVector, Workspace >::q_vector_storage_t = ::mundy::storage<QVector>

◆ linear_op_t

template<typename Backend, typename LinearOp, typename QVector, typename Workspace = impl::workspace_for_t<std::remove_cvref_t<LinearOp>>>
using mundy::LCP< Backend, LinearOp, QVector, Workspace >::linear_op_t = typename linear_op_storage_t::value_type

◆ q_vector_t

template<typename Backend, typename LinearOp, typename QVector, typename Workspace = impl::workspace_for_t<std::remove_cvref_t<LinearOp>>>
using mundy::LCP< Backend, LinearOp, QVector, Workspace >::q_vector_t = typename q_vector_storage_t::value_type

◆ workspace_t

template<typename Backend, typename LinearOp, typename QVector, typename Workspace = impl::workspace_for_t<std::remove_cvref_t<LinearOp>>>
using mundy::LCP< Backend, LinearOp, QVector, Workspace >::workspace_t = Workspace

◆ value_type

template<typename Backend, typename LinearOp, typename QVector, typename Workspace = impl::workspace_for_t<std::remove_cvref_t<LinearOp>>>
using mundy::LCP< Backend, LinearOp, QVector, Workspace >::value_type = impl::vector_value_type<q_vector_t>

Constructor & Destructor Documentation

◆ LCP() [1/2]

template<typename Backend, typename LinearOp, typename QVector, typename Workspace = impl::workspace_for_t<std::remove_cvref_t<LinearOp>>>
mundy::LCP< Backend, LinearOp, QVector, Workspace >::LCP ( Backend ,
LinearOp && A,
QVector && q )
inline

◆ LCP() [2/2]

template<typename Backend, typename LinearOp, typename QVector, typename Workspace = impl::workspace_for_t<std::remove_cvref_t<LinearOp>>>
mundy::LCP< Backend, LinearOp, QVector, Workspace >::LCP ( Backend ,
LinearOp && A,
QVector && q,
workspace_t workspace )
inline

Member Function Documentation

◆ backend()

template<typename Backend, typename LinearOp, typename QVector, typename Workspace = impl::workspace_for_t<std::remove_cvref_t<LinearOp>>>
Backend mundy::LCP< Backend, LinearOp, QVector, Workspace >::backend ( ) const
inline

◆ A()

template<typename Backend, typename LinearOp, typename QVector, typename Workspace = impl::workspace_for_t<std::remove_cvref_t<LinearOp>>>
const auto & mundy::LCP< Backend, LinearOp, QVector, Workspace >::A ( ) const
inline

◆ q()

template<typename Backend, typename LinearOp, typename QVector, typename Workspace = impl::workspace_for_t<std::remove_cvref_t<LinearOp>>>
const auto & mundy::LCP< Backend, LinearOp, QVector, Workspace >::q ( ) const
inline

◆ workspace()

template<typename Backend, typename LinearOp, typename QVector, typename Workspace = impl::workspace_for_t<std::remove_cvref_t<LinearOp>>>
workspace_t & mundy::LCP< Backend, LinearOp, QVector, Workspace >::workspace ( ) const
inline