Main Content

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

ライブエディタータスクの最適化における patternsearch アルゴリズムの調査

R2022b 以降、patternsearch には 4 つのアルゴリズム オプションがあります。

  • "classic"

  • "nups" (Nonuniform Pattern Search)

  • "nups-gps"

  • "nups-mads"

この例では、最適化 ライブ エディター タスクを使用して問題を解決するときに、さまざまな patternsearch アルゴリズムを試す方法を示します。

問題を指定

二次プラス線形の目的関数、境界、および 2 つの線形制約を持つ最適化問題を設定します。通常、このタイプの問題には quadprog が最適なソルバーです。ただし、この例では patternsearch を使用しているため、さまざまなアルゴリズムを試すことができます。

この問題の変数の数を N = 10 に設定します。目的関数 fun(x) = x*Q*x' N*x*z に対して、サイズ NN 列の擬似ランダム対称行列 Q と長さ N の擬似ランダムベクトル z を作成します。

N = 10;
rng default
x0 = rand(1,N);
x0 = x0/(2*sum(x0));
Q = 6*eye(N) + randn(N);
Q = (Q + Q');
z = rand(N,1);
fun = @(x)x*Q*x' - N*x*z;

問題に線形制約を設定します: sum(x) <= 1sum(i*x) <= N/3。ここで、 i はベクトル x のインデックスです。

A = [ones(1,N);1:N]; % sum(x) <= 1, sum(i*x) <= N/3
b = [1;N/3];

Q が正定値であり、問題が凸であることを確認します。

eig(Q)
ans = 10×1

    1.5071
    4.0347
    7.3749
    9.0561
   11.6929
   11.9473
   13.0976
   15.2099
   16.1175
   18.8949

ライブエディターの最適化タスクで問題を作成する

新しいまたは既存のライブ スクリプトを開きます。ライブ エディター タブの コード セクションで、タスク をクリックして、ライブ エディター タスクのギャラリーを開きます。最適化 の下で、最適化 をクリックします。

アプローチを選択

最適化 ライブ エディター タスクで、ソルバー ベースのアプローチを選択します。

optimizelet_choose.png

問題の種類を指定

問題の種類を指定するには、次のオプションを選択します。

  • 目的 — 非線形

  • 制約条件 - 下限、上限、線形不等式

  • ソルバー — パターン検索

問題データの選択

問題データに対して次のオプションを選択します。

  • 目的関数 — ファイルから矢印をクリックし、関数ハンドルを選択します。選択矢印をクリックし、funを選択します。

  • 初期点 — x0

  • 制約 - 下限 0

  • 制約 - 上限 1

  • 制約 — 線形不等式制約配列 A および b

ソルバー オプションを指定する

矢印をクリックして、タスクの ソルバー オプションの指定 セクションを展開します。次に、追加ボタンをクリックします。タスクは、アルゴリズム設定に classic アルゴリズムを指定します。

進行状況の表示

表示する 2 つのプロットを選択します。ベストバリュー評価数

ライブ エディターの最適化 タスクは、下の図のものと一致する必要があります。

optimizelet_patternsearch_setup.png

さまざまなアルゴリズムを使用してソリューションを見つける

問題のオプションを選択したら、[ライブ エディター] タブの [実行] セクションで [実行] をクリックしてソルバーを実行します。ソルバーは "classic" patternsearch アルゴリズムを実行し、指定された 2 つのプロットを表示します。

ps_run1.png

アルゴリズムを nups に変更します。ソルバーは新しいアルゴリズムを実行し、指定された 2 つのプロットを表示します。

ps_run2.png

ソルバーは、"nups" アルゴリズムの実行を "classic" アルゴリズムの約 4 分の 1 の関数評価回数で終了し、わずかに優れた (低い) 目的関数値に到達します。

最適化 ライブ エディター タスクで作業しながら、他の pattersearch アルゴリズムやプロット関数、その他のオプションやソルバーを引き続き調べることができます。

Live Task
patternsearch stopped because the mesh size was less than options.MeshTolerance.

参考

関連するトピック