exponenta event banner

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

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

Файл контрольных точек содержит данные о процессе оптимизации. Для получения файла контрольных точек используйте 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. '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

См. также

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