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