Code Generation for coneprog
Background
What Is Code Generation?
Code generation is the conversion of MATLAB® code to C/C++ code using MATLAB Coder™. Code generation requires a MATLAB Coder license.
Typically, you use code generation to deploy code on hardware that is not running MATLAB.
For an example, see Generate Code for coneprog. For examples of code generation in other optimization solvers, see Generate Code for fmincon, Generate Code for fsolve, or Generate Code for lsqcurvefit or lsqnonlin.
Code Generation Requirements
Note the following requirements for generating code for
coneprog
:
coneprog
supports code generation using either thecodegen
(MATLAB Coder) function or the MATLAB Coder app. You must have a MATLAB Coder license to generate code.The target hardware must support standard double-precision floating-point computations.
Code generation targets do not use the same math kernel libraries as MATLAB solvers. Therefore, code generation solutions can vary from solver solutions, especially for poorly conditioned problems.
coneprog
does not support theproblem
argument for code generation.[x,fval] = coneprog(problem) % Not supported
All
coneprog
input matrices such asA
,Aeq
,secondordercone
inputs,lb
, andub
can be full or sparse. To use sparse inputs, you must enable dynamic memory allocation. See Code Generation Limitations (MATLAB Coder). Solvers have good performance with sparse inputs when the fraction of nonzero entries is small.Pass cone constraints as a cell array of
SecondOrderConeConstraint
objects, not as an array of these objects. If you have no cone constraints, pass an empty cell{}
.The
lb
andub
arguments must have the same number of entries as the number of problem variables, or must be empty[]
.If your target hardware does not support infinite bounds, use
optim.coder.infbound
.For advanced code optimization involving embedded processors, you also need an Embedded Coder® license.
Code generation supports these options for
optimoptions
:ConstraintTolerance
Display
LinearSolver
MaxIterations
OptimalityTolerance
Generated code has limited error checking for options. The recommended way to update an option is to use dot notation, not
optimoptions
.opts = optimoptions("coneprog",ConstraintTolerance=1e-4); opts = optimoptions(opts,MaxIterations=1e4); % Not preferred opts.MaxIterations = 1e4; % Recommended
coneprog
supports options passed to the solver, not only options created in the code.If you specify an option that is not supported, the option is typically ignored during code generation. For reliable results, specify only supported options.
Generated Code Not Multithreaded
By default, generated code for use outside the MATLAB environment uses linear algebra libraries that are not multithreaded. Therefore, this code can run significantly slower than code in the MATLAB environment.
If your target hardware has multiple cores, you can achieve better performance by using custom multithreaded LAPACK and BLAS libraries. For details about incorporating these libraries in your generated code, see Speed Up Linear Algebra in Generated Standalone Code by Using LAPACK Calls (MATLAB Coder).
See Also
coneprog
| codegen
(MATLAB Coder) | optimoptions
| optim.coder.infbound