akreon-convex
Typed convex modeling, conic canonicalization, and primal-dual optimization in C++26.
Loading...
Searching...
No Matches
conic::PositiveSemidefiniteCone< Slack, N > Struct Template Reference

forward decl for psd More...

#include <psd_cone.hpp>

Inheritance diagram for conic::PositiveSemidefiniteCone< Slack, N >:
[legend]

Public Types

using ConeBase = Cone< Slack, PositiveSemidefiniteCone< Slack, N >, ConeType::SYMMETRIC >
 bring into scope alias from cone base
 
using ambient_space = linalg::SymmetricMatrixSpace< T, N >
 Ambient vector space of real symmetric matrices.
 
using element_type = linalg::space_element_t< ambient_space >
 Canonical matrix representation of an ambient-space element.
 
- Public Types inherited from conic::Cone< Slack, PositiveSemidefiniteCone< Slack, N >, ConeType::SYMMETRIC >
using T = linalg::vector_element_t< Slack >
 alias for mat type
 
using HessianMat = linalg::Matrix< T, M, M >
 hessian type
 

Public Member Functions

constexpr Slack x0_impl () const
 default x in K
 
constexpr Slack y0_impl () const
 default y in K^*
 
constexpr bool in_cone_impl (const Slack &x) const
 x in K check
 
constexpr bool in_dual_cone_impl (const Slack &y) const
 y in K^* check
 
constexpr T alpha_max_impl (const Slack &x, const linalg::Vector< T, M > &p) const
 alpha_max (fraction to boundary)
 
constexpr T alpha_max_dual_impl (const Slack &y, const linalg::Vector< T, M > &p) const
 alpha_max dual (fraction to dK^*)
 
constexpr auto H_impl (const Slack &x, const Slack &y) const
 hessian
 
constexpr auto grad_impl (const Slack &x) const
 grad (jacobian)
 
constexpr T nu_impl () const
 barrier param
 
constexpr auto e_impl () const
 e (jordan identity)
 
constexpr auto sqrt_impl (const Slack &x) const
 Jordan square root in symmetric-vector coordinates.
 
constexpr auto w_impl (const Slack &x, const Slack &y) const
 w (self-scaled point)
 
constexpr auto circ_impl (const Slack &x, const Slack &y) const
 circ
 
constexpr T trace_impl (const Slack &x, const Slack &y) const
 trace
 
constexpr auto gamma_F_impl (const Slack &x, const Slack &y) const
 gamma_F
 
constexpr auto inv_impl (const Slack &x) const
 inv
 
- Public Member Functions inherited from conic::Cone< Slack, PositiveSemidefiniteCone< Slack, N >, ConeType::SYMMETRIC >
constexpr Slack x0 () const
 default interior point (initial slack in cone space)
 
constexpr Slack y0 () const
 default interior point (initial slack in dual cone)
 
constexpr bool in_cone (const Slack &x) const
 in the interior of k
 
constexpr bool in_dual_cone (const Slack &y) const
 in the interior of K^*
 
constexpr auto H (const Slack &x, const Slack &y) const
 hessian
 
constexpr T alpha_max (const Slack &x, const linalg::Vector< T, M > &p) const
 fraction to boundary dk
 
constexpr T alpha_max_dual (const Slack &y, const linalg::Vector< T, M > &p) const
 fraction to boundary dk^*
 
constexpr T nu () const
 barrier parameter
 
constexpr auto grad (const Slack &x) const
 gradient
 
constexpr auto e () const
 e (jordan identity)
 
constexpr auto w (const Slack &x, const Slack &y) const
 w (self-scaling point)
 
constexpr auto circ (const Slack &x, const Slack &y) const
 circ (jordan map/product operator)
 
constexpr auto trace (const Slack &x, const Slack &y) const
 trace
 
constexpr auto inv (const Slack &x) const
 inv (jordan inverse element)
 
constexpr T trace_weight () const
 Convert Euclidean complementarity to this cone's Jordan trace units.
 
constexpr auto scaled_affine_correction (const Slack &x, const Scaling &P, const Slack &px, const Slack &py) const
 Affine second-order correction in dual coordinates under NT scaling.
 
constexpr auto scaled_affine_correction_impl (const Slack &x, const Scaling &P, const Slack &px, const Slack &py) const
 Common symmetric-cone implementation using Jordan operations.
 
constexpr auto gamma_F (const Slack &x, const Slack &y) const
 gamma_F (functional proximity neighborhood metric)
 
constexpr auto self () const
 self function which returns a const ref to the derived object
 

Static Public Member Functions

static constexpr bool contains (const element_type &element)
 Closed-cone membership, including semidefinite boundary elements.
 

Additional Inherited Members

- Static Public Attributes inherited from conic::Cone< Slack, PositiveSemidefiniteCone< Slack, N >, ConeType::SYMMETRIC >
static constexpr std::size_t M
 helpers to get M slack size
 
static constexpr T eps
 eps constant
 

Detailed Description

template<linalg::VectorContainer Slack, std::size_t N>
struct conic::PositiveSemidefiniteCone< Slack, N >

