Main Content

このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。

simulannealbndを使用した関数の最適化、問題ベース

この例では、目的が関数ファイルであり、その内容が不明である可能性がある場合 (「ブラック ボックス」関数) に、問題ベースのアプローチでシミュレーテッド アニーリングを使用して関数を最小化する方法を示します。この例を実行すると、最小化する関数 dejong5fcn(x) が使用可能になります。関数をプロットします。

dejong5fcn

2 次元最適化変数 x を作成します。dejong5fcn 関数は変数が行ベクトルであると想定しているため、x を 2 要素の行ベクトルとして指定します。

x = optimvar("x",1,2);

dejong5fcn を目的関数として使用するには、 fcn2optimexpr を使用して関数を最適化式に変換します。

fun = fcn2optimexpr(@dejong5fcn,x);

目的関数 fun を使用して最適化問題を作成します。

prob = optimproblem("Objective",fun);

すべてのコンポーネントの変数境界を -50 から 50 に設定します。スカラー境界を指定すると、ソフトウェアは境界をすべての変数に拡張します。

x.LowerBound = -50;
x.UpperBound = 50;

境界内に疑似ランダムな初期点を設定します。初期点は、フィールド x を持つ構造体です。

rng default % For reproducibility
x0.x = x.LowerBound + rand(size(x.LowerBound)).*x.UpperBound;

simulannealbnd ソルバーを指定して問題を解きます。

[sol,fval] = solve(prob,x0,"Solver","simulannealbnd")
Solving problem using simulannealbnd.
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
sol = struct with fields:
    x: [-32.0371 -31.8792]

fval = 0.9980

参考

| |

関連するトピック