fmincon optimization in matlab using OutputFcn
11 views (last 30 days)
Show older comments
mohammed hussein
on 24 Sep 2020
Commented: mohammed hussein
on 25 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 Comments
Mario Malic
on 25 Sep 2020
Edited: Mario Malic
on 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.
Accepted Answer
Michael Croucher
on 25 Sep 2020
Edited: Michael Croucher
on 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.
More Answers (1)
Walter Roberson
on 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 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!