CVXGEN: Code Generation for Convex Optimization

Parameter specification

Parameters are placeholders for problem data, and may be used in the objective and constraints. Parameter values are not given until the generated solver is called. Parameters are specified by a name, dimension and optional attributes. Dimensions can use symbolic values from dimensions blocks. CVXGEN supports scalar, vector and matrix parameters, as well as indexed parameters.

Some examples (assuming m and n were specified in a dimensions block):

  A (m,n)
  b (m)
  c (2*m)
  Q (n,n) symmetric psd
  a nonnegative


  • Each dimension will be assumed 1 if omitted.

  • Valid attributes are nonnegative, nonpositive, psd, nsd and symmetric and diagonal.

  • You may prefer using the abbreviated attributes nonneg or nonpos, or, informally, positive or negative.

  • If a parameter is diagonal, it is worth using that attribute, as it will improve performance.

  • Columns will be set to rows if a parameter is symmetric.

  • Parameter dimensions can be integers, or simple arithmetic expressions involving dimensions.

  • The parameter name must consist only of numbers, letters and underscores, and must start with a letter or an underscore.

Sparse parameters

CVXGEN supports sparse parameters; that is, parameters with only certain specific entries non-zero. To specify a sparse matrix A in mathbf{R}^{3 times 5}, for example, use the syntax

  A (3,5) {1,1 2,2 3,3 3,4 3,5 2,5 1,5}

Here, A is a 3 times 5 matrix, with nonzero entries A_{11}, A_{22}, ldots, A_{25}, A_{15}. With the C interface, these will be stored in the order declared, so params.A[0] will be the (1,1) entry, and params.A[6] will be the (1,5) entry. If you are using the Matlab interface, pass in a dense matrix. Only the indicated entries will be used, and all other entries will be ignored, even if nonzero. Treat symmetric matrices in an identical way: declare diagonals once, and declare and set non-zero off-diagonals for both the (i,j) and (j,i) entries.