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' график см. в разделе Интерпретировать суррогатеоптплот.
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 camelbackfunction 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.
Для трудоемких объективных функций параллельная обработка значительно повышает скорость, не оказывая чрезмерного влияния на результаты.