Опрос типов

Используя полный опрос в обобщенном поиске шаблона

Как пример, рассмотрите следующую функцию.

f(x1,x2)={x12+x2225для x12+x2225x12+(x29)216для x12+(x29)2160в противном случае.

Следующие данные показывают график функции.

 Код для генерации фигуры

Глобальный минимум функции происходит в (0, 0), где ее значение-25. Однако функция также имеет локальный минимум в (0, 9), где его значение-16.

Создать файл, который вычисляет функцию, копию и вставляет следующий код в новый файл в Редакторе MATLAB®.

function z = poll_example(x)
if x(1)^2 + x(2)^2 <= 25
    z = x(1)^2 + x(2)^2 - 25;
elseif x(1)^2 + (x(2) - 9)^2 <= 16
    z = x(1)^2 + (x(2) - 9)^2 - 16;
else z = 0;
end

Затем сохраните файл как poll_example.m в папке на пути MATLAB.

Чтобы запустить поиск шаблона на функции, введите следующее в приложение Оптимизации:

  • Установите Solver на patternsearch.

  • Установите Objective function на @poll_example.

  • Установите Start point на [0 5].

  • Установите Level of display на Iterative в опциях Display to command window.

Нажмите Start, чтобы запустить поиск шаблона с набором Complete poll к Off, его значению по умолчанию.

Также запускать эту проблему с помощью функций командной строки:

options = optimoptions('patternsearch','Display','iter');
[x,fval] = patternsearch(@poll_example,[0,5],...
    [],[],[],[],[],[],[],options);

Отображения приложения Оптимизации результаты в панели Run solver and view results, как показано в следующей фигуре.

Поиск шаблона возвращает локальный минимум в (0, 9). В начальной точке, (0, 5), значение целевой функции 0. В первой итерации поиск опрашивает следующие точки mesh.

f ((0, 5) + (1, 0)) = f (1, 5) = 0

f ((0, 5) + (0, 1)) = f (0, 6) = -7

Как только поиск опрашивает точку mesh (0, 6), в котором значение целевой функции является меньше, чем в начальной точке, это прекращает опрашивать текущую mesh и устанавливает текущую точку в следующей итерации к (0, 6). Следовательно, поиск перемещается к локальному минимуму в (0, 9) в первой итерации. Вы видите это путем рассмотрения первых двух строк отображения командной строки.

Iter     f-count     f(x)      MeshSize     Method
    0        1         0             1      
    1        3        -7             2     Successful Poll

Обратите внимание на то, что поиск шаблона выполняет только две оценки целевой функции при первой итерации, увеличивая общее функциональное количество от 1 до 3.

Затем, установите Complete poll на On и нажмите Start. Также в командной строке:

options.UseCompletePoll = true;
[x,fval] = patternsearch(@poll_example,[0,5],...
    [],[],[],[],[],[],[],options);

Панель Run solver and view results отображает следующие результаты.

На этот раз поиск шаблона находит глобальный минимум в (0, 0). Различие между этим выполнением и предыдущим - то, что с набором Complete poll к On, в первой итерации поиск шаблона опрашивает все четыре точки mesh.

f ((0, 5) + (1, 0)) = f (1, 5) = 0

f ((0, 5) + (0, 1)) = f (0, 6) = -6

f ((0, 5) + (-1, 0)) = f (-1, 5) = 0

f ((0, 5) + (0, -1)) = f (0, 4) = -9

Поскольку последняя точка mesh имеет самое низкое значение целевой функции, поиск шаблона выбирает его как текущую точку в следующей итерации. Первые две строки отображения командной строки показывают это.

Iter     f-count     f(x)      MeshSize     Method
    0        1         0             1      
    1        5        -9             2     Successful Poll

В этом случае целевая функция выполнена четыре раза в первой итерации. В результате шаблон ищет перемещения к глобальному минимуму в (0, 0).

Следующая фигура сравнивает последовательность точек, возвращенных, когда Complete poll установлен в Off с последовательностью, когда Complete poll является On.

 Код для генерации фигуры

Сравните эффективность опций опроса

Этот пример показывает, как несколько опций опроса взаимодействуют с точки зрения итераций и общих функциональных оценок. Основные результаты:

  • GSS более эффективен, чем GPS или MADS для линейно ограниченных проблем.

  • Неясна ли установка UseCompletePoll к эффективности увеличений true или эффективности уменьшений, несмотря на то, что это влияет на количество итераций.

  • Точно так же, ли наличие опроса 2N более или менее эффективно, чем наличие опроса Np1 также неясно. Самым эффективным опросом является GSS Positive Basis Np1 с набором Complete poll к on. Наименее эффективным является MADS Positive Basis Np1 с набором Complete poll к on.

Примечание

Эффективность алгоритма зависит от проблемы. GSS эффективен для линейно ограниченных проблем. Однако предсказание последствий эффективности других опций опроса является трудным, как знает, какой тип опроса работает лучше всего с другими ограничениями.

Настройка задач

Проблема эквивалентна в Выполнении Поиска Шаблона на Примере. Эта линейно ограниченная проблема использует файл lincontest7, который идет с тулбоксом:

  1. Введите следующее в свое рабочее пространство MATLAB:

    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. Откройте приложение Оптимизации путем ввода optimtool в командной строке.

  3. Выберите решатель patternsearch.

  4. Введите проблему и ограничения, как изображено.

  5. Гарантируйте, что Poll method является GPS Positive basis 2N.

Сгенерируйте результаты

  1. Запустите оптимизацию.

  2. Выберите File > Export to Workspace.

  3. Экспортируйте результаты и назовите их gps2noff.

  4. Установите Options > Poll > Complete poll на on.

  5. Запустите оптимизацию.

  6. Экспортируйте результат и назовите его gps2non.

  7. Установите Options > Poll > Poll method на GPS Positive basis Np1 и установите Complete poll на off.

  8. Запустите оптимизацию.

  9. Экспортируйте результат и назовите его gpsnp1off.

  10. Установите Complete poll на on.

  11. Запустите оптимизацию.

  12. Экспортируйте результат и назовите его gpsnp1on.

  13. Продолжите подобным способом создавать структуры решения для других методов опроса с набором Complete poll on и off: gss2noff, gss2non, gssnp1off, gssnp1on, mads2noff, mads2non, madsnp1off и madsnp1on.

Сгенерируйте результаты в командной строке

Также можно сгенерировать результаты, описанные в, Генерируют Результаты в командной строке.

  1. Установите первоначальные опции и целевую функцию.

    options = optimoptions('patternsearch',...
        'PollMethod','GPSPositiveBasis2N',...
        'PollOrderAlgorithm','consecutive',...
        'UseCompletePoll',false);
    fun = @lincontest7;
  2. Запустите оптимизацию, назвав структуру output outputgps2noff.

    [x,fval,exitflag,outputgps2noff] = patternsearch(fun,x0,...
        Aineq,bineq,Aeq,beq,[],[],[],options);
  3. Установите опции использовать полный опрос.

    options.UseCompletePoll = true;
  4. Запустите оптимизацию, назвав структуру output outputgps2non.

    [x,fval,exitflag,outputgps2non] = patternsearch(fun,x0,...
        Aineq,bineq,Aeq,beq,[],[],[],options);
  5. Установите опции использовать метод опроса 'GPSPositiveBasisNp1' а не использовать полный опрос.

    options.PollMethod = 'GPSPositiveBasisNp1';
    options.UseCompletePoll = false;
  6. Запустите оптимизацию, назвав структуру output outputgps2np1off.

    [x,fval,exitflag,outputgps2np1off] = patternsearch(fun,x0,...
        Aineq,bineq,Aeq,beq,[],[],[],options);
  7. Продолжите подобным способом создавать выходные структуры для других методов опроса с набором UseCompletePoll true и false: outputgss2noff, outputgss2non, outputgssnp1off, outputgssnp1on, outputmads2noff, outputmads2non, outputmadsnp1off и outputmadsnp1on.

Исследуйте результаты

У вас есть результаты 12 выполнений оптимизации. Следующая таблица показывает эффективность выполнений, измеренных в общих функциональных количествах и в итерациях. Ваши результаты MADS могли отличаться, поскольку MADS является стохастическим алгоритмом.

АлгоритмФункциональное количествоИтерации
GPS2N, полный опрос прочь1462136
GPS2N, полный опрос на139696
GPSNp1, полный опрос прочь864118
GPSNp1, полный опрос на1007104
GSS2N, полный опрос прочь75884
GSS2N, полный опрос на88974
GSSNp1, полный опрос прочь53394
GSSNp1, полный опрос на49170
MADS2N, полный опрос прочь922162
MADS2N, полный опрос на2285273
MADSNp1, полный опрос прочь1155201
MADSNp1, полный опрос на1651201

Чтобы получить, скажем, первую строку в таблице, введите gps2noff.output.funccount и gps2noff.output.iterations. Можно также исследовать опции в редакторе Переменных путем двойного клика по опциям в Браузере Рабочей области, и затем двойного клика по структуре output.

Также, если вы запустили проблемы в командной строке, можно получить доступ к данным из выходных структур.

[outputgps2noff.funccount,outputgps2noff.iterations]
ans =

        1462         136

Основные результаты, подбираемые из таблицы:

  • Установка Complete poll к on обычно понижает количество итераций для GPS и GSS, но изменение в количестве функциональных оценок непредсказуемо.

  • Установка Complete poll к on не обязательно изменяет количество итераций для MADS, но существенно увеличивает число функциональных оценок.

  • Самые эффективные настройки алгоритма/опций, с эффективностью, означающей самое низкое функциональное количество:

    1. GSS Positive basis Np1 с набором Complete poll к on (функциональное количество 491)

    2. GSS Positive basis Np1 с набором Complete poll к off (функциональное количество 533)

    3. GSS Positive basis 2N с набором Complete poll к off (функциональное количество 758)

    4. GSS Positive basis 2N с набором Complete poll к on (функциональное количество 889)

    Другие методы опроса имели функциональные количества, превышающие 900.

  • Для этой проблемы самым эффективным опросом является GSS Positive Basis Np1 с набором Complete poll к on, несмотря на то, что установка Complete poll имеет только небольшое значение. Наименее эффективным опросом является MADS Positive Basis 2N с набором Complete poll к on. В этом случае установка Complete poll имеет существенное значение.

Похожие темы