|
akreon-convex
Typed convex modeling, conic canonicalization, and primal-dual optimization in C++26.
|
CRTP base for convex atoms. More...
#include <atom.hpp>
Public Types | |
| 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 | 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. | |
| template<AtomType Type, conic::BuilderLike Builder> | |
| constexpr auto | canonicalize (const Builder &builder) const |
| Dispatch canonicalization to the derived atom. | |
| constexpr const Derived & | self () const |
| Return this object as the CRTP-derived atom type. | |
Public Attributes | |
| ChildrenT | children |
| Tuple of normalized child atoms. | |
Static Public Attributes | |
| static constexpr std::size_t | N = dom_size_v<Domain> |
| Domain dimension. | |
| static constexpr std::size_t | M = dom_size_v<Codomain> |
| Codomain dimension. | |
| static constexpr CurvatureType | Curvature = meta_curv_v<Meta> |
| Curvature declared by atom metadata. | |
| static constexpr VarType | DomSign = dom_vartype_v<Domain> |
| Domain sign declared by atom metadata. | |
| static constexpr VarType | CodomSign = dom_vartype_v<Codomain> |
| Codomain sign declared by atom metadata. | |
CRTP base for convex atoms.
The base stores normalized child atoms and enforces domain, codomain, curvature, and DCP composition rules shared by functions, sets, intersections, and sums.
| using convex::Atom< Meta, Derived, Cs >::ChildrenT = std::tuple<atom_decay_t<Cs>...> |
| using convex::Atom< Meta, Derived, Cs >::Codomain = meta_codom_t<Meta> |
| using convex::Atom< Meta, Derived, Cs >::Domain = meta_dom_t<Meta> |
| using convex::Atom< Meta, Derived, Cs >::PointT = dom_point_t<Domain> |
| using convex::Atom< Meta, Derived, Cs >::T = dom_type_t<Domain> |
|
inlineexplicitconstexpr |
Construct a leaf atom with no children.
Definition at line 48 of file atom.hpp.
References convex::Atom< Meta, Derived, Cs >::validate_domain().
|
inlineexplicitconstexpr |
Construct an atom with normalized children.
| child_in | tuple of child atoms |
Definition at line 55 of file atom.hpp.
References convex::Atom< Meta, Derived, Cs >::validate_domain().
|
inlineconstexpr |
Dispatch canonicalization to the derived atom.
| Type | requested atom canonicalization target |
| Builder | canonical-form builder type |
| builder | current canonical-form builder |
Definition at line 227 of file atom.hpp.
References convex::dom_size_v, and convex::Atom< Meta, Derived, Cs >::self().
Return this object as the CRTP-derived atom type.
Definition at line 236 of file atom.hpp.
References convex::dom_size_v.
Referenced by convex::Atom< Meta, Derived, Cs >::canonicalize(), convex::Atom< Meta, Derived, Cs >::validate_domain(), and convex::Atom< Meta, Derived, Cs >::validate_fn_domain().
|
inlineconstexpr |
Validate child domains, signs, curvature, and composition rules.
(dakre) TODO add in minkowski sum
Definition at line 120 of file atom.hpp.
References convex::AFFINE, convex::Atom< Meta, Derived, Cs >::children, convex::CONCAVE, convex::CONVEX, convex::dom_size_v, convex::dom_vartype_v, convex::FREE, convex::is_add_type_v, convex::is_cap_type_v, convex::is_fn_type_v, convex::is_set_type_v, convex::is_var_type_v, convex::meta_curv_v, convex::Atom< Meta, Derived, Cs >::N, convex::NEG, convex::NONNEG, convex::NONPOS, convex::POS, convex::PSD, convex::Atom< Meta, Derived, Cs >::self(), and convex::Atom< Meta, Derived, Cs >::validate_fn_domain().
Referenced by convex::Atom< Meta, Derived, Cs >::Atom(), and convex::Atom< Meta, Derived, Cs >::Atom().
|
inlineconstexpr |
Validate DCP composition for a function child.
| child | child atom whose codomain feeds this function's domain |
Definition at line 66 of file atom.hpp.
References convex::AFFINE, convex::CONCAVE, convex::CONVEX, convex::dom_size_v, convex::meta_curv_v, convex::NONDEC, convex::NONINC, convex::Atom< Meta, Derived, Cs >::self(), and convex::UNKNOWN.
Referenced by convex::Atom< Meta, Derived, Cs >::validate_domain().
| ChildrenT convex::Atom< Meta, Derived, Cs >::children |
Tuple of normalized child atoms.
Definition at line 240 of file atom.hpp.
Referenced by convex::LMI< Meta, Child, MatIn >::canonicalize(), convex::AffineSubspace< Meta, Child >::canonicalize_set(), convex::Ellipsoid< Meta, Child >::canonicalize_set(), convex::Halfspace< Meta, Child, Type >::canonicalize_set(), convex::Hyperplane< Meta, Child >::canonicalize_set(), convex::NormBall< Meta, Child, Type >::canonicalize_set(), convex::Polyhedron< Meta, Child >::canonicalize_set(), convex::Polyhedron< Meta, Child >::contains_impl(), convex::Polyhedron< Meta, Child >::is_well_formed(), convex::Ellipsoid< Meta, Child >::transform_impl(), convex::NormBall< Meta, Child, Type >::transform_impl(), convex::Polyhedron< Meta, Child >::transform_impl(), convex::AffineSubspace< Meta, Child >::transform_impl(), and convex::Atom< Meta, Derived, Cs >::validate_domain().
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
Codomain dimension.
Definition at line 37 of file atom.hpp.
Referenced by convex::LMI< Meta, Child, MatIn >::canonicalize(), convex::Polyhedron< Meta, Child >::contains_impl(), and convex::Polyhedron< Meta, Child >::is_well_formed().
|
staticconstexpr |
Domain dimension.
Definition at line 35 of file atom.hpp.
Referenced by convex::LMI< Meta, Child, MatIn >::canonicalize(), convex::AffineSubspace< Meta, Child >::canonicalize_set(), convex::Ellipsoid< Meta, Child >::canonicalize_set(), convex::Halfspace< Meta, Child, Type >::canonicalize_set(), convex::Hyperplane< Meta, Child >::canonicalize_set(), convex::NormBall< Meta, Child, Type >::canonicalize_set(), convex::Polyhedron< Meta, Child >::canonicalize_set(), convex::LMI< Meta, Child, MatIn >::contains_impl(), convex::LMI< Meta, Child, MatIn >::is_equal_impl(), convex::AffineSubspace< Meta, Child >::is_well_formed(), convex::NormBall< Meta, Child, Type >::transform_impl(), and convex::Atom< Meta, Derived, Cs >::validate_domain().