You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently StructuredOptimization.jl supports only *proximal gradient algorithms* (i.e., *forward-backward splitting* base), which require specific properties of the nonsmooth functions and constraint to be applicable. In particular, the nonsmooth functions must have an *efficiently computable proximal mapping*.
137
+
Currently StructuredOptimization.jl supports only *proximal gradient algorithms* (i.e., *forward-backward splitting* based), which require specific properties of the nonsmooth functions and constraint to be applicable. In particular, the nonsmooth function $g$ must have an *efficiently computable proximal mapping*:
(we affectionately say such a function is prox-able).
144
+
139
145
If we express the nonsmooth function $g$ as the composition of
140
-
a function $\tilde{g}$ with a linear operator $A$:
146
+
a prox-able function $\tilde{g}$ with a linear operator $A$:
141
147
142
148
```math
143
149
g(\mathbf{x}) =
144
150
\tilde{g}(A \mathbf{x})
145
151
```
146
152
147
-
then the proximal mapping of $g$ is efficiently computable if either of the following hold:
153
+
then $g$ is also `prox`-able if $A$ is a *tight frame*, namely it satisfies $A A^* = \mu Id$, where $\mu \geq 0$, $A^*$ is the adjoint of $A$, and $Id$ is the identity operator.
148
154
149
-
1. Operator $A$ is a *tight frame*, namely it satisfies $A A^* = \mu Id$, where $\mu \geq 0$, $A^*$ is the adjoint of $A$, and $Id$ is the identity operator.
155
+
More generally, a *separable sum*of prox-able functions $h_j$ is also prox-able:
150
156
151
-
2. Function $g$ is a *separable sum* $g(\mathbf{x}) = \sum_j h_j (B_j \mathbf{x}_j)$, where $\mathbf{x}_j$ are non-overlapping slices of $\mathbf{x}$, and $B_j$ are tight frames.
157
+
```math
158
+
g(\mathbf{x}) =
159
+
\sum_j h_j (B_j \mathbf{x}_j)
160
+
```
161
+
162
+
where $\mathbf{x}_j$ are non-overlapping slices of $\mathbf{x}$, and $B_j$ are tight frames.
152
163
153
164
Let us analyze these rules with a series of examples.
154
165
The LASSO example above satisfy the first rule:
@@ -157,7 +168,7 @@ The LASSO example above satisfy the first rule:
157
168
julia>@minimizels( A*x - y ) + λ*norm(x, 1)
158
169
```
159
170
160
-
since the nonsmooth function $\lambda \| \cdot \|_1$ is not composed with any operator (or equivalently is composed with $Id$ which is a tight frame).
171
+
since the nonsmooth function $\lambda \| \cdot \|_1$ is separable and not composed with any operator (or equivalently is composed with $Id$ which is a tight frame).
161
172
Also the following problem would be accepted by StructuredOptimization.jl:
162
173
163
174
```julia
@@ -170,21 +181,20 @@ since the discrete cosine transform (DCT) is orthogonal and is therefore a tight
170
181
julia>@minimizels( A*x - y ) + λ*norm(x, 1) st x >=1.0
171
182
```
172
183
173
-
cannot be solved through proximal gradient algorithms, since the second rule would be violated.
174
-
Here the constraint would be converted into an indicator function and the nonsmooth function $g$ can be written as the sum:
184
+
cannot be solved by this package. Here the constraint would be converted into an indicator function and the nonsmooth function $g$ can be written as the sum:
0 commit comments