Задание опций Mesh

Расширение и сужение сетки

The MeshExpansionFactor и MeshContractionFactor опции управляет тем, какой размер сетки расширяется или сжимается при каждой итерации. С MeshExpansionFactor по умолчанию значение 2поиск шаблона умножает размер сетки на 2 после каждого успешного опроса. С MeshContractionFactor по умолчанию значение 0.5поиск шаблона умножает размер сетки на 0.5 после каждого неудачного опроса.

Вы можете просмотреть расширение и сужение размера сетки во время поиска шаблона, задав @psplotmeshsize как PlotFcn опция. Чтобы также отобразить значения размера сетки и целевой функции в командной строке, установите Display опция для 'iter'.

Для примера настройте задачу, описанную в Ограниченной Минимизации Используя patternsearch и Задачу Оптимизации Live Editor следующим образом:

  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];
  2. Создайте опции для использования GSSPositiveBasis2N метод опроса, предоставление итерационного отображения и построение графика размера сетки.

    options = optimoptions('patternsearch',...
        'PollMethod','GSSPositiveBasis2N',...
        'PlotFcn',@psplotmeshsize,...
        'Display','iter');
  3. Запустите оптимизацию.

    [x,fval,exitflag,output] = patternsearch(@lincontest7,x0,...
        Aineq,bineq,Aeq,beq,[],[],[],options);

Чтобы более четко увидеть изменения размера сетки, измените ось Y на логарифмическое масштабирование следующим образом:

  1. Выберите Axes Properties из меню Edit в окне plot.

  2. В редакторе свойств выберите вкладку Rulers.

  3. Установите 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 следующим образом:

  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];
  2. Создайте опции, включая mesh Accelerator.

    options = optimoptions('patternsearch',...
        'PollMethod','GSSPositiveBasis2N',...
        'Display','iter','AccelerateMesh',true);
  3. Запустите оптимизацию.

    [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.

Похожие темы