exponenta event banner

Использовать кэш

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

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

Примечание

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

Примечание

Cache не работает при параллельном запуске решателя.

Например, настройте задачу, описанную в разделе Минимизация ограничений с помощью поиска массива и задачи «Оптимизировать интерактивный редактор», следующим образом.

  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

См. также

Связанные темы