dynare_minimize_objective.m: reorder 13 to come before 101
parent
e3cda8c76d
commit
1ee788e61b
|
@ -500,6 +500,34 @@ switch minimizer_algorithm
|
||||||
% Minimize the penalized objective (note that the penalty is not updated).
|
% Minimize the penalized objective (note that the penalty is not updated).
|
||||||
[opt_par_values, fval, exitflag, output] = particleswarm(objfun, length(start_par_value), LB, UB, particleswarmOptions);
|
[opt_par_values, fval, exitflag, output] = particleswarm(objfun, length(start_par_value), LB, UB, particleswarmOptions);
|
||||||
opt_par_values = opt_par_values(:);
|
opt_par_values = opt_par_values(:);
|
||||||
|
case 13
|
||||||
|
% Matlab's lsqnonlin (Optimization toolbox needed).
|
||||||
|
if isoctave && ~user_has_octave_forge_package('optim')
|
||||||
|
error('Option mode_compute=13 requires the optim package')
|
||||||
|
elseif ~isoctave && ~user_has_matlab_license('optimization_toolbox')
|
||||||
|
error('Option mode_compute=13 requires the Optimization Toolbox')
|
||||||
|
end
|
||||||
|
optim_options = optimoptions('lsqnonlin','display','iter','MaxFunEvals',5000,'MaxIter',5000,'TolFun',1e-6,'TolX',1e-6);
|
||||||
|
if ~isempty(options_.optim_opt)
|
||||||
|
eval(['optim_options = optimoptions(optim_options,' options_.optim_opt ');']);
|
||||||
|
end
|
||||||
|
if options_.silent_optimizer
|
||||||
|
optim_options.Display='off';
|
||||||
|
end
|
||||||
|
if options_.analytic_derivation || (isfield(options_,'mom') && options_.mom.analytic_jacobian==1)
|
||||||
|
optim_options.SpecifyObjectiveGradient=true;
|
||||||
|
func = @(x) analytic_gradient_wrapper(x,objective_function,varargin{:});
|
||||||
|
[opt_par_values,Resnorm,fval,exitflag,OUTPUT,LAMBDA,JACOB] = ...
|
||||||
|
lsqnonlin(func,start_par_value,bounds(:,1),bounds(:,2),optim_options);
|
||||||
|
else
|
||||||
|
if ~isoctave
|
||||||
|
[opt_par_values,Resnorm,fval,exitflag,OUTPUT,LAMBDA,JACOB] = lsqnonlin(objective_function,start_par_value,bounds(:,1),bounds(:,2),optim_options,varargin{:});
|
||||||
|
else
|
||||||
|
% Under Octave, use a wrapper, since lsqnonlin() does not have a 6th arg
|
||||||
|
func = @(x)objective_function(x,varargin{:});
|
||||||
|
[opt_par_values,Resnorm,fval,exitflag,OUTPUT,LAMBDA,JACOB] = lsqnonlin(func,start_par_value,bounds(:,1),bounds(:,2),optim_options);
|
||||||
|
end
|
||||||
|
end
|
||||||
case 101
|
case 101
|
||||||
solveoptoptions = options_.solveopt;
|
solveoptoptions = options_.solveopt;
|
||||||
if ~isempty(options_.optim_opt)
|
if ~isempty(options_.optim_opt)
|
||||||
|
@ -548,34 +576,6 @@ switch minimizer_algorithm
|
||||||
end
|
end
|
||||||
func = @(x)objective_function(x,varargin{:});
|
func = @(x)objective_function(x,varargin{:});
|
||||||
[opt_par_values,fval,exitflag,output] = simulannealbnd(func,start_par_value,bounds(:,1),bounds(:,2),optim_options);
|
[opt_par_values,fval,exitflag,output] = simulannealbnd(func,start_par_value,bounds(:,1),bounds(:,2),optim_options);
|
||||||
case 13
|
|
||||||
% Matlab's lsqnonlin (Optimization toolbox needed).
|
|
||||||
if isoctave && ~user_has_octave_forge_package('optim')
|
|
||||||
error('Option mode_compute=13 requires the optim package')
|
|
||||||
elseif ~isoctave && ~user_has_matlab_license('optimization_toolbox')
|
|
||||||
error('Option mode_compute=13 requires the Optimization Toolbox')
|
|
||||||
end
|
|
||||||
optim_options = optimoptions('lsqnonlin','display','iter','MaxFunEvals',5000,'MaxIter',5000,'TolFun',1e-6,'TolX',1e-6);
|
|
||||||
if ~isempty(options_.optim_opt)
|
|
||||||
eval(['optim_options = optimoptions(optim_options,' options_.optim_opt ');']);
|
|
||||||
end
|
|
||||||
if options_.silent_optimizer
|
|
||||||
optim_options.Display='off';
|
|
||||||
end
|
|
||||||
if options_.analytic_derivation || (isfield(options_,'mom') && options_.mom.analytic_jacobian==1)
|
|
||||||
optim_options.SpecifyObjectiveGradient=true;
|
|
||||||
func = @(x) analytic_gradient_wrapper(x,objective_function,varargin{:});
|
|
||||||
[opt_par_values,Resnorm,fval,exitflag,OUTPUT,LAMBDA,JACOB] = ...
|
|
||||||
lsqnonlin(func,start_par_value,bounds(:,1),bounds(:,2),optim_options);
|
|
||||||
else
|
|
||||||
if ~isoctave
|
|
||||||
[opt_par_values,Resnorm,fval,exitflag,OUTPUT,LAMBDA,JACOB] = lsqnonlin(objective_function,start_par_value,bounds(:,1),bounds(:,2),optim_options,varargin{:});
|
|
||||||
else
|
|
||||||
% Under Octave, use a wrapper, since lsqnonlin() does not have a 6th arg
|
|
||||||
func = @(x)objective_function(x,varargin{:});
|
|
||||||
[opt_par_values,Resnorm,fval,exitflag,OUTPUT,LAMBDA,JACOB] = lsqnonlin(func,start_par_value,bounds(:,1),bounds(:,2),optim_options);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
otherwise
|
otherwise
|
||||||
if ischar(minimizer_algorithm)
|
if ischar(minimizer_algorithm)
|
||||||
if exist(minimizer_algorithm)
|
if exist(minimizer_algorithm)
|
||||||
|
|
Loading…
Reference in New Issue