71 auto dict_elem = [&os](std::string_view name,
const auto &value) {
72 os << name <<
": " << value <<
'\n';
74#define EVAL(name) dict_elem(#name, evals.name)
75 EVAL(projecting_difference_constraints);
76 EVAL(projection_multipliers);
77 EVAL(proximal_gradient_step);
78 EVAL(inactive_indices_res_lna);
80 EVAL(objective_gradient);
81 EVAL(objective_and_gradient);
82 EVAL(objective_and_constraints);
83 EVAL(objective_gradient_and_constraints_gradient_product);
85 EVAL(constraints_gradient_product);
87 EVAL(constraints_jacobian);
88 EVAL(lagrangian_gradient);
89 EVAL(lagrangian_hessian_product);
90 EVAL(lagrangian_hessian);
91 EVAL(augmented_lagrangian_hessian_product);
92 EVAL(augmented_lagrangian_hessian);
93 EVAL(augmented_lagrangian);
94 EVAL(augmented_lagrangian_gradient);
95 EVAL(augmented_lagrangian_and_gradient);
140 using alpaqa::float_to_str;
142 const auto &kkterr = results.
error;
144 auto time_s = std::chrono::duration<double>(solstats.duration);
146 << solstats.evals <<
'\n'
147 <<
"solver: " << solstats.solver <<
'\n'
148 <<
"problem: " << results.
problem.
name <<
" (from "
150 <<
"status: " << (solstats.success ?
"\033[0;32m" :
"\033[0;31m")
151 << solstats.status <<
"\033[0m" <<
'\n'
154 <<
"ε = " << float_to_str(solstats.ε) <<
'\n'
155 <<
"δ = " << float_to_str(solstats.δ) <<
'\n'
156 <<
"final step size = " << float_to_str(solstats.γ) <<
'\n'
157 <<
"penalty norm = " << float_to_str(solstats.Σ) <<
'\n'
158 <<
"nonsmooth objective = " << float_to_str(solstats.h) <<
'\n'
159 <<
"smooth objective = " << float_to_str(obj) <<
'\n'
160 <<
"objective = " << float_to_str(obj + solstats.h) <<
'\n'
161 <<
"stationarity = " << float_to_str(kkterr.stationarity) <<
'\n'
162 <<
"violation = " << float_to_str(kkterr.constr_violation) <<
'\n'
163 <<
"complementarity = " << float_to_str(kkterr.complementarity) <<
'\n'
164 <<
"bounds violation = " << float_to_str(kkterr.bounds_violation) <<
'\n'
165 <<
"time: " << float_to_str(time_s.count(), 3) <<
" s\n"
166 <<
"outer iter: " << std::setw(6) << solstats.outer_iter <<
'\n'
167 <<
"iter: " << std::setw(6) << solstats.inner_iter <<
'\n'
169 for (
const auto &[key, value] : solstats.extra) {
170 auto print_key = [&os, k{key}](
const auto &v) {
171 os << k <<
": " << v <<
'\n';
174 [&print_key](
const auto &v) { print_key(v); },
175 [&print_key](real_t v) { print_key(float_to_str(v)); },
176 [&print_key](
bool v) { print_key(v ?
"yes" :
"no"); },
177 [](
const std::vector<real_t> &) {},
180 std::visit(print, value);