Effacer les filtres
Effacer les filtres

How to exit an optimization function without error?

3 vues (au cours des 30 derniers jours)
Sargondjani
Sargondjani le 6 Nov 2023
Commenté : Sam Chak le 6 Nov 2023
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

Réponses (1)

Sam Chak
Sam Chak le 6 Nov 2023
Modifié(e) : Sam Chak le 6 Nov 2023
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)
Exiting: Maximum number of function evaluations has been exceeded - increase MaxFunEvals option. Current function value: -4017345110647497376329610801883911649791527634988546654208.000000
xsol1 = 6.3383e+28
fval = -4.0173e+57
exitflag = 0
%% 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
Warning: Terminated due Stage A problem is infeasible.
%% 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
Sargondjani
Sargondjani le 6 Nov 2023
but i need to solve x1 for every value of x2, meaning when x2 changes, so will x1. your approach does not allow for that.
Sam Chak
Sam Chak le 6 Nov 2023
Okay, I got it now. It's a coupled interdependent problem. Need some time to think.

Connectez-vous pour commenter.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by