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

forward decl for nonneg orthant cone More...

#include <rplus.hpp>

Inheritance diagram for conic::NonnegOrthantCone< Slack >:
[legend]

Public Types

using ConeBase = Cone< Slack, NonnegOrthantCone< Slack >, ConeType::SYMMETRIC >
 bring into scope alias from cone base
 
- Public Types inherited from conic::Cone< Slack, NonnegOrthantCone< Slack >, 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 interior point
 
constexpr Slack y0_impl () const
 default dual point
 
constexpr bool in_cone_impl (const Slack &x) const
 in interior of K
 
constexpr bool in_dual_cone_impl (const Slack &y) const
 in interior of K^*
 
constexpr T alpha_max_impl (const Slack &x, const linalg::Vector< T, M > &p) const
 fraction to boundary dK
 
constexpr T alpha_max_dual_impl (const Slack &y, const linalg::Vector< T, M > &p) const
 fracto to dK^*
 
constexpr auto H_impl (const Slack &x, const Slack &y) const
 hessian
 
constexpr auto grad_impl (const Slack &x) const
 grad
 
constexpr T nu_impl () const
 barrier parameter
 
constexpr auto e_impl () const
 e (jordan identity)
 
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
 
template<typename Scaling >
constexpr auto scaled_affine_correction_impl (const Slack &x, const Scaling &, const Slack &px, const Slack &py) const
 Componentwise form of the NT-scaled affine correction for R^n_+.
 
constexpr auto trace_impl (const Slack &x, const Slack &y) const
 trace
 
constexpr auto inv_impl (const Slack &x) const
 jordan inverse
 
constexpr auto gamma_F_impl (const Slack &x, const Slack &y) const
 gamma_F
 
- Public Member Functions inherited from conic::Cone< Slack, NonnegOrthantCone< Slack >, 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
 

Additional Inherited Members

- Static Public Attributes inherited from conic::Cone< Slack, NonnegOrthantCone< Slack >, 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>
struct conic::NonnegOrthantCone< Slack >

forward decl for nonneg orthant cone

nonneg cone class

R^n_+ = set of all nonneg R

Definition at line 46 of file rplus.hpp.

Member Typedef Documentation

◆ ConeBase

template<linalg::VectorContainer Slack>
using conic::NonnegOrthantCone< Slack >::ConeBase = Cone<Slack, NonnegOrthantCone<Slack>, ConeType::SYMMETRIC>

bring into scope alias from cone base

Definition at line 49 of file rplus.hpp.

Member Function Documentation

◆ alpha_max_dual_impl()

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

fracto to dK^*

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

Definition at line 135 of file rplus.hpp.

References conic::NonnegOrthantCone< Slack >::alpha_max_impl().

◆ alpha_max_impl()

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

fraction to boundary dK

sigma_x = frac{1}{sup{alpha | x + alpha p in K}} sup{alpha | x + alpha p in K} -> -inf(x + alpha p) x + alpha p = 0 -> alpha = -x / p alpha = min. -x_i / p_i

(similar for dual)

Parameters
xin K or K^*
pin E or E^* (delta dir)
Returns
alpha_max

Definition at line 114 of file rplus.hpp.

References conic::Cone< Slack, NonnegOrthantCone< Slack >, ConeType::SYMMETRIC >::M.

Referenced by conic::NonnegOrthantCone< Slack >::alpha_max_dual_impl().

◆ circ_impl()

template<linalg::VectorContainer Slack>
constexpr auto conic::NonnegOrthantCone< Slack >::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 250 of file rplus.hpp.

Referenced by conic::NonnegOrthantCone< Slack >::trace_impl().

◆ e_impl()

template<linalg::VectorContainer Slack>
constexpr auto conic::NonnegOrthantCone< Slack >::e_impl ( ) const
inlineconstexpr

e (jordan identity)

e = (1,1,...1)

Returns
e (vector)

Definition at line 213 of file rplus.hpp.

Referenced by conic::NonnegOrthantCone< Slack >::H_impl().

◆ gamma_F_impl()

template<linalg::VectorContainer Slack>
constexpr auto conic::NonnegOrthantCone< Slack >::gamma_F_impl ( const Slack &  x,
const Slack &  y 
) const
inlineconstexpr

◆ grad_impl()

template<linalg::VectorContainer Slack>
constexpr auto conic::NonnegOrthantCone< Slack >::grad_impl ( const Slack &  x) const
inlineconstexpr

grad

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

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

Definition at line 186 of file rplus.hpp.

References conic::Cone< Slack, NonnegOrthantCone< Slack >, ConeType::SYMMETRIC >::eps, and conic::Cone< Slack, NonnegOrthantCone< Slack >, ConeType::SYMMETRIC >::M.

◆ H_impl()

template<linalg::VectorContainer Slack>
constexpr auto conic::NonnegOrthantCone< Slack >::H_impl ( const Slack &  x,
const Slack &  y 
) const
inlineconstexpr

hessian

F''(w) -> pushforward operator that maps primal / tangent dir to change in gradient at scaling point w... acts as forward sensitivity & curvature

