Опрос типов

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

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

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.

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

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

MATLAB возвращает таблицу итераций и решения.

x =

     0     9


fval =

   -16

Алгоритм начинает a=evaluating функцию в начальной точке, f (0, 5) = 0. Опрос оценивает следующее во время своих первых итераций.

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.

Затем установите UseCompletePoll к true и повторно выполненный оптимизация.

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

На этот раз поиск шаблона находит глобальный минимум в (0, 0). Различие между этим запуском и предыдущим - это с UseCompletePoll установите на true, в первой итерации поиск шаблона опрашивает все четыре точки 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 эффективен для линейно ограниченных проблем. Однако предсказание последствий КПД других опций опроса затрудняет, как знает, какой тип опроса работает лучше всего с другими ограничениями.

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

Проблема эквивалентна в, Решают Используя patternsearch в, Оптимизируют Live Editor Тэска. Эта линейно ограниченная проблема использует 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. Установите первоначальные опции и целевую функцию.

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

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

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

    [x,fval,exitflag,outputgps2non] = patternsearch(fun,x0,...
        Aineq,bineq,Aeq,beq,[],[],[],options);
  6. Продолжите подобным способом создавать структуры output для других методов опроса с 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 структура.

В качестве альтернативы можно получить доступ к данным из структур output.

[outputgps2noff.funccount,outputgps2noff.iterations]
ans =

        1462         136

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

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

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

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

    1. 'GSSPositiveBasisNp1' с UseCompletePoll установите на true (функциональное количество 491)

    2. 'GSSPositiveBasisNp1' с UseCompletePoll установите на false (функциональное количество 533)

    3. 'GSSPositiveBasis2N' с UseCompletePoll установите на false (функциональное количество 758)

    4. 'GSSPositiveBasis2N' с UseCompletePoll установите на true (функциональное количество 889)

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

  • Для этой проблемы самым эффективным опросом является 'GSSPositiveBasisNp1' с UseCompletePoll установите на true, несмотря на то, что UseCompletePoll установка имеет только небольшое значение. Наименее эффективным опросом является 'MADSPositiveBasis2N' с UseCompletePoll установите на true. В этом случае, UseCompletePoll установка имеет существенное значение.

Похожие темы