Остановите fminsearch, когда целевая функция достигнет определенного значения - PullRequest
0 голосов
/ 06 апреля 2019

Как остановить fminsearch, когда целевая функция превысила определенное значение (минимум или максимум)

options = optimset('MaxFunEvals',9999);
[x,fval,exitflag,output]  =  fminsearch(@(var)objectiveFunction(variables), changingParameters,options);

Как остановить функцию, если я достигну определенного значения целевой функции (например, 1000) [в течение 9999 итераций]

Я пытался 'TolFun', я не уверен, что это правильно

options = optimset('MaxFunEvals',999,'TolFun',1000);
[x,fval,exitflag,output]  =  fminsearch(@(var)objectiveFunction(variables), changingParameters,options);

1 Ответ

1 голос
/ 07 апреля 2019

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

function stop = custom_stop_fun(~, optimValues, ~)
if optimValues.fval >= 1000
    stop = true;
else
    stop = false;
end
end

и затем установить его с помощью

options.OutputFcn = @custom_stop_fun;

Ознакомьтесь с полной OutputFcn документацией

...