w_i = sqrt(x_i/y_i) F(w) = -log(sum(w_i)) F'(w) = -(1/w)^{T} F''(w) = diag(1/w^2)

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

Definition at line 156 of file rplus.hpp.

References conic::NonnegOrthantCone< Slack >::e_impl(), conic::Cone< Slack, NonnegOrthantCone< Slack >, ConeType::SYMMETRIC >::eps, conic::Cone< Slack, NonnegOrthantCone< Slack >, ConeType::SYMMETRIC >::M, conic::Cone< Slack, NonnegOrthantCone< Slack >, ConeType::SYMMETRIC >::w(), and conic::NonnegOrthantCone< Slack >::w_impl().

◆ in_cone_impl()

template<linalg::VectorContainer Slack>
constexpr bool conic::NonnegOrthantCone< Slack >::in_cone_impl ( const Slack &  x) const
inlineconstexpr

in interior of K

Parameters
xin K
Returns
bool

Definition at line 82 of file rplus.hpp.

References conic::Cone< Slack, NonnegOrthantCone< Slack >, ConeType::SYMMETRIC >::M.

Referenced by conic::NonnegOrthantCone< Slack >::in_dual_cone_impl().

◆ in_dual_cone_impl()

template<linalg::VectorContainer Slack>
constexpr bool conic::NonnegOrthantCone< Slack >::in_dual_cone_impl ( const Slack &  y) const
inlineconstexpr

in interior of K^*

Parameters
yin K^*
Returns
bool

Definition at line 95 of file rplus.hpp.

References conic::NonnegOrthantCone< Slack >::in_cone_impl().

◆ inv_impl()

template<linalg::VectorContainer Slack>
constexpr auto conic::NonnegOrthantCone< Slack >::inv_impl ( const Slack &  x) const
inlineconstexpr

jordan inverse

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

Definition at line 304 of file rplus.hpp.

References conic::Cone< Slack, NonnegOrthantCone< Slack >, ConeType::SYMMETRIC >::eps, and conic::Cone< Slack, NonnegOrthantCone< Slack >, ConeType::SYMMETRIC >::M.

◆ nu_impl()

template<linalg::VectorContainer Slack>
constexpr T conic::NonnegOrthantCone< Slack >::nu_impl ( ) const
inlineconstexpr

◆ scaled_affine_correction_impl()

template<linalg::VectorContainer Slack>
template<typename Scaling >
constexpr auto conic::NonnegOrthantCone< Slack >::scaled_affine_correction_impl ( const Slack &  x,
const Scaling &  ,
const Slack &  px,
const Slack &  py 
) const
inlineconstexpr

Componentwise form of the NT-scaled affine correction for R^n_+.

Here x circ y is componentwise multiplication. Complementarity gives y_i*dx_i + x_i*dy_i = mu - x_i*y_i - px_i*py_i. Dividing by x_i gives dy_i = -(y_i/x_i)*dx_i - [y_i - mu/x_i + px_i*py_i/x_i]. Thus the reduced dual residual needs px_i*py_i/x_i, not the raw product. The existing interior safeguard bounds the denominator away from zero.

Definition at line 265 of file rplus.hpp.

References conic::Cone< Slack, NonnegOrthantCone< Slack >, ConeType::SYMMETRIC >::eps, and conic::Cone< Slack, NonnegOrthantCone< Slack >, ConeType::SYMMETRIC >::M.

◆ trace_impl()

template<linalg::VectorContainer Slack>
constexpr auto conic::NonnegOrthantCone< Slack >::trace_impl ( const Slack &  x,
const Slack &  y 
) const
inlineconstexpr

trace

trace(x circ y) = sum(x_i y_i)

Parameters
xin K
yin K^*
Returns
x circ y

Definition at line 290 of file rplus.hpp.

References conic::NonnegOrthantCone< Slack >::circ_impl(), and conic::Cone< Slack, NonnegOrthantCone< Slack >, ConeType::SYMMETRIC >::M.

◆ w_impl()

template<linalg::VectorContainer Slack>
constexpr auto conic::NonnegOrthantCone< Slack >::w_impl ( const Slack &  x,
const Slack &  y 
) const
inlineconstexpr

◆ x0_impl()

template<linalg::VectorContainer Slack>
constexpr Slack conic::NonnegOrthantCone< Slack >::x0_impl ( ) const
inlineconstexpr

default interior point

Returns
x0

Definition at line 62 of file rplus.hpp.

References conic::Cone< Slack, NonnegOrthantCone< Slack >, ConeType::SYMMETRIC >::M.

Referenced by conic::NonnegOrthantCone< Slack >::y0_impl().

◆ y0_impl()

template<linalg::VectorContainer Slack>
constexpr Slack conic::NonnegOrthantCone< Slack >::y0_impl ( ) const
inlineconstexpr

default dual point

Returns
y0

Definition at line 73 of file rplus.hpp.

References conic::NonnegOrthantCone< Slack >::x0_impl().


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