Choose Between optimoptions
and optimset
Previously, the recommended way to set optimization options was to use optimset
. Now the general recommendation is to use optimoptions
, with some caveats listed below.
optimset
still works, and it is the only way to set options for solvers that are available without an Optimization Toolbox™ license: fminbnd
, fminsearch
, fzero
, and lsqnonneg
.
Note: Some other toolboxes use optimization options and require you to pass in options created using optimset
, not optimoptions
. Check the documentation for your toolboxes.
optimoptions
organizes options by solver, with a more focused and comprehensive display than optimset
:
Creates and modifies only the options that apply to a solver
Shows your option choices and default values for a specific solver/algorithm
Displays links for more information on solver options and other available solver algorithms
intlinprog
uses only optimoptions
options.
The main difference in creating options is:
For
optimoptions
, you include the solver name as the first argument.
options = optimoptions(SolverName,Name,Value,...)
For
optimset
, the syntax does not include the solver name.
options = optimset(Name,Value,..)
In both cases, you can query or change options by using dot notation. See Set and Change Optimization Options and View Optimization Options.
For example, compare the display of optimoptions
to that of optimset
.
options = optimoptions(@fminunc,'SpecifyObjectiveGradient',true)
options = fminunc options: Options used by current Algorithm ('quasi-newton'): (Other available algorithms: 'trust-region') Set properties: SpecifyObjectiveGradient: 1 Default properties: Algorithm: 'quasi-newton' Display: 'final' FiniteDifferenceStepSize: 'sqrt(eps)' FiniteDifferenceType: 'forward' HessianApproximation: 'bfgs' MaxFunctionEvaluations: '100*numberOfVariables' MaxIterations: 400 ObjectiveLimit: -1.0000e+20 OptimalityTolerance: 1.0000e-06 OutputFcn: [] PlotFcn: [] StepTolerance: 1.0000e-06 TypicalX: 'ones(numberOfVariables,1)' UseParallel: 0 Options not used by current Algorithm ('quasi-newton') Default properties: FunctionTolerance: 1.0000e-06 HessianFcn: [] HessianMultiplyFcn: [] SubproblemAlgorithm: 'cg'
options = optimset('GradObj','on')
options = struct with fields:
Display: []
MaxFunEvals: []
MaxIter: []
TolFun: []
TolX: []
FunValCheck: []
OutputFcn: []
PlotFcns: []
ActiveConstrTol: []
Algorithm: []
AlwaysHonorConstraints: []
DerivativeCheck: []
Diagnostics: []
DiffMaxChange: []
DiffMinChange: []
FinDiffRelStep: []
FinDiffType: []
GoalsExactAchieve: []
GradConstr: []
GradObj: 'on'
HessFcn: []
Hessian: []
HessMult: []
HessPattern: []
HessUpdate: []
InitBarrierParam: []
InitTrustRegionRadius: []
Jacobian: []
JacobMult: []
JacobPattern: []
LargeScale: []
MaxNodes: []
MaxPCGIter: []
MaxProjCGIter: []
MaxSQPIter: []
MaxTime: []
MeritFunction: []
MinAbsMax: []
NoStopIfFlatInfeas: []
ObjectiveLimit: []
PhaseOneTotalScaling: []
Preconditioner: []
PrecondBandWidth: []
RelLineSrchBnd: []
RelLineSrchBndDuration: []
ScaleProblem: []
SubproblemAlgorithm: []
TolCon: []
TolConSQP: []
TolGradCon: []
TolPCG: []
TolProjCG: []
TolProjCGAbs: []
TypicalX: []
UseParallel: []