The MeshExpansionFactor
и MeshContractionFactor
опции управляет тем, какой размер сетки расширяется или сжимается при каждой итерации. С MeshExpansionFactor
по умолчанию значение
2
поиск шаблона умножает размер сетки на 2
после каждого успешного опроса. С MeshContractionFactor
по умолчанию значение
0.5
поиск шаблона умножает размер сетки на 0.5
после каждого неудачного опроса.
Вы можете просмотреть расширение и сужение размера сетки во время поиска шаблона, задав @psplotmeshsize
как PlotFcn
опция. Чтобы также отобразить значения размера сетки и целевой функции в командной строке, установите Display
опция для 'iter'
.
Для примера настройте задачу, описанную в Ограниченной Минимизации Используя patternsearch и Задачу Оптимизации Live Editor следующим образом:
Введите в командной строке следующее:
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];
Создайте опции для использования GSSPositiveBasis2N
метод опроса, предоставление итерационного отображения и построение графика размера сетки.
options = optimoptions('patternsearch',... 'PollMethod','GSSPositiveBasis2N',... 'PlotFcn',@psplotmeshsize,... 'Display','iter');
Запустите оптимизацию.
[x,fval,exitflag,output] = patternsearch(@lincontest7,x0,...
Aineq,bineq,Aeq,beq,[],[],[],options);
Чтобы более четко увидеть изменения размера сетки, измените ось Y на логарифмическое масштабирование следующим образом:
Выберите Axes Properties из меню Edit в окне plot.
В редакторе свойств выберите вкладку Rulers.
Установите YScale значение Log.
Обновление этих настроек в MATLAB® Property Editor показывает график на следующем рисунке.
Первые 5 итераций приводят к успешным опросам, поэтому размеры сетки постоянно увеличиваются в течение этого времени. Вы можете увидеть, что первый неудачный опрос происходит на итерации 6, посмотрев на отображение командной строки.
Iter f-count f(x) MeshSize Method 0 1 2273.76 1 1 2 2251.69 2 Successful Poll 2 3 2209.86 4 Successful Poll 3 4 2135.43 8 Successful Poll 4 5 2023.48 16 Successful Poll 5 6 1947.23 32 Successful Poll 6 15 1947.23 16 Refine Mesh
Обратите внимание, что при итерации 5, которая является успешной, размер сетки удваивается для следующей итерации. Но на итерации 6, которая неудачна, размер сетки умножается 0.5
.
Чтобы увидеть, как MeshExpansionFactor
и MeshContractionFactor
повлиять на поиск шаблона, задать MeshExpansionFactor
на 3.0
и установите MeshContractionFactor
на 2/3
.
options = optimoptions(options,'MeshExpansionFactor',3.0,... 'MeshContractionFactor',2/3); [x,fval,exitflag,output] = patternsearch(@lincontest7,x0,... Aineq,bineq,Aeq,beq,[],[],[],options);
Окончательное значение целевой функции примерно то же, что и при предыдущих настройках, но для достижения этой точки решателю требуется больше времени.
При изменении масштабирования оси Y на логарифмический график размера сетки появляется как показано на следующем рисунке.
Обратите внимание, что размер сетки увеличивается быстрее с MeshExpansionFactor
установлено на 3.0
, по сравнению со значением по умолчанию 2.0
и уменьшается медленнее с MeshContractionFactor
установлено на 2/3
, по сравнению со значением по умолчанию 0.5
.
Mesh Accelerator может заставить поиск по шаблону сходиться быстрее к оптимальной точке путем уменьшения количества итераций, необходимых для достижения допуска по сетке. Когда размер сетки ниже определенного значения, поиск по шаблону сокращает размер сетки на множитель меньше, чем MeshContractionFactor
коэффициент. Mesh Accelerator применяется только к GPS и GSS алгоритмам.
Примечание
Для наилучших результатов используйте mesh Accelerator для задач, при которых целевая функция не слишком крутая около оптимальной точки, или вы можете потерять некоторую точность. Для дифференцируемых задач это означает, что абсолютное значение производной не слишком велико около решения.
Чтобы использовать mesh Accelerator, установите AccelerateMesh
опция для true
.
Для примера настройте задачу, описанную в Ограниченной Минимизации Используя patternsearch и Задачу Оптимизации Live Editor следующим образом:
Введите в командной строке следующее:
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];
Создайте опции, включая mesh Accelerator.
options = optimoptions('patternsearch',... 'PollMethod','GSSPositiveBasis2N',... 'Display','iter','AccelerateMesh',true);
Запустите оптимизацию.
[x,fval,exitflag,output] = patternsearch(@lincontest7,x0,... Aineq,bineq,Aeq,beq,[],[],[],options);
patternsearch
завершает в 78 итерациях по сравнению с 84 итерациями, когда mesh accelerator не включен. Эффект mesh Accelerator можно увидеть в итерационном отображении. Запуск примера с ускорением сетки и без него. Размеры сетки одинаковы до итерации 70, но различаются при итерации 71. В Командном Окне MATLAB отображаются следующие линии для итераций 70 и 71 без акселератора.
Iter f-count f(x) MeshSize Method 70 618 1919.54 6.104e-05 Refine Mesh 71 630 1919.54 3.052e-05 Refine Mesh
Обратите внимание, что размер сетки умножается на 0.5
, значение по умолчанию MeshContractionFactor
.
Для сравнения, в Командном окне отображаются следующие линии для тех же чисел итерации с Accelerator.
Iter f-count f(x) MeshSize Method 70 618 1919.54 6.104e-05 Refine Mesh 71 630 1919.54 1.526e-05 Refine Mesh
В этом случае размер сетки умножается на 0.25
.