Использование кэша

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

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

Примечание

Когда Cache установлено на Onпоиск шаблона может не идентифицировать точку в текущем mesh, которая улучшает целевую функцию, поскольку она находится в пределах заданного допуска точки в кэше. В результате поиск по шаблону может выполняться для большего количества итераций с Cache установленным значением On чем с Cache установленным на Off. Это, как правило, хорошая идея сохранить значение Tolerance очень маленьким, особенно для высоко нелинейных целевых функций.

Примечание

Cache не работает, когда вы запускаете решатель параллельно.

Для примера настройте задачу, описанную в Ограниченной Минимизации Используя 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' метод опроса. Отключите отображение.

    opts = optimoptions('patternsearch','PollMethod','GSSPositiveBasis2N',...
        'PlotFcn',{@psplotbestf,@psplotfuncount},'Display','none');
  3. Запустите оптимизацию.

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

После концов поиска шаблона графики появляются как показано на следующем рисунке.

Обратите внимание, что общее количество функций составляет 758.

Теперь установите Cache опция для 'On' и еще раз запустите пример.

opts.Cache = 'on';
[x2,fval2,exitflag2,output2] = patternsearch(@lincontest7,x0,...
    Aineq,bineq,Aeq,beq,[],[],[],opts);

Общее количество функций уменьшается до 735.

[output.funccount,output2.funccount]
ans =

   758   735

См. также

Похожие темы