Установите опции Mesh

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

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

Можно просмотреть расширение и сокращение размера mesh во время поиска шаблона установкой @psplotmeshsize как PlotFcn опция. Чтобы также отобразить значения размера mesh и целевой функции при командной строке, установите 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 опросите метод, дайте итеративное отображение и постройте размер mesh.

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

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

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

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

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

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

  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.

    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 не включен. Вы видите эффект акселератора 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.

Похожие темы