EllAlgo 1.6.13
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
Lmi0Oracle< Arr036, Mat > Class Template Reference

Oracle for Linear Matrix Inequality (LMI) feasibility problems. More...

#include <lmi0_oracle.hpp>

Inheritance diagram for Lmi0Oracle< Arr036, Mat >:
[legend]
Collaboration diagram for Lmi0Oracle< Arr036, Mat >:
[legend]

Public Member Functions

 Lmi0Oracle (size_t ndim, const std::vector< Mat > &F)
 Construct a new LMI Oracle object.
 
auto assess_feas (const Arr036 &x) -> Cut *
 Assess the feasibility of a given point.
 
auto operator() (const Arr036 &x) -> Cut *
 Call operator wrapping assess_feas.
 

Public Attributes

LDLTMgr _mq
 LDLT manager for matrix factorization.
 

Additional Inherited Members

- Protected Types inherited from LmiOracleBase< Arr036, Mat >
using Cut = std::pair< Arr036, double >
 
- Protected Member Functions inherited from LmiOracleBase< Arr036, Mat >
template<typename LDLT , typename Fn >
auto assess_impl (LDLT &mgr, const std::vector< Mat > &F, const int sign, const Arr036 &x, Fn &&getA) -> Cut *
 Shared assess_feas skeleton: factor, witness, sym_quad, pack cut.
 
- Protected Attributes inherited from LmiOracleBase< Arr036, Mat >
std::unique_ptr< Cutcut = std::make_unique<Cut>()
 Storage for the cut returned by assess_feas.
 

Detailed Description

template<typename Arr036, typename Mat = Arr036>
class Lmi0Oracle< Arr036, Mat >

Oracle for Linear Matrix Inequality (LMI) feasibility problems.

This oracle solves the following feasibility problem:

find  x
s.t.  F₀ + F₁x₁ + F₂x₂ + ... + Fₙxₙ ⪯ 0

where Fᵢ are symmetric matrices and ⪯ denotes negative semidefinite. This is a fundamental problem in semidefinite programming and control theory.

Note
Concrete oracle in the Template Method pattern: supplies a lazy getA accessor (Σ F_k x_k) with a negative sym_quad sign to the shared LmiOracleBase::assess_impl skeleton.
Template Parameters
Arr036Array type for the decision variables (size 3-6)
MatMatrix type (defaults to Arr036)

Constructor & Destructor Documentation

◆ Lmi0Oracle()

template<typename Arr036 , typename Mat = Arr036>
Lmi0Oracle< Arr036, Mat >::Lmi0Oracle ( size_t  ndim,
const std::vector< Mat > &  F 
)
inline

Construct a new LMI Oracle object.

Parameters
[in]ndimDimension of the decision space
[in]FVector of matrices defining the LMI constraints

Member Function Documentation

◆ assess_feas()

template<typename Arr036 , typename Mat = Arr036>
auto Lmi0Oracle< Arr036, Mat >::assess_feas ( const Arr036 x) -> Cut*
inline

Assess the feasibility of a given point.

This method checks if the given point x satisfies the LMI constraint. If not feasible, it returns a cutting plane that separates x from the feasible region.

Parameters
[in]xThe point to assess feasibility
Returns
Pointer to cut information, or nullptr if feasible

◆ operator()()

template<typename Arr036 , typename Mat = Arr036>
auto Lmi0Oracle< Arr036, Mat >::operator() ( const Arr036 x) -> Cut*
inline

Call operator wrapping assess_feas.

Parameters
[in]xThe point to assess feasibility
Returns
Cut* Pointer to cut, or nullptr if feasible

Member Data Documentation

◆ _mq

template<typename Arr036 , typename Mat = Arr036>
LDLTMgr Lmi0Oracle< Arr036, Mat >::_mq

LDLT manager for matrix factorization.


The documentation for this class was generated from the following file: