akreon-convex
Typed convex modeling, conic canonicalization, and primal-dual optimization in C++26.
Loading...
Searching...
No Matches
convex::LMI< Meta, Child, MatIn > Struct Template Reference

forward declaration of LMI type More...

#include <lmi.hpp>

Inheritance diagram for convex::LMI< Meta, Child, MatIn >:
[legend]

Public Types

using ConvexBase = ConvexSet< Meta, LMI< Meta, Child, MatIn >, Child >
 bring into scope the type traits from the base class
 
using Mat = linalg::remove_cvref_t< MatIn >
 lifted matrix for P
 
- Public Types inherited from convex::ConvexSet< Meta, LMI< Meta, Child, MatIn >, Child >
using BaseT = Atom< Meta, ConvexSet< Meta, LMI< Meta, Child, MatIn >, Child >, Child >
 alias to extract type traits from Domain convex set
 
- Public Types inherited from convex::Atom< Meta, Derived, Cs >
using Domain = meta_dom_t< Meta >
 Atom input domain.
 
using Codomain = meta_codom_t< Meta >
 Atom output codomain.
 
using ChildrenT = std::tuple< atom_decay_t< Cs >... >
 Tuple of decayed child atom types.
 
using T = dom_type_t< Domain >
 Scalar field for the atom domain.
 
using PointT = dom_point_t< Domain >
 Point type accepted by the atom domain.
 

Public Member Functions

constexpr LMI (const linalg::Vector< Mat, N > &A_in, const Mat &B_in, const Child &child_in)
 CTOR for LMI A & B split out.
 
constexpr bool contains_impl (const PointT &x, T) const
 contains function to see if x is in the LMI defined as
 
constexpr bool is_well_formed () const
 is_well_formed to check if the set is valid
 
template<typename Other >
constexpr bool is_equal_impl (const Other &other) const
 equality comparison
 
template<linalg::MatrixContainer Mat>
constexpr auto transform_impl (const affine::AffineMap< Mat > &) const
 transform impl
 
template<AtomType Type, conic::BuilderLike Builder>
constexpr auto canonicalize (const Builder &builder) const
 canonicalize impl
 
- Public Member Functions inherited from convex::ConvexSet< Meta, LMI< Meta, Child, MatIn >, Child >
constexpr ConvexSet (const Child &child_in)
 CTOR.
 
constexpr void validate_domain_impl () const
 is_well_formed
 
constexpr bool contains (const PointT &x, T tol=1e-8) const
 contains to check if the point lies in the convex set
 
constexpr auto transform (const affine::AffineMap< Mat > &map) const
 transform convex set by affine map
 
constexpr bool operator== (const ConvexSet< Meta, OtherDerived, OtherChild > &other) const
 equality comparison overload
 
constexpr bool operator!= (const ConvexSet< Meta, OtherDerived, OtherChild > &other) const
 inequality comparison overload
 
constexpr auto canonicalize_impl (const Builder &builder) const
 canonicalize
 
constexpr auto self () const
 self function which returns a const ref to the derived object
 
- Public Member Functions inherited from convex::Atom< Meta, Derived, Cs >
constexpr Atom ()
 Construct a leaf atom with no children.
 
constexpr Atom (ChildrenT child_in)
 Construct an atom with normalized children.
 
constexpr void validate_fn_domain (const auto &child) const
 Validate DCP composition for a function child.
 
constexpr void validate_domain () const
 Validate child domains, signs, curvature, and composition rules.
 
template<AtomType Type, conic::BuilderLike Builder>
constexpr auto canonicalize (const Builder &builder) const
 Dispatch canonicalization to the derived atom.
 
constexpr const Derived & self () const
 Return this object as the CRTP-derived atom type.
 

Public Attributes

linalg::Vector< Mat, N > A
 member vars for LMI
 
Mat B
 B offset.
 
- Public Attributes inherited from convex::Atom< Meta, Derived, Cs >
ChildrenT children
 Tuple of normalized child atoms.
 

Static Public Attributes

static constexpr std::size_t MatDim = linalg::mat_rows_v<Mat>
 
- Static Public Attributes inherited from convex::Atom< Meta, Derived, Cs >
static constexpr std::size_t N = dom_size_v<Domain>
 Domain dimension.
 
static constexpr std::size_t M = dom_size_v<Codomain>
 Codomain dimension.
 
static constexpr CurvatureType Curvature = meta_curv_v<Meta>
 Curvature declared by atom metadata.
 
static constexpr VarType DomSign = dom_vartype_v<Domain>
 Domain sign declared by atom metadata.
 
static constexpr VarType CodomSign = dom_vartype_v<Codomain>
 Codomain sign declared by atom metadata.
 

Detailed Description

template<typename Meta, typename Child, linalg::SquareMatrix MatIn>
struct convex::LMI< Meta, Child, MatIn >

forward declaration of LMI type

LMI (linear matrix inequality)

LMI solution set: 0 <= B + sum(x_i A_i).

Definition at line 33 of file lmi.hpp.

Member Typedef Documentation

◆ ConvexBase

template<typename Meta , typename Child , linalg::SquareMatrix MatIn>
using convex::LMI< Meta, Child, MatIn >::ConvexBase = ConvexSet<Meta, LMI<Meta, Child, MatIn>, Child>

bring into scope the type traits from the base class

Definition at line 35 of file lmi.hpp.

◆ Mat

template<typename Meta , typename Child , linalg::SquareMatrix MatIn>
using convex::LMI< Meta, Child, MatIn >::Mat = linalg::remove_cvref_t<MatIn>

lifted matrix for P

Definition at line 43 of file lmi.hpp.

Constructor & Destructor Documentation

◆ LMI()

template<typename Meta , typename Child , linalg::SquareMatrix MatIn>
constexpr convex::LMI< Meta, Child, MatIn >::LMI ( const linalg::Vector< Mat, N > &  A_in,
const Mat &  B_in,
const Child &  child_in 
)
inlineexplicitconstexpr

CTOR for LMI A & B split out.

Parameters
Avector of matrices
Bmatrix

Definition at line 54 of file lmi.hpp.

Member Function Documentation

◆ canonicalize()

template<typename Meta , typename Child , linalg::SquareMatrix MatIn>
template<AtomType Type, conic::BuilderLike Builder>
constexpr auto convex::LMI< Meta, Child, MatIn >::canonicalize ( const Builder &  builder) const
inlineconstexpr

canonicalize impl

Apply P^{-1}(C) -> K and map K to cone block

a_i = svec(A_i) in R^k A_i in S^n where k = n(n+1)/2 b = svec(B) ...

B + sum(x_i A_i) >= 0 ... psd cone

Definition at line 124 of file lmi.hpp.

References convex::LMI< Meta, Child, MatIn >::A, convex::LMI< Meta, Child, MatIn >::B, convex::Atom< Meta, Derived, Cs >::children, convex::dom_size_v, convex::Atom< Meta, Derived, Cs >::M, convex::LMI< Meta, Child, MatIn >::MatDim, and convex::Atom< Meta, Derived, Cs >::N.

◆ contains_impl()

template<typename Meta , typename Child , linalg::SquareMatrix MatIn>
constexpr bool convex::LMI< Meta, Child, MatIn >::contains_impl ( const PointT &  x,
T   
) const
inlineconstexpr

contains function to see if x is in the LMI defined as

LMI (i) PSD: 0 <= B + A(x) (ii) PD: 0 < B + A(x)

Parameters
xmatrix with N vectors
Returns
T/F

Definition at line 69 of file lmi.hpp.

References convex::LMI< Meta, Child, MatIn >::A, convex::LMI< Meta, Child, MatIn >::B, convex::dom_size_v, and convex::Atom< Meta, Derived, Cs >::N.

◆ is_equal_impl()

template<typename Meta , typename Child , linalg::SquareMatrix MatIn>
template<typename Other >
constexpr bool convex::LMI< Meta, Child, MatIn >::is_equal_impl ( const Other &  other) const
inlineconstexpr

equality comparison

Parameters
convexset
Returns
T/F

Definition at line 94 of file lmi.hpp.

References convex::LMI< Meta, Child, MatIn >::A, convex::LMI< Meta, Child, MatIn >::B, convex::dom_size_v, and convex::Atom< Meta, Derived, Cs >::N.

◆ is_well_formed()

template<typename Meta , typename Child , linalg::SquareMatrix MatIn>
constexpr bool convex::LMI< Meta, Child, MatIn >::is_well_formed ( ) const
inlineconstexpr

is_well_formed to check if the set is valid

Cant really tell if B + sum(x_i A_i) >= 0 is valid until solve... so if construction passes well formed is fine

Returns
T/F

Definition at line 84 of file lmi.hpp.

◆ transform_impl()

template<typename Meta , typename Child , linalg::SquareMatrix MatIn>
template<linalg::MatrixContainer Mat>
constexpr auto convex::LMI< Meta, Child, MatIn >::transform_impl ( const affine::AffineMap< Mat > &  ) const
inlineconstexpr

transform impl

Parameters
map
Returns
new set

Definition at line 109 of file lmi.hpp.

References convex::dom_size_v.

Member Data Documentation

◆ A

template<typename Meta , typename Child , linalg::SquareMatrix MatIn>
linalg::Vector<Mat, N> convex::LMI< Meta, Child, MatIn >::A

◆ B

◆ MatDim

template<typename Meta , typename Child , linalg::SquareMatrix MatIn>
constexpr std::size_t convex::LMI< Meta, Child, MatIn >::MatDim = linalg::mat_rows_v<Mat>
staticconstexpr

Definition at line 44 of file lmi.hpp.

Referenced by convex::LMI< Meta, Child, MatIn >::canonicalize().


The documentation for this struct was generated from the following files: