Tim Mitchell


GRANSO: GRadient-based Algorithm for Non-Smooth Optimization

GRANSO is an optimization package implemented in MATLAB, intended to be efficient for constrained nonsmooth optimization problems, without any special structure or assumptions imposed on the objective or constraint functions. It can handle problems involving functions that are any or all of the following: smooth or nonsmooth, convex or nonconvex, and locally Lipschitz or non-locally Lipschitz. For details on the algorithm underlying GRANSO and citing, see the paper mentioned below.

For a native Python port of GRANSO v1.6.4 also incorporating automatic differentiation, GPU acceleration, tensor variables, and new QP solvers, see PyGRANSO.

GRANSO screenshot
Screenshot of the console output of GRANSO.

How to install GRANSO

  1. Download the latest version of GRANSO on GitLab (v1.6.4).
  2. The user must have a quadratic program (QP) solver that is callable via The MathWorks quadprog interface (such as quadprog.m from MATLAB's Optimization Toolbox or MOSEK). GRANSO's performance is dependent upon the performance of the available quadprog solver. The user is expected to ensure that it is working correctly.
  3. The only installation task is to add the desired location of the extracted GRANSO folder to the search path in MATLAB.
  4. To read the GRANSO documentation, enter: help granso
    help gransoOptions
    help gransoOptionsAdvanced
  5. Tutorial demos are included in the examples folder of the GRANSO installation directory. It is highly recommended to both run and read through these codes.


Release History


If you publish work that either refers to or makes use of GRANSO, please cite the following paper:

When referring to this software, please also include which version was used, e.g. GRANSO v1.6.4. Note that granso, in lowercase monospaced font, refers to the routine, not the name of the software package.


GRANSO is licensed under the GNU Affero General Public License, version 3.

GRANSO contains two subroutines that are licensed under the GNU General Public License, version 3. These subroutines, which are identified by their GPL v3 license headers, are modified code derived from the HANSO optimization package.