Поиск и опрос

В сложение к опросу точек mesh алгоритм поиска шаблона может выполнить необязательный шаг при каждой итерации, называемой поиском. На каждой итерации шаг поиска применяет другой метод оптимизации к текущей точке. Если этот поиск не улучшает текущую точку, выполняется шаг опроса.

Поиск с использованием метода опроса

Следующий пример иллюстрирует использование метода поиска по проблеме, описанной в Ограниченной Минимизации с Использованием patternsearch и Задаче Оптимизации Live Editor. В этом случае методом поиска является опрос MADS Positive Basis 2N. Для сравнения сначала запустите задачу без метода поиска.

x0 = [2 1 0 9 1 0];
Aineq = [-8 7 3 -4 9 0];
bineq = 7;
Aeq = [7 1 8 3 3 3; 5 0 -5 1 -5 8; -2 -6 7 1 1 9; 1 -1 2 -2 3 -3];
beq = [84 62 65 1];
options = optimoptions('patternsearch',...
    'PlotFcn',{@psplotbestf,@psplotfuncount});
[x,fval,exitflag,output] = patternsearch(@lincontest7,x0,...
    Aineq,bineq,Aeq,beq,[],[],[],options);
Optimization terminated: mesh size less than options.MeshTolerance.

Figure Pattern Search contains 2 axes. Axes 1 with title Best Function Value: 1919.49 contains an object of type line. Axes 2 with title Total Function Evaluations: 1462 contains an object of type line.

Чтобы использовать MADS Positive Basis 2N опроса в качестве метода поиска, измените SearchFcn опция.

rng default % For reproducibility
options.SearchFcn = @MADSPositiveBasis2N;
[x2,fval2,exitflag2,output2] = patternsearch(@lincontest7,x0,...
    Aineq,bineq,Aeq,beq,[],[],[],options);
Optimization terminated: mesh size less than options.MeshTolerance.

Figure Pattern Search contains 2 axes. Axes 1 with title Best Function Value: 1919.49 contains an object of type line. Axes 2 with title Total Function Evaluations: 1283 contains an object of type line.

Обе оптимизации достигли одного и того же значения целевой функции. Использование метода поиска уменьшает количество вычислений функции и количество итераций.

table([output.funccount;output2.funccount],[output.iterations;output2.iterations],...
    'VariableNames',["Function Evaluations" "Iterations"],...
    'RowNames',["Without Search" "With Search"])
ans=2×2 table
                      Function Evaluations    Iterations
                      ____________________    __________

    Without Search            1462               136    
    With Search               1283               118    

Поиск с использованием другого решателя

patternsearch занимает много времени, чтобы минимизировать функцию Розенбрка. Функция является

f(x)=100(x2-x12)2+(1-x1)2.

Функция Розенбрка описана и нанесена на график в решении ограниченной нелинейной задачи, основанной на решателе. Минимум функций Розенбрка равен 0, достигнутый в точке [1,1]. Потому что patternsearch не эффективен при минимизации этой функции, используйте другой метод поиска, чтобы помочь.

Создайте целевую функцию.

dejong2fcn = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

Максимальное количество итераций по умолчанию для pattersearch с двумя переменными - 200, а максимальное количество вычислений функции по умолчанию - 4000. Увеличьте эти значения до MaxFunctionEvaluations = 5000 и MaxIterations  = 2000.

opts = optimoptions('patternsearch','MaxFunctionEvaluations',5000,'MaxIterations',2000);

Запустите pattersearch, начиная с [-1.9 2].

[x,feval,eflag,output] = patternsearch(dejong2fcn,...
    [-1.9,2],[],[],[],[],[],[],[],opts);
Maximum number of function evaluations exceeded: increase options.MaxFunctionEvaluations.
disp(feval)
    0.8560

Оптимизация не завершилась, и результат не очень близок к оптимальному значению 0.

Установите опции для использования fminsearch в качестве метода поиска, используя количество вычислений функции и итераций по умолчанию.

opts = optimoptions('patternsearch',opts,'SearchFcn',@searchneldermead);

Повторите оптимизацию.

[x2,feval2,eflag2,output2] = patternsearch(dejong2fcn,...
    [-1.9,2],[],[],[],[],[],[],[],opts);
Optimization terminated: mesh size less than options.MeshTolerance.
disp(feval2)
   4.0686e-10

Результаты намного лучше при использовании этого метода поиска. fminsearch более эффективен при приближении к минимуму функции Розенбрка.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте