Используйте кэш

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

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

Примечание

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

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

Смотрите также

Похожие темы