Expansion factor и опции Contraction factor, в опциях Mesh, управляют, насколько размер mesh расширен или законтрактован в каждой итерации. Со значением Expansion factor по умолчанию 2
поиск шаблона умножает размер mesh на 2
после каждого успешного опроса. Со значением Contraction factor по умолчанию 0.5
поиск шаблона умножает размер mesh на 0.5
после каждого неудачного опроса.
Можно просмотреть расширение и сокращение размера mesh во время поиска шаблона путем выбора Mesh size в панели Plot functions. Чтобы также отобразить значения размера mesh и целевой функции при командной строке, установите Level of display на Iterative
в опциях Display to command window.
Например, настройте проблему, описанную в Линейно Ограниченной проблеме можно следующим образом:
Введите следующее в командной строке:
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];
Настройте свою проблему в приложении Оптимизации, чтобы совпадать со следующими фигурами.
Запустите оптимизацию.
Отображения приложения Оптимизации следующий график.
Чтобы запустить эту проблему в командной строке, установите опции и запустите проблему можно следующим образом.
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',... 'PollMethod','GSSPositiveBasis2N',... 'PlotFcn',@psplotmeshsize,... 'Display','iter'); [x,fval,exitflag,output] = patternsearch(@lincontest7,x0,... Aineq,bineq,Aeq,beq,[],[],[],options);
Чтобы видеть изменения в размере mesh более ясно, измените ось Y на логарифмическое масштабирование можно следующим образом:
Выберите Axes Properties из меню Edit в окне графика.
В Редакторе свойств выберите вкладку Y Axis.
Установите Scale на 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
.
Чтобы видеть, как Expansion factor и Contraction factor влияют на поиск шаблона, вносят следующие изменения:
Установите Expansion factor на 3.0
.
Установите Contraction factor на 2/3
.
Затем нажмите Start. Панель Run solver and view results показывает, что конечный пункт является приблизительно тем же самым как с настройками по умолчанию Expansion factor и Contraction factor, но что поиск шаблона занимает больше времени, чтобы достигнуть той точки.
Также в командной строке:
options.MeshExpansionFactor = 3;
options.MeshContractionFactor = 2/3;
[x,fval,exitflag,output] = patternsearch(@lincontest7,x0,...
Aineq,bineq,Aeq,beq,[],[],[],options);
Когда вы изменяете масштабирование оси Y к логарифмическому, график размера mesh появляется как показано в следующей фигуре.
Обратите внимание на то, что размер mesh увеличивается быстрее с набором Expansion factor к 3.0
, по сравнению со значением по умолчанию 2.0
, и уменьшается более медленно с набором Contraction factor к 0.75
, по сравнению со значением по умолчанию 0.5
.
Акселератор mesh может заставить поиск шаблона сходиться быстрее к оптимальной точке путем сокращения количества итераций, требуемых достигнуть допуска mesh. Когда размер mesh ниже определенного значения, поиск шаблона сокращает размер mesh фактором, меньшим, чем фактор Contraction factor. Сцепитесь акселератор применяется только к GPS и алгоритмам GSS.
Для лучших результатов используйте акселератор mesh для проблем, в которых целевая функция не слишком крута около оптимальной точки, или вы можете потерять некоторую точность. Для дифференцируемых проблем это означает, что абсолютное значение производной не является слишком большим около решения.
Чтобы использовать акселератор mesh, установите Accelerator на On
в опциях Mesh. Или, в командной строке, устанавливает опцию AccelerateMesh
на true
.
Например, настройте проблему, описанную в Линейно Ограниченной проблеме можно следующим образом:
Введите следующее в командной строке:
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];
Настройте свою проблему в приложении Оптимизации, чтобы совпадать со следующими фигурами.
Запустите оптимизацию.
Также в командной строке входят
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',... 'PollMethod','GSSPositiveBasis2N',... 'Display','iter','AccelerateMesh',true); [x,fval,exitflag,output] = patternsearch(@lincontest7,x0,... Aineq,bineq,Aeq,beq,[],[],[],options);
Количество итераций, требуемых достигнуть допуска mesh, равняется 78, по сравнению с 84, когда Accelerator установлен в Off
.
Вы видите эффект акселератора mesh установкой Level of display к Iterative
в Display to command window. Запустите пример с набором Accelerator к On
, и затем запустите его снова с набором Accelerator к Off
. Размеры mesh являются тем же самым до итерации 70, но отличаются в итерации 71. Окно Команды MATLAB отображает следующие строки для итераций 70 и 71 с набором Accelerator к Off
.
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
, значение по умолчанию Contraction factor.
Для сравнения Командное окно отображает следующие строки для тех же чисел итерации с набором Accelerator к On
.
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
.