exponenta event banner

Эффекты параметров поиска массива

В этом примере показаны эффекты некоторых параметров поиска массива. Эти параметры включают построение графика, критерии остановки и другие алгоритмические средства управления для ускорения решения.

Настройка проблемы для поиска по шаблону

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

type lincontest7
function y = lincontest7(x);
%LINCONTEST7 objective function.
%   y = LINCONTEST7(X) evaluates y for the input X. Make sure that x is a column 
%   vector, whereas objective function gets a row vector.


%   Copyright 2003-2004 The MathWorks, Inc.

x = x';
%Define a quadratic problem in terms of H and f (From web unknown source)
H = [36 17 19 12 8 15; 17 33 18 11 7 14; 19 18 43 13 8 16;
12 11 13 18 6 11; 8 7 8 6 9 8; 15 14 16 11 8 29];
 f = [ 20 15 21 18 29 24 ]';
 
 y = 0.5*x'*H*x + f'*x;

Укажите дескриптор функции @lincontest7 в качестве целевой функции.

objectiveFcn = @lincontest7;

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

x0 = [2 1 0 9 1 0];

Создание матриц линейных ограничений, представляющих зависимости Aineq*x <= Bineq и Aeq*x = Beq. Дополнительные сведения см. в разделе Линейные зависимости.

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 8; 1 0 0 0 0 0];
Beq = [84 62 65 1];

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

[X1,Fval,Exitflag,Output] = patternsearch(objectiveFcn,x0,Aineq,Bineq,Aeq,Beq);
Optimization terminated: mesh size less than options.MeshTolerance.
fprintf('The number of iterations is: %d\n', Output.iterations);
The number of iterations is: 132
fprintf('The number of function evaluations is: %d\n', Output.funccount);
The number of function evaluations is: 1531
fprintf('The best function value found is: %g\n', Fval);
The best function value found is: 2189.03

Добавить визуализацию

Контролируйте процесс оптимизации, указывая опции для выбора двух функций печати. Функция графика psplotbestf строит график наилучшего значения целевой функции при каждой итерации и функции графика psplotfuncount строит график количества вычислений целевой функции в каждой итерации. Задайте эти две функции графика в массиве ячеек.

opts = optimoptions(@patternsearch,'PlotFcn',{@psplotbestf,@psplotfuncount});

Запустить patternsearch решатель, включая opts аргумент. Поскольку проблема не имеет ограничений верхней или нижней границы и нелинейных ограничений, передайте пустые массивы ([]) для седьмого, восьмого и девятого аргументов.

[X1,Fval,ExitFlag,Output] = patternsearch(objectiveFcn,x0,Aineq,Bineq, ...
    Aeq,Beq,[],[],[],opts);
Optimization terminated: mesh size less than options.MeshTolerance.

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

Параметры сетки

Поиск массива включает оценку целевой функции в точках сетки. Размер сетки может влиять на скорость решения. Можно управлять размером сетки с помощью опций.

Начальный размер сетки

Сетка в каждой итерации - это диапазон набора направлений поиска, которые добавляются к текущей точке и масштабируются текущим размером сетки. Решатель начинается с начального размера сетки, равного 1 по умолчанию. Запуск начального размера сетки в 10, установите InitialMeshSize вариант.

options = optimoptions(opts,'InitialMeshSize',10);

Масштабирование сетки

Можно масштабировать сетку, чтобы улучшить минимизацию плохо масштабированной задачи оптимизации. При масштабировании массив поворачивается на некоторую степень и масштабируется вдоль направлений поиска. ScaleMesh опция включена (true) по умолчанию, но его можно отключить, если проблема хорошо масштабирована. В общем случае, если проблема плохо масштабирована, установите для этой опции значение true может уменьшить количество оценок функций. Для этой проблемы установите ScaleMesh кому false, потому что lincontest7 является хорошо масштабированной целевой функцией.

opts = optimoptions(opts,'ScaleMesh',false);

Ускоритель сетки

Методы прямого поиска требуют многих оценок функций по сравнению с методами оптимизации на основе производных. Алгоритм поиска шаблона может быстро найти окрестность оптимальной точки, но может быть медленным в обнаружении самого минимума. patternsearch решатель может уменьшить число оценок функций с помощью ускорителя. При включенном ускорителе (opts.AccelerateMesh = true), решатель быстро сжимает размер сетки после достижения минимального размера сетки. Этот параметр рекомендуется использовать только для устранения проблем; в других типах задач можно потерять некоторую точность. AccelerateMesh опция отключена (false) по умолчанию. Для этой проблемы установите AccelerateMesh кому true потому что целевая функция является гладкой.

opts = optimoptions(opts,'AccelerateMesh',true);

Запустить patternsearch решатель.

[X2,Fval,ExitFlag,Output] = patternsearch(objectiveFcn,x0,Aineq,Bineq, ...
    Aeq,Beq,[],[],[],opts);
Optimization terminated: mesh size less than options.MeshTolerance.

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

fprintf('The number of iterations is: %d\n', Output.iterations);
The number of iterations is: 86
fprintf('The number of function evaluations is: %d\n', Output.funccount);
The number of function evaluations is: 893
fprintf('The best function value found is: %g\n', Fval);
The best function value found is: 2189.03

Настройки опций сетки уменьшают количество итераций и число оценок функций и не приводят к явной потере точности.

Критерии остановки и допуски

MeshTolerance - допуск для размера сетки. Если размер сетки меньше MeshTolerance, решатель останавливается. StepTolerance - минимальный допуск при изменении текущей точки на следующую. FunctionTolerance - минимальный допуск при изменении значения функции с текущей точки на следующую.

Установите MeshTolerance до 1e-7, что в десять раз меньше значения по умолчанию. Этот параметр может увеличить число оценок и итераций функций и привести к более точному решению.

opts.MeshTolerance = 1e-7;

Методы поиска в поиске шаблонов

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

Можно указать различные методы поиска для SearchFcn, в том числе searchga и searchneldermead, которые являются алгоритмами оптимизации. Используйте эти два метода поиска только для первой итерации, которая является настройкой по умолчанию. Использование любого из этих методов при каждой итерации может не улучшить результаты и может быть дорогостоящим с точки зрения вычислений. Тем не менее, вы можете использовать searchlhs метод, который генерирует латинские точки гиперкуба, при каждой итерации или, возможно, при каждых 10 итерациях.

Другие варианты методов поиска включают методы опроса, такие как положительный базис N + 1 или положительный базис 2N. Рекомендуется использовать положительный базис N + 1 (который требует не более N + 1 точек для создания шаблона) в качестве метода поиска и положительный базис 2N (который требует 2N точек для создания шаблона) в качестве метода опроса.

Обновление структуры опций для использования positivebasisnp1 в качестве метода поиска. Поскольку положительное базовое 2N является значением по умолчанию для PollFcn , не устанавливайте этот параметр.

opts.SearchFcn = @positivebasisnp1;

Запустить patternsearch решатель.

[X5,Fval,ExitFlag,Output] = patternsearch(objectiveFcn,x0,Aineq,Bineq,Aeq,Beq, ...
    [],[],[],opts);
Optimization terminated: mesh size less than options.MeshTolerance.

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

fprintf('The number of iterations is: %d\n', Output.iterations);
The number of iterations is: 66
fprintf('The number of function evaluations is: %d\n', Output.funccount);
The number of function evaluations is: 838
fprintf('The best function value found is: %g\n', Fval);
The best function value found is: 2189.03

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

Связанные темы