How to exit an optimization function without error?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponses (1)
Sam Chak
le 6 Nov 2023
Modifié(e) : Sam Chak
le 6 Nov 2023
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 commentaires
Sam Chak
le 6 Nov 2023
Okay, I got it now. It's a coupled interdependent problem. Need some time to think.
Voir également
Catégories
En savoir plus sur Solver Outputs and Iterative Display dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!