A MATLAB toolbox for building first-order solvers for convex models.
Matlab TeX C
Permalink
Failed to load latest commit information.
@double Initial commit Oct 17, 2013
@single Initial commit Oct 17, 2013
@tfocs_tuple Initial commit Oct 17, 2013
examples Increase tolerance so it passes tests Dec 11, 2015
mexFiles Adding Mac compiled mex file Apr 17, 2015
private Fixed bug with nargin affecting R2016b Nov 18, 2016
.gitignore Updating .gitignore Oct 18, 2013
CHANGELOG Renaming OrderedLASSO to SLOPE and prox_Ol1.m to prox_Sl1.m Oct 30, 2013
Contents.m Renaming OrderedLASSO to SLOPE and prox_Ol1.m to prox_Sl1.m Oct 30, 2013
LICENSE Initial commit Oct 17, 2013
README Added the user guide to the TFOCS distribution itself, so that the Gi… Oct 17, 2013
README.md Update README URLs based on HTTP redirects Jan 6, 2016
continuation.m Some major changes to fix a bug and change behavior; most of the changes Dec 21, 2013
linop_TV.m Fix linop_TV to use p=1 not p=2 for norms Nov 11, 2015
linop_TV3D.m Initial commit Oct 17, 2013
linop_adjoint.m Initial commit Oct 17, 2013
linop_compose.m A few comments added to file Jun 21, 2016
linop_dot.m Initial commit Oct 17, 2013
linop_explicit.m Adding testing function for linear operators Jun 21, 2016
linop_fft.m Initial commit Oct 17, 2013
linop_handles.m Initial commit Oct 17, 2013
linop_horzcat.m Adding new catenation functions for linear operators Jun 21, 2016
linop_matrix.m Initial commit Oct 17, 2013
linop_normest.m Initial commit Oct 17, 2013
linop_reshape.m Initial commit Oct 17, 2013
linop_scale.m Allow linop_scale to do diagonal scaling Jul 20, 2016
linop_spot.m Initial commit Oct 17, 2013
linop_subsample.m Initial commit Oct 17, 2013
linop_test.m Initial commit Oct 17, 2013
linop_vec.m Initial commit Oct 17, 2013
linop_vertcat.m Adding new catenation functions for linear operators Jun 21, 2016
proj_0.m proj_0 supports weighted projection, and implicit operators Jun 20, 2014
proj_Rn.m Initial commit Oct 17, 2013
proj_Rplus.m Initial commit Oct 17, 2013
proj_affine.m Initial commit Oct 17, 2013
proj_box.m Initial commit Oct 17, 2013
proj_boxAffine.m Initial commit Oct 17, 2013
proj_conic.m Initial commit Oct 17, 2013
proj_l1.m Added missing semicolon to proj_l1 Feb 21, 2014
proj_l1l2.m Adding proj_l1l2 for block constraints; fixing bugs in prox_l1l2.m Apr 17, 2015
proj_l2.m Edit proj_l2.m to allow arbitrary scaling, e.g., { X : ||AX-b|| <= eps } Jun 16, 2014
proj_l2group.m Initial commit Oct 17, 2013
proj_linf.m Initial commit Oct 17, 2013
proj_linfl2.m Modify proj_linfl2 to be octave-compatible Jun 16, 2014
proj_max.m Initial commit Oct 17, 2013
proj_maxEig.m Using safe_eig() code to prevent rare eigenvalue decomp. bug Jul 14, 2015
proj_nuclear.m Allowing proj_nuclear to take vector input as long as size variable is Jan 30, 2014
proj_psd.m Using safe_eig() code to prevent rare eigenvalue decomp. bug Jul 14, 2015
proj_psdUTrace.m Using safe_eig() code to prevent rare eigenvalue decomp. bug Jul 14, 2015
proj_simplex.m Bug fixes in simplex and new prox_diag code Jun 21, 2016
proj_singleAffine.m Initial commit Oct 17, 2013
proj_spectral.m Using safe_eig() code to prevent rare eigenvalue decomp. bug Jul 14, 2015
prox_0.m Initial commit Oct 17, 2013
prox_Sl1.m Renaming OrderedLASSO to SLOPE and prox_Ol1.m to prox_Sl1.m Oct 30, 2013
prox_boxDual.m Fix bug, noticed by Carl Nettelblad, in prox_boxDual Mar 23, 2016
prox_diag.m Bug fixes in simplex and new prox_diag code Jun 21, 2016
prox_dualize.m Initial commit Oct 17, 2013
prox_hinge.m Initial commit Oct 17, 2013
prox_hingeDual.m Initial commit Oct 17, 2013
prox_l1.m Change behavior of prox_l1 Sep 30, 2014
prox_l1_deadzone.m Adding l1 with deadzone Mar 3, 2016
prox_l1l2.m Fix bug with || instead of && Dec 11, 2015
prox_l1linf.m Making prox-l1linf considerably faster for large dimensions Dec 13, 2013
prox_l1pos.m Initial commit Oct 17, 2013
prox_l2.m Adding info about l2^2 norm (i.e., see smooth_quad) Oct 17, 2014
prox_linf.m Initial commit Oct 17, 2013
prox_max.m Initial commit Oct 17, 2013
prox_maxEig.m Using safe_eig() code to prevent rare eigenvalue decomp. bug Jul 14, 2015
prox_nuclear.m Fixed major bug with PROPACK version; minor changes to randomized ver… Mar 29, 2015
prox_scale.m Major update to prox_scale Sep 30, 2014
prox_shift.m Adding prox_shift for adding <c,x> to objective of prox Jul 1, 2015
prox_spectral.m Using safe_eig() code to prevent rare eigenvalue decomp. bug Jul 14, 2015
prox_trace.m Using safe_eig() code to prevent rare eigenvalue decomp. bug Jul 14, 2015
randomizedSVD.m Fix bug in tfocs_iterate for stopping conditions; update prox_nuclear.m Oct 29, 2014
smooth_constant.m Initial commit Oct 17, 2013
smooth_entropy.m Initial commit Oct 17, 2013
smooth_handles.m Initial commit Oct 17, 2013
smooth_huber.m Fix smooth_huber to deal with complex numbers Jan 20, 2015
smooth_linear.m Initial commit Oct 17, 2013
smooth_logLLogistic.m Initial commit Oct 17, 2013
smooth_logLPoisson.m Initial commit Oct 17, 2013
smooth_logdet.m Using safe_eig() code to prevent rare eigenvalue decomp. bug Jul 14, 2015
smooth_logsumexp.m Modifying smooth_logsumexp.m to allow scaling and to be numerically Oct 24, 2013
smooth_quad.m Now smooth_quad should work with multiple columns Jan 14, 2016
solver_L1RLS.m Adding support for non-negative constraints Jul 17, 2014
solver_LASSO.m Adding support for non-negative constraints Jul 17, 2014
solver_SLOPE.m Renaming OrderedLASSO to SLOPE and prox_Ol1.m to prox_Sl1.m Oct 30, 2013
solver_TraceLS.m Initial commit Oct 17, 2013
solver_psdComp.m Initial commit Oct 17, 2013
solver_psdCompConstrainedTrace.m Initial commit Oct 17, 2013
solver_sBP.m Initial commit Oct 17, 2013
solver_sBPDN.m Initial commit Oct 17, 2013
solver_sBPDN_W.m Allowing sBPDN_W solver to take optional non-negativity or box Jan 30, 2014
solver_sBPDN_WW.m Fixed documentation Apr 12, 2016
solver_sDantzig.m Initial commit Oct 17, 2013
solver_sDantzig_W.m Initial commit Oct 17, 2013
solver_sLMI.m Initial commit Oct 17, 2013
solver_sLP.m Use CG algorithm if available; minor updates to LP/SDP versions Dec 8, 2015
solver_sLP_box.m Use CG algorithm if available; minor updates to LP/SDP versions Dec 8, 2015
solver_sNuclearBP.m Initial commit Oct 17, 2013
solver_sNuclearBPDN.m Initial commit Oct 17, 2013
solver_sSDP.m Use CG algorithm if available; minor updates to LP/SDP versions Dec 8, 2015
test_nonsmooth.m Initial commit Oct 17, 2013
test_proxPair.m Make it easier to scale by -I for prox Mar 23, 2016
test_smooth.m Initial commit Oct 17, 2013
tfocs.m Fixed bug with nargin affecting R2016b Nov 18, 2016
tfocs_AT.m Fixed bug with nargin affecting R2016b Nov 18, 2016
tfocs_GRA.m Fixed bug with nargin affecting R2016b Nov 18, 2016
tfocs_LLM.m Fixed bug with nargin affecting R2016b Nov 18, 2016
tfocs_N07.m Fixed bug with nargin affecting R2016b Nov 18, 2016
tfocs_N83.m Fixed bug with nargin affecting R2016b Nov 18, 2016
tfocs_SCD.m Correcting documentation Mar 23, 2016
tfocs_TS.m Fixed bug with nargin affecting R2016b Nov 18, 2016
tfocs_normsq.m Initial commit Oct 17, 2013
tfocs_version.m Updating version to 1.4 in prep for release Dec 11, 2015
tfocs_where.m Initial commit Oct 17, 2013
tfunc_scale.m Initial commit Oct 17, 2013
tfunc_sum.m Initial commit Oct 17, 2013
userguide.pdf fixing bug with minus sign in user guide Oct 16, 2014
userguide.tex fixing bug with minus sign in user guide Oct 16, 2014

README.md

TFOCS: Templates for First-Order Conic Solvers

TFOCS (pronounced tee-fox) provides a set of Matlab templates, or building blocks, that can be used to construct efficient, customized sovlers for a variety of convex models, including in particular those employed in sparse recovery applications. It was conceived and written by Stephen Becker, Emmanuel J. Candès and Michael Grant.

More information about the software can be found in the paper and the users' guide.

TFOCS is jointly owned by CVX Research, Inc. and Caltech. As of October 2, 2013, it has been made freely available for both academic and commercial use under a BSD 3-Clause license, subject to requirements of attribution and non-endorsement, and a disclaimer of warranty contained therein.

Downloading

The source code for TFOCS is now hosted on GitHub. Feel free to visit the GitHub page to browse the code or clone the repository. Direct download links for the latest versions are provided on the Releases page. The packages include the main program files, the documentation, the paper, and a number of examples and demos.

Documentation / Demos

The users' guide is included with the distribution, and available separately here.
Click here for a list of the functions included with TFOCS.
Several demonstrations are available here. Each demonstration includes the source code and data files needed to reproduce the results.

Paper

Templates for convex cone problems ith applications to sparse signal recovery
by S. Becker, E. Candès, and M. Grant.
Stanford University Technical Report, September 2010.
Published in Mathematical Programming Computation, Volume 3, Number 3, August 2011.

