Effacer les filtres
Effacer les filtres

fmincon optimization in matlab using OutputFcn

27 vues (au cours des 30 derniers jours)
mohammed hussein
mohammed hussein le 24 Sep 2020
Hi all
i have this example and i want to save the x viarable in each iteration not only see the final value How can i do it . all i found is using OutputFcn but i dont know how can i do it in this example below . thank you very much for your helping
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
x0 = [0,0];
options = optimoptions('fmincon','Display','iter');
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,[],options)
  2 commentaires
Mario Malic
Mario Malic le 25 Sep 2020
Modifié(e) : Mario Malic le 25 Sep 2020
Check here https://ch.mathworks.com/help/optim/ug/output-function.html there are some examples if you use the search option.
mohammed hussein
mohammed hussein le 25 Sep 2020
Thank you for your answer

Connectez-vous pour commenter.

Réponse acceptée

Michael Croucher
Michael Croucher le 25 Sep 2020
Modifié(e) : Michael Croucher le 25 Sep 2020
Following the advice at https://uk.mathworks.com/help/matlab/math/output-functions.html, we can use the 'OutputFcn' option. By putting the optimistion problem into a function, as shown below, we can take advantage of the fact that nested functions can access variables defined in the outer scope. That is, although I cannot explicitly pass the xvals array to outfun, it can access it anyway since it is a nested function.
function [x, xvals] = myproblem(x0)
xvals=[]; % This will contain the values of x where fun has been evaluated
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
options = optimoptions('fmincon','Display','iter','OutputFcn',@outfun);
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,[],options);
function stop = outfun(x,optimValues,state)
stop=false;
if isequal(state,'iter')
xvals = [xvals;x];
end
end
end
Use this as follows:
[x,xvals] = myproblem([0,0]);
x will have the final result and xvals will contain the history.
  1 commentaire
mohammed hussein
mohammed hussein le 25 Sep 2020
Thank you for your answer . this help me alot .

Connectez-vous pour commenter.

Plus de réponses (1)

Walter Roberson
Walter Roberson le 25 Sep 2020
shows an example complete with code. The runfmincon() function returns a structure in which you can ask to see all the x values.
  2 commentaires
Michael Croucher
Michael Croucher le 25 Sep 2020
That will teach me to hit 'refresh' before writing an answer :)
mohammed hussein
mohammed hussein le 25 Sep 2020
Thank you for your answer

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