Эффекты некоторых параметров поиска шаблона

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

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

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

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. Для получения дополнительной информации смотрите Линейные Ограничения (Optimization Toolbox).

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 was : %d\n', Output.iterations);
The number of iterations was : 244
fprintf('The number of function evaluations was : %d\n', Output.funccount);
The number of function evaluations was : 1895
fprintf('The best function value found was : %g\n', Fval);
The best function value found was : 2189.03

Добавление визуализации

Контролируйте процесс оптимизации путем определения двух функций построения графика. Задайте функции построения графика как опцию PlotFcn при помощи optimoptions. Одна функция построения графика, psplotbestf, строит лучшее значение целевой функции в каждой итерации. Другая функция построения графика, psplotfuncount, строит число раз, целевая функция выполнена в каждой итерации. Установите эти две функции построения графика в массиве ячеек.

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

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

[X1,Fval,ExitFlag,Output] = patternsearch(objectiveFcn,x0,Aineq,Bineq, ...
    Aeq,Beq,[],[],[],opts);

Optimization terminated: mesh size less than options.MeshTolerance.

Поймайте в сети параметры

Начальный размер mesh

Алгоритм поиска шаблона использует набор рациональных базисных векторов, чтобы сгенерировать поисковые направления. Это выполняет поиск вдоль поисковых направлений с помощью текущего размера mesh. Решатель запускается с начального размера mesh 1 по умолчанию. Чтобы запустить начальный размер mesh в 10, установите опцию InitialMeshSize:

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

Поймайте в сети масштабирование

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

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

Поймайте в сети акселератор

Прямые методы поиска требуют многих функциональных оценок по сравнению с основанными на производной методами оптимизации. Алгоритм поиска шаблона может быстро найти окружение оптимальной точки, но может быть медленным в обнаружении самого минимума. Это - стоимость не использования производных. Решатель patternsearch может сократить количество функциональных оценок с помощью акселератора. Когда акселератор находится на (opts.AccelerateMesh = true), размер mesh законтрактован быстро после того, как некоторый минимальный размер mesh достигнут. Эта опция рекомендуется только для сглаженных проблем, в противном случае можно потерять некоторую точность. Акселератор от (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.
fprintf('The number of iterations was : %d\n', Output.iterations);
The number of iterations was : 200
fprintf('The number of function evaluations was : %d\n', Output.funccount);
The number of function evaluations was : 1327
fprintf('The best function value found was : %g\n', Fval);
The best function value found was : 2189.03

Они установка опции сокращает количество итераций и количество функциональных оценок, и нет никакой очевидной потери точности.

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

Что такое MeshTolerance, StepTolerance и FunctionTolerance?

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

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

opts.MeshTolerance = 1e-7;

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

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

Существует пять различных опций метода поиска. Эти методы поиска включают searchga и searchneldermead, которые являются двумя различными алгоритмами оптимизации. Рекомендуется использовать эти методы только для первой итерации, которая является значением по умолчанию. Используя эти методы неоднократно в каждой итерации не может улучшить результаты и мог быть в вычислительном отношении дорогим. Один другая рука, searchlhs, который генерирует латинские точки гиперкуба, может использоваться в каждой итерации или возможно каждых 10 итерациях. Другой выбор для методов поиска включает методы Опроса, такие как положительное основание N+1 или положительное основание 2 Н.

Рекомендуемая стратегия состоит в том, чтобы использовать положительное основание N+1 (который требует в большинстве точек N+1, чтобы создать шаблон) как метод поиска, и положительное основание 2 Н (который требует, чтобы 2 Н указали, чтобы создать шаблон) как метод опроса. Обновите структуру опций, чтобы использовать positivebasisnp1 в качестве метода поиска. Начиная с положительного основания 2 Н является 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.
fprintf('The number of iterations was : %d\n', Output.iterations);
The number of iterations was : 70
fprintf('The number of function evaluations was : %d\n', Output.funccount);
The number of function evaluations was : 867
fprintf('The best function value found was : %g\n', Fval);
The best function value found was : 2189.03

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

Похожие темы