fmincon optimization in matlab using OutputFcn
7 ビュー (過去 30 日間)
古いコメントを表示
mohammed hussein
2020 年 9 月 24 日
コメント済み: mohammed hussein
2020 年 9 月 25 日
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 件のコメント
Mario Malic
2020 年 9 月 25 日
編集済み: Mario Malic
2020 年 9 月 25 日
Check here https://ch.mathworks.com/help/optim/ug/output-function.html there are some examples if you use the search option.
採用された回答
Michael Croucher
2020 年 9 月 25 日
編集済み: Michael Croucher
2020 年 9 月 25 日
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 件)
Walter Roberson
2020 年 9 月 25 日
shows an example complete with code. The runfmincon() function returns a structure in which you can ask to see all the x values.
2 件のコメント
参考
カテゴリ
Help Center および File Exchange で Surrogate Optimization についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!