最適化計算において、ある条件で最適化計算を中断することはできますか?
2 views (last 30 days)
Show older comments
MathWorks Support Team
on 25 Oct 2013
Edited: MathWorks Support Team
on 15 Mar 2021
fminsearch 関数などを用いた最適化計算において、目的関数の値がある一定以下の値になったら、最適化計算を終了させることはできますか?
Accepted Answer
MathWorks Support Team
on 15 Mar 2021
Edited: MathWorks Support Team
on 15 Mar 2021
optimset関数で設定する "OutputFcn"パラメータを使用することで可能です。
OutputFcn パラメータには、Output Function と呼ばれるコールバック関数を設定します。
Output Function は、決められた関数書式(下記例を参照)に従って定義する必要があり、最適化計算の各繰り返し計算中に実行されます。
以下に実行手順を示します。
例: 目的関数の値が、2 よりも小さい値に収束した場合は最適化計算を終了させる
1) Output Function として、下記のような MATLAB関数(outfun.m)を作成します。
function stop = outfun(x,optimValues,state)
% OUTFUN: Output Functionとして定義
% 入力引数
% x: 目的変数
% optimValues: 現在の繰り返し計算での結果を含む構造体
% state: 現在の最適化計算の状態('init','interrupt','iter','done'のいずれか)
% 出力引数
% stop: 最適化計算の継続(false)/停止(true)を決定するフラグ
stop = false;
% 終了条件
if optimValues.fval < 2 % 目的関数の値が2より小さい場合
stop = true; % 計算を終了する
end
2) コマンドウィンドウで下記コマンドを実行します。
fun = @(x)x.^2; % 目的関数定義
optim = optimset('OutputFcn',@outfun); % OutputFcnの設定
[X,FVAL] = fminsearch(fun,10,optim) % 最適化計算
最適化はユーザによって中断されました。
X =
-1
FVAL =
1
参考情報が以下の URL よりご覧いただけます。
・MATLAB ユーザガイド:出力関数
0 Comments
More Answers (0)
Categories
Find more on オプションの設定 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!