exponenta event banner

Суррогатная оптимизация многомерной функции

В этом примере показано поведение трех рекомендуемых решателей для задачи минимизации. Целевой функцией является multirosenbrock функция:

type multirosenbrock
function F = multirosenbrock(x)
% This function is a multidimensional generalization of Rosenbrock's
% function. It operates in a vectorized manner, assuming that x is a matrix
% whose rows are the individuals.

% Copyright 2014 by The MathWorks, Inc.

N = size(x,2); % assumes x is a row vector or 2-D matrix
if mod(N,2) % if N is odd
    error('Input rows must have an even number of elements')
end

odds  = 1:2:N-1;
evens = 2:2:N;
F = zeros(size(x));
F(:,odds)  = 1-x(:,odds);
F(:,evens) = 10*(x(:,evens)-x(:,odds).^2);
F = sum(F.^2,2);

multirosenbrock функция имеет один локальный минимум 0 в точке [1,1,...,1]. Посмотрите, насколько хорошо три лучших решателя для общих нелинейных задач работают над этой функцией в 20 измерениях с трудным максимальным числом функций только 200.

Настройте проблему.

N = 20; % any even number
mf = 200; % max fun evals
fun = @multirosenbrock;
lb = -3*ones(1,N);
ub = -lb;
rng default
x0 = -3*rand(1,N);

Задать параметры для surrogateopt для использования только 200 оценок функций и последующего запуска решателя.

options = optimoptions('surrogateopt','MaxFunctionEvaluations',mf);
[xm,fvalm,~,~,pop] = surrogateopt(fun,lb,ub,options);

Figure Optimization Plot Function contains an axes. The axes with title Best Function Value: 9.96463 contains an object of type line. This object represents Best function value.

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.

Задать аналогичные параметры для patternsearch, включая функцию графика для контроля оптимизации.

psopts = optimoptions('patternsearch','PlotFcn','psplotbestf','MaxFunctionEvaluations',mf);
[psol,pfval] = patternsearch(fun,x0,[],[],[],[],lb,ub,[],psopts);
Maximum number of function evaluations exceeded: increase options.MaxFunctionEvaluations.

Figure Pattern Search contains an axes. The axes with title Best Function Value: 860.28 contains an object of type line.

Задать аналогичные параметры для fmincon.

opts = optimoptions('fmincon','PlotFcn','optimplotfval','MaxFunctionEvaluations',mf);
[fmsol,fmfval,eflag,fmoutput] = fmincon(fun,x0,[],[],[],[],lb,ub,[],opts);

Figure Optimization Plot Function contains an axes. The axes with title Current Function Value: 493.704 contains an object of type line.

Solver stopped prematurely.

fmincon stopped because it exceeded the function evaluation limit,
options.MaxFunctionEvaluations = 2.000000e+02.

Для этого чрезвычайно ограниченного количества аналитических отчетов по функциям surrogateopt решение ближе всего к истинному минимальному значению 0.

table(fvalm,pfval,fmfval,'VariableNames',{'surrogateopt','patternsearch','fmincon'})
ans=1×3 table
    surrogateopt    patternsearch    fmincon
    ____________    _____________    _______

       9.9646          860.28         493.7 

Разрешение еще 200 оценок функций показывает, что другие решатели быстро приближаются к истинному решению, в то время как surrogateopt существенно не улучшается. Перезапустите решатели из их предыдущих решений, которые добавляют 200 оценок функций к каждой оптимизации.

options = optimoptions(options,'InitialPoints',pop);
[xm,fvalm,~,~,pop] = surrogateopt(fun,lb,ub,options);

Figure Optimization Plot Function contains an axes. The axes with title Best Function Value: 9.78735 contains an object of type line. This object represents Best function value.

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
[psol,pfval] = patternsearch(fun,psol,[],[],[],[],lb,ub,[],psopts);
Maximum number of function evaluations exceeded: increase options.MaxFunctionEvaluations.

Figure Pattern Search contains an axes. The axes with title Best Function Value: 407.885 contains an object of type line.

[fmsol,fmfval,eflag,fmoutput] = fmincon(fun,fmsol,[],[],[],[],lb,ub,[],opts);

Figure Optimization Plot Function contains an axes. The axes with title Current Function Value: 8.59887 contains an object of type line.

Solver stopped prematurely.

fmincon stopped because it exceeded the function evaluation limit,
options.MaxFunctionEvaluations = 2.000000e+02.
table(fvalm,pfval,fmfval,'VariableNames',{'surrogateopt','patternsearch','fmincon'})
ans=1×3 table
    surrogateopt    patternsearch    fmincon
    ____________    _____________    _______

       9.7874          407.88        8.5989 

См. также

Связанные темы