17template <
typename _Scalar>
18struct NonsmoothPenaltyL1Tpl : ConstraintSetTpl<_Scalar> {
19 using Scalar = _Scalar;
22 NonsmoothPenaltyL1Tpl() =
default;
23 NonsmoothPenaltyL1Tpl(
const NonsmoothPenaltyL1Tpl &) =
default;
24 NonsmoothPenaltyL1Tpl &operator=(
const NonsmoothPenaltyL1Tpl &) =
default;
25 NonsmoothPenaltyL1Tpl(NonsmoothPenaltyL1Tpl &&) =
default;
26 NonsmoothPenaltyL1Tpl &operator=(NonsmoothPenaltyL1Tpl &&) =
default;
28 using Base = ConstraintSetTpl<Scalar>;
29 using ActiveType =
typename Base::ActiveType;
32 Scalar
evaluate(
const ConstVectorRef &zproj)
const {
33 return zproj.template lpNorm<1>();
36 decltype(
auto) projection_impl(
const ConstVectorRef &z)
const {
37 return z.array().sign() *
38 (z.array().abs() - mu_).max(
static_cast<Scalar
>(0.));
41 void projection(
const ConstVectorRef &z, VectorRef zout)
const {
42 zout = projection_impl(z);
46 zout = z - projection_impl(z).matrix();
50 Eigen::Ref<ActiveType> out)
const {
51 out = z.array().abs() <= mu_;
55#ifdef PROXSUITE_NLP_ENABLE_TEMPLATE_INSTANTIATION
56extern template struct PROXSUITE_NLP_EXPLICIT_INSTANTIATION_DECLARATION_DLLAPI
57 NonsmoothPenaltyL1Tpl<context::Scalar>;
#define PROXSUITE_NLP_DYNAMIC_TYPEDEFS(Scalar)
void normalConeProjection(const ConstVectorRef &z, VectorRef zout) const
Compute projection of z onto the normal cone to the set. The default implementation is just .
void projection(const ConstVectorRef &z, VectorRef zout) const
Compute projection of variable z onto the constraint set.
void computeActiveSet(const ConstVectorRef &z, Eigen::Ref< ActiveType > out) const
Scalar evaluate(const ConstVectorRef &zproj) const