|
akreon-convex
Typed convex modeling, conic canonicalization, and primal-dual optimization in C++26.
|
forward declaration - log sum exp fn More...
#include <log_sum_exp.hpp>
Public Types | |
| using | ConvexBase = Atom< Meta, LogSumExp< Meta, Child >, Child > |
| bring into scope the convex fn alias / helpers | |
Public Types inherited from convex::Atom< Meta, LogSumExp< Meta, Child >, Child > | |
| 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 | LogSumExp (const Child &child_in) |
| CTOR. | |
| constexpr | LogSumExp (const Child &child_in, const affine::AffineMap< LiftedVarMat< T > > &map_in) |
| CTOR. | |
| constexpr MonotonicityType | monotonicity () const |
| mono | |
| constexpr T | operator() (const PointT &x) const |
| eval via operator overload | |
| constexpr T | eval (const PointT &x) const |
| eval impl | |
| template<T Scalar> | |
| constexpr auto | mul () const |
| mul | |
| constexpr auto | add (T beta) const |
| add | |
| template<AtomType Type, conic::BuilderLike Builder> | |
| constexpr auto | canonicalize_impl (const Builder &builder) const |
| canonicalize impl | |
Public Member Functions inherited from convex::Atom< Meta, LogSumExp< Meta, Child >, Child > | |
| 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. | |
| constexpr auto | canonicalize (const Builder &builder) const |
| Dispatch canonicalization to the derived atom. | |
| constexpr const LogSumExp< Meta, Child > & | self () const |
| Return this object as the CRTP-derived atom type. | |
Public Attributes | |
| affine::AffineMap< LiftedVarMat< T > > | lift_map |
| member vars | |
| const int | idx {-2} |
Public Attributes inherited from convex::Atom< Meta, LogSumExp< Meta, Child >, Child > | |
| ChildrenT | children |
| Tuple of normalized child atoms. | |
Static Public Attributes | |
| static constexpr CurvatureType | Tag = meta_curv_v<Meta> |
| curvature tag | |
Static Public Attributes inherited from convex::Atom< Meta, LogSumExp< Meta, Child >, Child > | |
| static constexpr std::size_t | N |
| Domain dimension. | |
| static constexpr std::size_t | M |
| Codomain dimension. | |
| static constexpr CurvatureType | Curvature |
| Curvature declared by atom metadata. | |
| static constexpr VarType | DomSign |
| Domain sign declared by atom metadata. | |
| static constexpr VarType | CodomSign |
| Codomain sign declared by atom metadata. | |
forward declaration - log sum exp fn
log sum exp = smooth max function
lse(x) = log(sum_i^n(e^{x_i})) which is a smooth mapping from R^n to R
Definition at line 50 of file log_sum_exp.hpp.
bring into scope the convex fn alias / helpers
Definition at line 52 of file log_sum_exp.hpp.
|
inlineexplicitconstexpr |
|
inlineexplicitconstexpr |
|
inlineconstexpr |
add
| scalar |
Definition at line 151 of file log_sum_exp.hpp.
References convex::Atom< Meta, LogSumExp< Meta, Child >, Child >::children, convex::dom_size_v, and convex::LogSumExp< Meta, Child >::lift_map.
|
inlineconstexpr |
canonicalize impl
(1) f(x) = log(sum_i(exp(x_i))) K = { (x, t) | log(sum_i(exp(x_i))) <= t } K = { (x, t) | sum_i(exp(x_i)) <= exp(t) } K = { (x, t) | sum_i(exp(x_i)) / exp(t) <= 1 } K = { (x, t) | sum_i(exp(x_i - t)) <= 1 } K = { (x, t, s) | exp(x_i - t) <= s_i, 1^T s <= 1 }
Exp cone : { (u, v, w) | v exp(u/v) <= w, v > 0 } union { (u, 0, w) | u <= 0, w >= 0 }
let u = x_i - t, v = 1, w = s_i... n exp cones 0 <= 1 - 1^T s ... 1 nonneg orthant cone
[ A -1 0 ] [ x; t; s ] + [ b; 1; 0 | 1 ] -> (x_i - t, 1, s_i) + rplus [ 0 0 0 ]
[ 0 0 -1^T ]
(2) -f(x) = -log(sum_i(exp(x_i))) K = { (x, t) | sum_i(exp(x_i + t)) <= 1 } K = { (x, t, s) | exp(x_i + t) <= s_i, 1^T s <= 1 }
let u = x_i + t, v = 1, w = s_i... n exp cones 0 <= 1 - 1^T s ... 1 nonneg orthant cone
[ A 1 0 ] [ x; t; s ] + [ b; 1; 0 | 1 ] -> (x_i + t, 1, s_i) + rplus [ 0 0 0 ]
[ 0 0 -1^T ]
| cone | block builder |
Definition at line 197 of file log_sum_exp.hpp.
References convex::Atom< Meta, LogSumExp< Meta, Child >, Child >::children, convex::CONVEX, convex::dom_size_v, convex::LogSumExp< Meta, Child >::idx, convex::LogSumExp< Meta, Child >::lift_map, convex::Atom< Meta, LogSumExp< Meta, Child >, Child >::N, and convex::LogSumExp< Meta, Child >::Tag.
eval impl
| point | x in dom f |
Definition at line 105 of file log_sum_exp.hpp.
References convex::CONVEX, convex::dom_size_v, and convex::LogSumExp< Meta, Child >::Tag.
Referenced by convex::LogSumExp< Meta, Child >::operator()().
|
inlineconstexpr |
mono
Definition at line 84 of file log_sum_exp.hpp.
References convex::CONVEX, convex::NONDEC, convex::NONINC, and convex::LogSumExp< Meta, Child >::Tag.
|
inlineconstexpr |
mul
Definition at line 122 of file log_sum_exp.hpp.
References convex::Atom< Meta, LogSumExp< Meta, Child >, Child >::children, convex::CONCAVE, convex::dom_size_v, convex::LogSumExp< Meta, Child >::lift_map, and convex::LogSumExp< Meta, Child >::Tag.
|
inlineconstexpr |
eval via operator overload
| point | x |
Definition at line 96 of file log_sum_exp.hpp.
References convex::LogSumExp< Meta, Child >::eval().
Definition at line 239 of file log_sum_exp.hpp.
Referenced by convex::LogSumExp< Meta, Child >::canonicalize_impl().
| affine::AffineMap<LiftedVarMat<T> > convex::LogSumExp< Meta, Child >::lift_map |
member vars
Definition at line 238 of file log_sum_exp.hpp.
Referenced by convex::LogSumExp< Meta, Child >::add(), convex::LogSumExp< Meta, Child >::canonicalize_impl(), and convex::LogSumExp< Meta, Child >::mul().
|
staticconstexpr |
curvature tag
Definition at line 58 of file log_sum_exp.hpp.
Referenced by convex::LogSumExp< Meta, Child >::canonicalize_impl(), convex::LogSumExp< Meta, Child >::eval(), convex::LogSumExp< Meta, Child >::monotonicity(), and convex::LogSumExp< Meta, Child >::mul().