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

Этот пример показывает поведение трех рекомендуемых решателей на проблеме минимизации. Целевая функция является функцией 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);

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.

Установите подобные опции для fmincon.

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

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.8768          860.28         493.7 

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

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

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.
[fmsol,fmfval,eflag,fmoutput] = fmincon(fun,fmsol,[],[],[],[],lb,ub,[],opts);

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.7502          407.88        8.5989 

Смотрите также

Похожие темы