forward decl for psd

psd cone class

svec(X) in S^n_+

Definition at line 47 of file psd_cone.hpp.

Member Typedef Documentation

◆ ambient_space

template<linalg::VectorContainer Slack, std::size_t N>
using conic::PositiveSemidefiniteCone< Slack, N >::ambient_space = linalg::SymmetricMatrixSpace<T, N>

Ambient vector space of real symmetric matrices.

Definition at line 64 of file psd_cone.hpp.

◆ ConeBase

template<linalg::VectorContainer Slack, std::size_t N>
using conic::PositiveSemidefiniteCone< Slack, N >::ConeBase = Cone<Slack, PositiveSemidefiniteCone<Slack, N>, ConeType::SYMMETRIC>

bring into scope alias from cone base

Definition at line 51 of file psd_cone.hpp.

◆ element_type

template<linalg::VectorContainer Slack, std::size_t N>
using conic::PositiveSemidefiniteCone< Slack, N >::element_type = linalg::space_element_t<ambient_space>

Canonical matrix representation of an ambient-space element.

Definition at line 66 of file psd_cone.hpp.

Member Function Documentation

◆ alpha_max_dual_impl()

template<linalg::VectorContainer Slack, std::size_t N>
constexpr T conic::PositiveSemidefiniteCone< Slack, N >::alpha_max_dual_impl ( const Slack &  y,
const linalg::Vector< T, M > &  p 
) const
inlineconstexpr

alpha_max dual (fraction to dK^*)

Parameters
yin K^*
pin E^*
Returns
alpha_max (dual)

Definition at line 162 of file psd_cone.hpp.

References conic::PositiveSemidefiniteCone< Slack, N >::alpha_max_impl().

◆ alpha_max_impl()

template<linalg::VectorContainer Slack, std::size_t N>
constexpr T conic::PositiveSemidefiniteCone< Slack, N >::alpha_max_impl ( const Slack &  x,
const linalg::Vector< T, M > &  p 
) const
inlineconstexpr

alpha_max (fraction to boundary)

sigma(alpha) = frac{1}{sup{alpha | (x + alpha p in K)}}

X + alpha P in S^n_++ X + alpha P = [ X^{1/2} (I + alpha X^{-1/2} P X^{-1/2}) X^{1/2} ] let U = X^{-1/2} P X^{-1/2} we want I + alpha U >= 0 I + alpha U >= 0 iff 1 + alpha lambda_i(U) >= 0 for all i

alpha_max = cases{ +inf, if lambda_i(U) >= 0 for all i -frac{1}{lambda_min(U)} else }

Parameters
xin K
pin E
Returns
alpha_max

Definition at line 138 of file psd_cone.hpp.

References conic::PositiveSemidefiniteCone< Slack, N >::in_cone_impl().

Referenced by conic::PositiveSemidefiniteCone< Slack, N >::alpha_max_dual_impl().

◆ circ_impl()

template<linalg::VectorContainer Slack, std::size_t N>
constexpr auto conic::PositiveSemidefiniteCone< Slack, N >::circ_impl ( const Slack &  x,
const Slack &  y 
) const
inlineconstexpr

circ

x circ y

Parameters
xin K
yin K^*
Returns
x circ y

Definition at line 288 of file psd_cone.hpp.

◆ contains()

template<linalg::VectorContainer Slack, std::size_t N>
static constexpr bool conic::PositiveSemidefiniteCone< Slack, N >::contains ( const element_type &  element)
inlinestaticconstexpr

Closed-cone membership, including semidefinite boundary elements.

Uses the element's numerical PSD classification and tolerance. In contrast, in_cone() checks the positive-definite interior required by the solver.

Definition at line 74 of file psd_cone.hpp.

◆ e_impl()

template<linalg::VectorContainer Slack, std::size_t N>
constexpr auto conic::PositiveSemidefiniteCone< Slack, N >::e_impl ( ) const
inlineconstexpr

◆ gamma_F_impl()

template<linalg::VectorContainer Slack, std::size_t N>
constexpr auto conic::PositiveSemidefiniteCone< Slack, N >::gamma_F_impl ( const Slack &  x,
const Slack &  y 
) const
inlineconstexpr

gamma_F

gamma_F = -ln(det(X)) - ln(det(Y)) + nu ln(Tr(X^{1/2} Y X^{1/2}) / nu)

Parameters
xin K
yin K^*
Returns
gamma_F

Definition at line 318 of file psd_cone.hpp.

References conic::PositiveSemidefiniteCone< Slack, N >::nu_impl().

◆ grad_impl()

template<linalg::VectorContainer Slack, std::size_t N>
constexpr auto conic::PositiveSemidefiniteCone< Slack, N >::grad_impl ( const Slack &  x) const
inlineconstexpr

grad (jacobian)

F'(x) = -x^{-1}

