MATLAB Answers

最適化計算における反復表記のフォーマットについて

11 views (last 30 days)
YT
YT on 6 Jul 2020
Commented: michio on 8 Jul 2020 at 21:58
以下のオプションを設定し、最適化計算の収束履歴を出力したいのですが、
表示されるf(x)の値が「1.234e8」というような指数表記となり、全体の数値を確認できません。
options = optimoptions('particleswarm','Display','iter');
数値の詳細まで見るために表示フォーマットを変更する方法はないでしょうか。

  0 Comments

Sign in to comment.

Accepted Answer

michio
michio on 7 Jul 2020
コマンドウィンドウに表示される数値のフォーマットを変えるといかがでしょう。
例えば
format long
と実行した後、最適化を試してみて頂けますでしょか?

  4 Comments

Show 1 older comment
michio
michio on 7 Jul 2020
補足頂きありがとうございます。勘違いしておりました。
その表示桁数を操作するオプションは無いようです。開発チームにフィードバックいたします。
fmincon のオプションで OutputFcn という項目がありますので、ここで表示させるようコードを組むことで桁数を増やして表示させることはできるかと考えています。
例えば、iter と f(x) だけ表示させる簡易的なものでございますが・・
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
x0 = [-1,2];
A = [1,2];
b = 1;
options = optimoptions('fmincon','Display','none','OutputFcn', @outfun);
x = fmincon(fun,x0,A,b,[],[],[],[],[],options)
ここで outfun.m として以下の関数を別途定義ください。
function stop = outfun(x,optimValues,state)
stop = false;
switch state
case 'iter'
% Make updates to plot or guis as needed
disp([sprintf('%d',optimValues.iteration),' ', ...
sprintf('%0.15e',optimValues.fval)])
case 'interrupt'
% Probably no action here. Check conditions to see
% whether optimization should quit.
case 'init'
% Setup for plots or guis
disp('Iter f(x)');
case 'done'
% Cleanup of plots, guis, or final plot
stop = true;
otherwise
end
YT
YT on 8 Jul 2020 at 9:50
ご提示いただいたようにOutputFcn を自分で定義することで、
各反復における最良値f(x)を任意のフォーマットで示すことができました。
おかげさまでOutputFcnに関する勉強にもなりました。ありがとうございました。
michio
michio on 8 Jul 2020 at 21:58
よかったです!ご連絡頂きありがとうございました。

Sign in to comment.

More Answers (0)