Matlab: остановка оценки fmincon без потери данных

Прямо сейчас fmincon решает для меня проблему минимизации. Функция минимизации использует parfor для полноты картины.

Я использую эти варианты

options = optimoptions(@fmincon,'Display','iter', 'MaxIter',1000000,'MaxFunEvals',1000000,'TypicalX',[1e-1,1e-2,1e0,1e1,1e2,1e3, 1e-1])

и, к сожалению, оценка занимает гораздо больше времени, чем ожидалось. Как я могу завершить оценку и получить точку параметра, которую fmincon нашел до сих пор. Этого должно быть достаточно для меня, потому что значение функции больше не уменьшается. Он рассчитывает с 12 часов и сейчас только на итерации 6550.

Итак, есть ли способ прекратить fmincon-оценку и получить текущий результат точки параметра?

Заранее спасибо!

Привет, Пейта


person Pejta    schedule 03.05.2015    source источник
comment
возможный дубликат matlab: остановить и продолжить выполнение из отладчика возможно? – см. также это, это и это. Если вы надеетесь сохранить результаты уже запущенного кода, вам может не повезти. Вы должны предвидеть такие вещи.   -  person horchler    schedule 03.05.2015
comment
@horchler не дубликат, вполне возможно дать почти то, что хочет OP   -  person Karl    schedule 03.05.2015


Ответы (1)


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

Выходная функция

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

http://www.mathworks.com/help/optim/ug/optimization-options-reference.html#f11022

options = optimoptions(@solvername,'OutputFcn', @outfun);

определяет OutputFcn как дескриптор outfun. Чтобы указать более одной выходной функции, используйте синтаксис

options = optimoptions(@solvername,'OutputFcn',{@outfun, @outfun2});

Это должно позволить вам сохранять ваш прогресс на каждой итерации.

person Karl    schedule 03.05.2015