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

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

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

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

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

Похожие темы