Изменение 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.142697 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 227.968689 seconds.

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

См. также

Похожие темы