Efficient Algorithm For Projection Onto A Convex Set - MathOverflow most recent 30 from http://mathoverflow.net2013-06-19T05:57:12Zhttp://mathoverflow.net/feeds/question/100652http://www.creativecommons.org/licenses/by-nc/2.5/rdfhttp://mathoverflow.net/questions/100652/efficient-algorithm-for-projection-onto-a-convex-setEfficient Algorithm For Projection Onto A Convex SetAnonSubmitter852012-06-26T01:17:32Z2012-06-26T17:25:57Z
<p>Given $\mathbf{x} \in \mathbb{R}^n$ and $\tau$ a scalar, I would like to solve the following Euclidean projection problem:</p>
<p><code>$\underset{\mathbf{p}}{\mathrm{argmin}} \; \|\mathbf{p}-\mathbf{x}\|_2
\;\;
\mathrm{s.t.}
\;\;
\displaystyle \sum_{i}{
\left \| \left [
\begin{array}{c}
\mathbf{f}_i^\mathrm{T} \\
\mathbf{g}_i^\mathrm{T}
\end{array}
\right] \cdot \mathbf{p} \right \|_2 }
\leq \tau
$</code>,</p>
<p>where $\mathbf{f}_i,\mathbf{g}_i \in \mathbb{R}^n$.</p>
<p>The above is a convex function over a convex set and as such should have a unique solution. Moreover, we can find the upper bound on the summation as follows:</p>
<p><code>$\displaystyle \sum_{i}{
\left \| \left [
\begin{array}{c}
\mathbf{f}_i^\mathrm{T} \\
\mathbf{g}_i^\mathrm{T}
\end{array}
\right] \cdot \mathbf{p} \right \|_2 }
\leq
\|\mathbf{p}\|_2 \cdot \sum_i \sigma_i
$</code>,</p>
<p>where $\sigma_i$ is the operator norm of the $2 \times n$ matrix $[\mathbf{f}_i \;\; \mathbf{g}_i]^{\mathrm{T}}$.</p>
<p>I have been using CVX to solve the above, but it's just too slow in its current form. I have not figured out how to make use of them, but the operator norms are easily found before-hand. Can anyone suggest a re-formulation of the above or an algorithm that is tailored to these types of problems?</p>
http://mathoverflow.net/questions/100652/efficient-algorithm-for-projection-onto-a-convex-set/100654#100654Answer by Igor Rivin for Efficient Algorithm For Projection Onto A Convex SetIgor Rivin2012-06-26T01:59:27Z2012-06-26T01:59:27Z<p>Check out <a href="http://convexoptimization.com/TOOLS/0976401304.pdf" rel="nofollow">Dattorro's convex optimization book</a>, page 748. </p>
http://mathoverflow.net/questions/100652/efficient-algorithm-for-projection-onto-a-convex-set/100700#100700Answer by p.s. for Efficient Algorithm For Projection Onto A Convex Setp.s.2012-06-26T17:03:30Z2012-06-26T17:03:30Z<p>It's easier to just write $ A_i = [f_i \ g_i]^T$ so then the problem is:</p>
<p>$$
\min_p \frac{1}{2}\|x-p\|^2 \quad \mbox{s.t. } \sum_i \|A_ip\| \le \tau
$$</p>
<p>Forming the Lagrangian and minimizing shows that the optimal $p^*$ satisfies:</p>
<p>$$
p^* = x - \lambda^* \sum_i A_i^T \frac{ A_i p^* }{ \|A_i p^* \|}
$$</p>
<p>So one obvious thing to try is just iterating this equation. We can solve for $\lambda^*$ with a 1-dimensional root-finding procedure since we know that $\sum_i \|A_i p^*\| = \tau$ (assuming that $x$ is not already in the interior of the feasible region). In summary, we iterate:</p>
<p>$$
d_n = \sum_i A_i^T \frac{ A_i p_{n-1} }{ \|A_i p_{n-1} \|}
$$
$$
p_n = x - \lambda_n d_n,
\mbox{ where } \lambda_n \mbox{ is given by } \sum_i \|A_i(x - \lambda_n d_n)\| = \tau
$$
Of course, you need to be careful not to divide zero by zero in case $A_i p_n=0$. Unfortunately, I don't know if this procedure converges, but it might be sufficient for your purposes.</p>
http://mathoverflow.net/questions/100652/efficient-algorithm-for-projection-onto-a-convex-set/100703#100703Answer by Brian Borchers for Efficient Algorithm For Projection Onto A Convex SetBrian Borchers2012-06-26T17:25:57Z2012-06-26T17:25:57Z<p>You haven't told us anything about the size of your problem instances. How many terms are there in the sum of norms? What is $n$? </p>
<p>Your problem is an example of a "sum of norms" optimization problem. Searching with Google Scholar will lead you to published research on this class of problems. </p>
<p>CVX is using a standard approach for solving this problem by reformulating it as a second order cone programming (SOCP) problem and then using a primal-dual interior point method (SeDuMi's or SDPT3) to solve the resulting SOCP. For small problem instances, this should be a very robust and reasonably fast approach to solving the problem, but there are faster primal-dual codes for SOCP available (both CPLEX and MOSEK can be used to solve SOCP's.) You could ask CVX to extract the SOCP problem and export it in SeDuMi format and then try to use another solver on the SOCP. </p>
<p>You might also look at first order methods to solve the SOCP- For example, I believe that TFOCS could be used to solve the problem. </p>