In the spirit of reproducible research, we provide the source code and data (ZIP file, 9.7MB) used for the examples in the paper. You must have the TFOCS package installed to run these examples.

Abstract

This paper develops a general framework for solving a variety of convex cone problems that frequently arise in signal processing, machine learning, statistics, and other fields. The approach works as follows: first, determine a conic formulation of the problem; second, determine its dual; third, apply smoothing; and fourth, solve using an optimal first-order method. A merit of this approach is its flexibility: for example, all compressed sensing problems can be solved via this approach. These include models with objective functionals such as the total-variation norm, ||Wx||_1 where W is arbitrary, or a combination thereof. In addition, the paper also introduces a number of technical contributions such as a novel continuation scheme, a novel approach for controlling the step size, and some new results showing that the smooth and unsmoothed problems are sometimes formally equivalent. Combined with our framework, these lead to novel, stable and computationally efficient algorithms. For instance, our general implementation is competitive with state-of-the-art methods for solving intensively studied problems such as the LASSO. Further, numerical experiments show that one can solve the Dantzig selector problem, for which no efficient large-scale solvers exist, in a few hundred iterations. Finally, the paper is accompanied with a software release. This software is not a single, monolithic solver; rather, it is a suite of programs and routines designed to serve as building blocks for constructing complete algorithms.

Support

Please note that the authors of TFOCS generally cannot offer direct email assistance. We hope that the resources we have assembled here will address most users’ issues. If the documentation and demos are insufficient, please consider the following alternatives:

Community-driven support

For TFOCS-specific usage questions that are not caused by bugs, please consider posing your question on the CVX Forum, a free question and answer forum modeled in the style of StackExchange family of sites. As the name implies, the forum is also used for CVX, but TFOCS users are welcome to ask questions on this forum as well. The authors of TFOCS do visit this forum regularly. If you are an experienced TFOCS user, we would ask you to join us and offer answers to other TFOCS users’ questions.

For more general questions about optimization that are not specific to TFOCS, the CVX Forum is not the appropriate venue. Instead, we invite you to consider two other online forums: the Computational Science Stack Exchange (CompSci SE) and OR Exchange. CompSci SE covers a variety of computational science topics, including convex optimization. OR-Exchange is a Q&A site sponsored by INFORMS, an international society for professionals in operations research, management science, and analytics. Both communities include a number of active optimization experts.

Submitting bug reports

If you encounter a bug in TFOCS, or an error in the documentation, please submit an report on the GitHub issue tracker for TFOCS. In order for us to effectively evaluate a bug report, we will need the following information:

  • The output of the tfocs_version command, which provides information about your operating system, your MATLAB version, and your TFOCS version. Just copy and paste this information from your MATLAB command window into your report.
  • A description of the error itself. If TFOCS provided the error message, please copy the full text of the error output into the report.
  • If it is at all possible, please provide us with a brief code sample and supporting data that reproduces the error. If that cannot be accomplished, please provide a detailed description of the circumstances under which the error occurred.

Mailing list

If you wish to be notified of new TFOCS releases, please join the google group mailing list. Note that this mailing list is for announcements only.

Contract support

For more in-depth support, you may purchase a support contract from one or more of the authors. Please contact tfocs@cvxr.com for more information.