最適化計算において、​ある条件で最適化計算​を中断することはでき​ますか?

2 views (last 30 days)
MathWorks Support Team
MathWorks Support Team on 25 Oct 2013
fminsearch 関数などを用いた最適化計算において、目的関数の値がある一定以下の値になったら、最適化計算を終了させることはできますか?

Accepted Answer

MathWorks Support Team
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 ユーザガイド:出力関数

More Answers (0)

Products


Release

R2008b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!