Работа с файлами контрольных точек

Контрольная точка для перезапуска

Файл контрольной точки содержит данные о процессе оптимизации. Чтобы получить файл контрольной точки, используйте CheckpointFile опция.

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

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

Например, предположим, что вы запускаете оптимизацию с 'check1' файл контрольной точки, а затем нажмите кнопку Stop вскоре после запуска оптимизации.

options = optimoptions('surrogateopt','CheckpointFile','check1.mat');
lb = [-6,-8];
ub = -lb;
fun = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
[x,fval,exitflag,output] = surrogateopt(fun,lb,ub,options)
Optimization stopped by a plot function or output function.

x =

     0     0


fval =

     1


exitflag =

    -1


output = 

  struct with fields:

        elapsedtime: 15.3330
          funccount: 30
    constrviolation: 0
               ineq: [1×0 double]
           rngstate: [1×1 struct]
            message: 'Optimization stopped by a plot function or output function.'

Примечание

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

Чтобы возобновить оптимизацию, вызовите surrogateopt с 'check1.mat' аргумент.

[x,fval,exitflag,output] = surrogateopt('check1.mat')
Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.

x =

    1.0186    1.0377


fval =

   3.4902e-04


exitflag =

     0


output = 

  struct with fields:

        elapsedtime: 181.5824
          funccount: 200
    constrviolation: 0
               ineq: [1×0 double]
           rngstate: [1×1 struct]
            message: 'Surrogateopt stopped because it exceeded the function evaluation limit set by ↵'options.MaxFunctionEvaluations'.'

Измените опции, чтобы расширить или контролировать оптимизацию

Можно расширить оптимизацию, останавливается ли она из-за непредвиденного события или нет, изменив критерии остановки в опциях. Можно также контролировать оптимизацию, отображая информацию при каждой итерации.

Примечание

surrogateopt позволяет изменять только ограниченный набор опций. Для надежности обновляйте исходную структуру опций вместо создания новых опций.

Список опций, которые можно изменить при перезапуске, см. opts.

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

opts = optimoptions(options,'MaxFunctionEvaluations',400,...
    'PlotFcn','surrogateoptplot');
[x,fval,exitflag,output] = surrogateopt('check1.mat',opts)
Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.

x =

    1.0186    1.0377


fval =

   3.4902e-04


exitflag =

     0


output = 

  struct with fields:

        elapsedtime: 959.7619
          funccount: 400
    constrviolation: 0
               ineq: [1×0 double]
           rngstate: [1×1 struct]
            message: 'Surrogateopt stopped because it exceeded the function evaluation limit set by ↵'options.MaxFunctionEvaluations'.'

Новая функция построения графика строится с начала оптимизации, хотя вы запустили функцию построения графика только после того, как решатель остановился на номере 200 вычисления функции. The 'surrogateoptplot' функция построения графика также показывает оценочные номера, где оптимизация остановилась и где она перезапустилась из файла контрольной точки.

Код для робастной оптимизации суррогата

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

% Assume that myfun, lb, and ub exist
if isfile('saveddata.mat')
    [x,fval,exitflag,output] = surrogateopt('saveddata.mat');
else
    options = optimoptions("surrogateopt","CheckpointFile",'saveddata.mat');
    [x,fval,exitflag,output] = surrogateopt(myfun,lb,ub,options);
end

См. также

Похожие темы