Измените 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.

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

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

Похожие темы