akreon-convex
Typed convex modeling, conic canonicalization, and primal-dual optimization in C++26.
Loading...
Searching...
No Matches
pd_ipm_trace.hpp
Go to the documentation of this file.
1/*
2 * Copyright © 2025-2026 Akreon LLC
3 * SPDX-License-Identifier: Apache-2.0
4 */
5
6#pragma once
7
8#include <array>
9#include <cstddef>
10#include <cstdint>
11#include <type_traits>
12
15#include "akreon/linalg/linalg.hpp"
16
17namespace convex {
18
26template <linalg::Field T>
28 T mu{};
31 bool active{};
32};
33
35template <linalg::Field T, std::size_t NumCones>
42 constexpr void reset() { *this = {}; }
43
51 constexpr auto& cone(std::size_t idx) {
52 AK_ASSERT(idx < NumCones);
53 return cones[idx];
54 }
55 constexpr const auto& cone(std::size_t idx) const {
56 AK_ASSERT(idx < NumCones);
57 return cones[idx];
58 }
59
61 std::array<ConeStepTrace<T>, NumCones> cones{};
62};
63
70template <linalg::Field T, std::size_t NumCones>
72
78 constexpr void reset() { *this = {}; }
79
81 T mu{};
82 T alpha_x{};
83 T alpha_y{};
84 T rd_norm{};
85 T rp_norm{};
87 T pz_norm{};
89 T px_norm{};
90 T py_norm{};
91
94
96 linalg::NumericalEvent event{};
97 bool stalled{};
98};
99
106template <linalg::Field T, std::size_t NumCones>
108 constexpr void reset() { *this = {}; }
110 static constexpr std::size_t num_cones = NumCones;
111
117 constexpr bool full() const { return num_iters >= PD_IPM_STEPS; }
118
124 constexpr std::size_t size() const { return num_iters; }
125
133 constexpr auto& iter(std::size_t k) { return iters[k]; }
134 constexpr const auto& iter(std::size_t k) const { return iters[k]; }
135 constexpr auto& operator[](std::size_t k) { return iters[k]; }
136 constexpr const auto& operator[](std::size_t k) const { return iters[k]; }
137
143 constexpr auto& current() {
144 return iters[(num_iters < PD_IPM_STEPS) ? num_iters : (PD_IPM_STEPS - 1)];
145 }
146
152 constexpr const auto& current() const {
153 return iters[(num_iters < PD_IPM_STEPS) ? num_iters : (PD_IPM_STEPS - 1)];
154 }
155
161 constexpr bool commit_iter() {
162 if (num_iters >= PD_IPM_STEPS) return false;
163 ++num_iters;
164 return true;
165 }
166
168 std::array<PdIpmIterTrace<T, NumCones>, PD_IPM_STEPS>
170 std::size_t num_iters{};
171};
172
175
179template <linalg::Field T, std::size_t MaxConeDim>
181 std::array<T, MaxConeDim> xk{};
182 std::array<T, MaxConeDim> yk{};
183 std::array<T, MaxConeDim> rhs_c{};
184 std::array<T, MaxConeDim> px{};
185 std::array<T, MaxConeDim> py{};
186};
187
191template <linalg::Field T, std::size_t VarDim, std::size_t EqDim>
193 std::array<T, VarDim> pz{};
194 std::array<T, EqDim> pnu{};
195};
196
203template <linalg::Field T, std::size_t NumCones, std::size_t MaxConeDim,
204 std::size_t VarDim, std::size_t EqDim>
206 std::array<PdIpmConeSnapshot<T, MaxConeDim>, NumCones>
208 std::array<PdIpmConeSnapshot<T, MaxConeDim>, NumCones>
214};
215
217template <bool Enable, linalg::Field T, std::size_t NumCones,
218 std::size_t MaxConeDim, std::size_t VarDim, std::size_t EqDim>
219using PdIpmSnapshotStorage = std::conditional_t<
222
224template <linalg::Field T, typename CanonicalTraceT>
227
228} // namespace convex
SolverResult
SolverResult.
constexpr std::size_t dom_size_v
std::conditional_t< Enable, PdIpmFullIterSnapshot< T, NumCones, MaxConeDim, VarDim, EqDim >, EmptyPdIpmSnapshot > PdIpmSnapshotStorage
Alias for snap shot storage (full or empty)
#define PD_IPM_STEPS
(dakre) note increase constexpr steps / depth for # steps to increase here for constexpr usage
Per-cone scalar diagnostics for one predictor or corrector pass.
T pz_rhs_norm
||pz_rhs||_2 after this cone contribution.
T rhs_c_norm
||rhs_c||_2 in this cone block.
T mu
Local normalized duality gap for this cone.
bool active
Set true when this cone was touched/populated.
Empty object used when full snapshot tracing is disabled.
Cone snap shot at current iterate.
std::array< T, MaxConeDim > py
dual newton step
std::array< T, MaxConeDim > px
primal newton step
std::array< T, MaxConeDim > rhs_c
rhs at k in pred-corr
std::array< T, MaxConeDim > xk
primal var at k
std::array< T, MaxConeDim > yk
dual var at k
Optional full debug snapshot for one PD-IPM iteration.
std::array< PdIpmConeSnapshot< T, MaxConeDim >, NumCones > corrector_cones
corrector cone snap shot
std::array< PdIpmConeSnapshot< T, MaxConeDim >, NumCones > predictor_cones
predictor cone snap shot
PdIpmGlobalStepSnapshot< T, VarDim, EqDim > corrector_global
corrector global snap shot
PdIpmGlobalStepSnapshot< T, VarDim, EqDim > predictor_global
predicator global snap shot
Global snap shot at current iterate.
std::array< T, EqDim > pnu
equality newton step
std::array< T, VarDim > pz
dec var newton step
Outer PD-IPM iteration diagnostics.
T px_norm
||Newton step in x||_2.
PdIpmStepTrace< T, NumCones > corrector
corrector pd ipm trace
T rd_norm
||dual residual||_2.
T alpha_x
Max primal cone step.
T mu
public member vars
T py_norm
||Newton step in y||_2.
T alpha_y
Max dual cone step.
constexpr void reset()
reset
PdIpmStepTrace< T, NumCones > predictor
predictor pd ipm trace
bool stalled
tag whether or not its been stalled
T pnu_norm
||Newton step in nu||_2.
config::SolverResult tag
tag of solver result
T req_norm
||equality residual||_2.
T rp_norm
||cone/primal residual||_2.
T pz_norm
||Newton step in z||_2.
Predictor or corrector cone diagnostics for one outer iteration.
constexpr const auto & cone(std::size_t idx) const
std::array< ConeStepTrace< T >, NumCones > cones
public member vars
constexpr auto & cone(std::size_t idx)
cone
constexpr void reset()
reset
Fixed-capacity PD-IPM trace.
constexpr const auto & current() const
current
constexpr auto & iter(std::size_t k)
iter & relevent overrides
static constexpr std::size_t num_cones
static export of num cones
constexpr bool commit_iter()
commit iter will increment the number of iters
constexpr std::size_t size() const
size
std::array< PdIpmIterTrace< T, NumCones >, PD_IPM_STEPS > iters
public member vars
constexpr auto & operator[](std::size_t k)
constexpr bool full() const
full (num_iters >= PD_IPM_STEPS)
constexpr void reset()
constexpr auto & current()
current
constexpr const auto & operator[](std::size_t k) const
std::size_t num_iters
number of iterations
constexpr const auto & iter(std::size_t k) const