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