MeshExpansionFactor
и MeshContractionFactor
управление опциями, насколько размер mesh расширен или законтрактован в каждой итерации. С MeshExpansionFactor
по умолчанию значение
2
, поиск шаблона умножает размер mesh на 2
после каждого успешного опроса. С MeshContractionFactor
по умолчанию значение
0.5
, поиск шаблона умножает размер mesh на 0.5
после каждого неудачного опроса.
Можно просмотреть расширение и сокращение размера mesh во время поиска шаблона установкой @psplotmeshsize
как PlotFcn
опция. Чтобы также отобразить значения размера mesh и целевой функции при командной строке, установите 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
опросите метод, дайте итеративное отображение и постройте размер mesh.
options = optimoptions('patternsearch',... 'PollMethod','GSSPositiveBasis2N',... 'PlotFcn',@psplotmeshsize,... 'Display','iter');
Запустите оптимизацию.
[x,fval,exitflag,output] = patternsearch(@lincontest7,x0,...
Aineq,bineq,Aeq,beq,[],[],[],options);
Чтобы видеть изменения в размере mesh более ясно, измените ось Y в логарифмическое масштабирование можно следующим образом:
Выберите Axes Properties из меню Edit в окне графика.
В Редакторе свойств выберите вкладку Rulers.
Установите YScale на Log.
Обновление этих настроек в Property Editor MATLAB® показывает график в следующем рисунке.
Первые 5 результатов итераций в успешных опросах, таким образом, размеры mesh увеличиваются постоянно в это время. Вы видите, что первый неудачный опрос происходит в итерации 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, который успешен, размер mesh удваивается для следующей итерации. Но в итерации 6, который неудачен, размером mesh является умноженный 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 к логарифмическому, график размера mesh появляется как показано в следующем рисунке.
Обратите внимание на то, что размер mesh увеличивается быстрее с MeshExpansionFactor
установите на 3.0
, по сравнению со значением по умолчанию 2.0
, и уменьшения более медленно с MeshContractionFactor
установите на 2/3
, по сравнению со значением по умолчанию 0.5
.
Акселератор mesh может заставить поиск шаблона сходиться быстрее к оптимальной точке путем сокращения количества итераций, требуемых достигнуть допуска mesh. Когда размер mesh ниже определенного значения, поиск шаблона сокращает размер mesh фактором, меньшим, чем MeshContractionFactor
фактор. Сцепитесь акселератор применяется только к GPS и алгоритмам GSS.
Примечание
Для лучших результатов используйте акселератор mesh для проблем, в которых целевая функция не слишком крута около оптимальной точки, или вы можете потерять некоторую точность. Для дифференцируемых проблем это означает, что абсолютное значение производной не является слишком большим около решения.
Чтобы использовать акселератор mesh, установите 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.
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 не включен. Вы видите эффект акселератора mesh в итеративном отображении. Запустите пример с и без ускорения mesh. Размеры mesh являются тем же самым до итерации 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
Обратите внимание на то, что размер mesh умножается на 0.5
, значение по умолчанию MeshContractionFactor
.
Для сравнения Командное окно отображает следующие линии для тех же чисел итерации с акселератором.
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
В этом случае размер mesh умножается на 0.25
.