How to exit an optimization function without error?
2 ビュー (過去 30 日間)
古いコメントを表示
I am using fsolve at two stages: first it finds the solution for problem A, and this solution is then used to solve problem B.
Sometimes it cannot find a solution for problem A, and then for sure i can not solve problem B, so I want fsolve (for B) to exit whenever problem A returns an exitflag < 1. How do I do this?
So far I only found that you can have the objective return an "inf" but then it will still try to backtrack, and waste time and resources. I would prefer to have something like:
if somecondition
exit fsolve
end
0 件のコメント
回答 (1 件)
Sam Chak
2023 年 11 月 6 日
編集済み: Sam Chak
2023 年 11 月 6 日
Hi @Sargondjani
Can use return.
Update: Editted the solution by using the function approach.
%% Solving Stage A Problem first
fun1 = @problem1;
x0 = 1;
[xsol1, fval, exitflag] = fminsearch(fun1, x0)
%% Test if the solution from Stage A is admissible
if exitflag <= 0
warning('Terminated due Stage A problem is infeasible.')
return % stop if condition is satisfied
else
%% Solving Stage B Problem then
fun2 = @(x) problem2(x, xsol1);
x0 = 1;
xsol2 = fsolve(fun2, x0)
end
%% Stage A Problem
function y = problem1(x)
y = - x.^2; % infeasible
% y = 1 - x.*exp(-x.^2); % feasible
end
%% Stage B Problem
function y = problem2(x, xsol) % cost function requires xsol from Stage A
y = x.^2 + 2*x + xsol;
end
7 件のコメント
Sam Chak
2023 年 11 月 6 日
Okay, I got it now. It's a coupled interdependent problem. Need some time to think.
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!