Parameters
xin K or y in K^*
Returns
(F'(x), event)

Definition at line 208 of file psd_cone.hpp.

References conic::PositiveSemidefiniteCone< Slack, N >::inv_impl().

◆ H_impl()

template<linalg::VectorContainer Slack, std::size_t N>
constexpr auto conic::PositiveSemidefiniteCone< Slack, N >::H_impl ( const Slack &  x,
const Slack &  y 
) const
inlineconstexpr

hessian

F(w) = -log det(w) F'(w) = - w^{-1} F''(w) = P(w^{-1})

F''(w^{-1}) x = y

Parameters
xin K
yin K^*
Returns
(H, event)

Definition at line 181 of file psd_cone.hpp.

References conic::PositiveSemidefiniteCone< Slack, N >::e_impl(), conic::PositiveSemidefiniteCone< Slack, N >::inv_impl(), conic::Cone< Slack, PositiveSemidefiniteCone< Slack, N >, ConeType::SYMMETRIC >::w(), and conic::PositiveSemidefiniteCone< Slack, N >::w_impl().

◆ in_cone_impl()

template<linalg::VectorContainer Slack, std::size_t N>
constexpr bool conic::PositiveSemidefiniteCone< Slack, N >::in_cone_impl ( const Slack &  x) const
inlineconstexpr

x in K check

Parameters
xin K
Returns
T/F

Definition at line 99 of file psd_cone.hpp.

Referenced by conic::PositiveSemidefiniteCone< Slack, N >::alpha_max_impl(), and conic::PositiveSemidefiniteCone< Slack, N >::in_dual_cone_impl().

◆ in_dual_cone_impl()

template<linalg::VectorContainer Slack, std::size_t N>
constexpr bool conic::PositiveSemidefiniteCone< Slack, N >::in_dual_cone_impl ( const Slack &  y) const
inlineconstexpr

y in K^* check

Parameters
yin K^*
Returns
T/F

Definition at line 112 of file psd_cone.hpp.

References conic::PositiveSemidefiniteCone< Slack, N >::in_cone_impl().

◆ inv_impl()

template<linalg::VectorContainer Slack, std::size_t N>
constexpr auto conic::PositiveSemidefiniteCone< Slack, N >::inv_impl ( const Slack &  x) const
inlineconstexpr

inv

Parameters
xin K
Returns
(inv(x), event)

Definition at line 350 of file psd_cone.hpp.

Referenced by conic::PositiveSemidefiniteCone< Slack, N >::grad_impl(), and conic::PositiveSemidefiniteCone< Slack, N >::H_impl().

◆ nu_impl()

template<linalg::VectorContainer Slack, std::size_t N>
constexpr T conic::PositiveSemidefiniteCone< Slack, N >::nu_impl ( ) const
inlineconstexpr

barrier param

Returns
nu (matrix order N, the degree of det(X))

Definition at line 218 of file psd_cone.hpp.

Referenced by conic::PositiveSemidefiniteCone< Slack, N >::gamma_F_impl().

◆ sqrt_impl()

template<linalg::VectorContainer Slack, std::size_t N>
constexpr auto conic::PositiveSemidefiniteCone< Slack, N >::sqrt_impl ( const Slack &  x) const
inlineconstexpr

Jordan square root in symmetric-vector coordinates.

Definition at line 237 of file psd_cone.hpp.

◆ trace_impl()

template<linalg::VectorContainer Slack, std::size_t N>
constexpr T conic::PositiveSemidefiniteCone< Slack, N >::trace_impl ( const Slack &  x,
const Slack &  y 
) const
inlineconstexpr

trace

tr(XY)

Parameters
xin K
yin K^*
Returns
tr(XY)

Definition at line 302 of file psd_cone.hpp.

◆ w_impl()

template<linalg::VectorContainer Slack, std::size_t N>
constexpr auto conic::PositiveSemidefiniteCone< Slack, N >::w_impl ( const Slack &  x,
const Slack &  y 
) const
inlineconstexpr

w (self-scaled point)

W = X^{1/2} (X^{1/2} Y X^{1/2})^{-1/2} X^{1/2}

Parameters
xin K
yin K^*
Returns
(w, event)

Definition at line 254 of file psd_cone.hpp.

References conic::Cone< Slack, PositiveSemidefiniteCone< Slack, N >, ConeType::SYMMETRIC >::w().

Referenced by conic::PositiveSemidefiniteCone< Slack, N >::H_impl().

◆ x0_impl()

template<linalg::VectorContainer Slack, std::size_t N>
constexpr Slack conic::PositiveSemidefiniteCone< Slack, N >::x0_impl ( ) const
inlineconstexpr

default x in K

Returns
x

Definition at line 83 of file psd_cone.hpp.

References conic::PositiveSemidefiniteCone< Slack, N >::e_impl().

◆ y0_impl()

template<linalg::VectorContainer Slack, std::size_t N>
constexpr Slack conic::PositiveSemidefiniteCone< Slack, N >::y0_impl ( ) const
inlineconstexpr

default y in K^*

Returns
y

Definition at line 90 of file psd_cone.hpp.

References conic::PositiveSemidefiniteCone< Slack, N >::e_impl().


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