Измените опции surrogateopt

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

Задайте целевую функцию sixmin можно следующим образом.

sixmin = @(x)(4*x(:,1).^2 - 2.1*x(:,1).^4 + x(:,1).^6/3 ...
    + x(:,1).*x(:,2) - 4*x(:,2).^2 + 4*x(:,2).^4);

Постройте функцию.

[X,Y] = meshgrid(linspace(-2.1,2.1),linspace(-1.2,1.2));
Z = sixmin([X(:),Y(:)]);
Z = reshape(Z,size(X));
surf(X,Y,Z,'EdgeColor','none')
view(-139,31)

Функция имеет шесть локальных минимумов и два глобальных минимума.

Запустите surrogateopt на проблеме с помощью функции построения графика 'surrogateoptplot' в области, ограниченной в каждом направлении [-2.1,2.1]. Чтобы понять сюжет 'surrogateoptplot', смотрите, Интерпретируют surrogateoptplot.

rng default
lb = [-2.1,-2.1];
ub = -lb;
opts = optimoptions('surrogateopt','PlotFcn','surrogateoptplot');
[xs,fvals,eflags,outputs] = surrogateopt(sixmin,lb,ub,opts);

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

Установите меньшее значение для опции MinSurrogatePoints, чтобы видеть, помогает ли изменение решателю достигнуть глобального минимума быстрее.

opts.MinSurrogatePoints = 4;
[xs2,fvals2,eflags2,outputs2] = surrogateopt(sixmin,lb,ub,opts);

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

Меньшая опция MinSurrogatePoints заметно не изменяет поведение решателя.

Попытайтесь установить большее значение опции MinSampleDistance.

opts.MinSampleDistance = 0.05;
[xs3,fvals3,eflags3,outputs3] = surrogateopt(sixmin,lb,ub,opts);

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

Изменение опции MinSampleDistance имеет небольшой эффект на решатель. Эта установка заставляет суррогат сбрасывать чаще и заставляет лучшую целевую функцию быть немного выше (хуже), чем прежде.

Попытайтесь использовать параллельную обработку. Время выполнение и с и ни с чем не сравнимая обработка на функции camelback, которая является вариантом функции sixmin. Чтобы моделировать длительную функцию, функция camelback имеет добавленную паузу одной секунды для каждой функциональной оценки.

type camelback
function y = camelback(x)

y = (4*x(1)^2 - 2.1*x(1)^4 + x(1)^6/3 ...
    + x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4);
pause(1)
tic
opts = optimoptions('surrogateopt','UseParallel',true,'PlotFcn','surrogateoptplot');
[xs4,fvals4,eflags4,outputs4] = surrogateopt(@camelback,lb,ub,opts);

Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
toc
Elapsed time is 43.466489 seconds.

Время решатель, когда работается та же проблема в сериале.

opts.UseParallel = false;
tic
[xs5,fvals5,eflags5,outputs5] = surrogateopt(@camelback,lb,ub,opts);

Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
toc
Elapsed time is 238.951879 seconds.

Для длительных целевых функций параллельная обработка значительно улучшает скорость, чрезмерно не влияя на результаты.

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

Похожие темы