このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
ライブエディタータスクの最適化における 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
に対して、サイズ N
行 N
列の擬似ランダム対称行列 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) <= 1
と sum(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
ライブエディターの最適化タスクで問題を作成する
新しいまたは既存のライブ スクリプトを開きます。ライブ エディター タブの コード セクションで、タスク をクリックして、ライブ エディター タスクのギャラリーを開きます。最適化 の下で、最適化 をクリックします。
アプローチを選択
最適化 ライブ エディター タスクで、ソルバー ベースのアプローチを選択します。
問題の種類を指定
問題の種類を指定するには、次のオプションを選択します。
目的 — 非線形
制約条件 - 下限、上限、線形不等式
ソルバー — パターン検索
問題データの選択
問題データに対して次のオプションを選択します。
目的関数 — ファイルから矢印をクリックし、関数ハンドルを選択します。選択矢印をクリックし、funを選択します。
初期点 — x0
制約 - 下限 0
制約 - 上限 1
制約 — 線形不等式制約配列 A および b
ソルバー オプションを指定する
矢印をクリックして、タスクの ソルバー オプションの指定 セクションを展開します。次に、追加ボタンをクリックします。タスクは、アルゴリズム設定に classic アルゴリズムを指定します。
進行状況の表示
表示する 2 つのプロットを選択します。ベストバリューと評価数。
ライブ エディターの最適化 タスクは、下の図のものと一致する必要があります。
さまざまなアルゴリズムを使用してソリューションを見つける
問題のオプションを選択したら、[ライブ エディター] タブの [実行] セクションで [実行] をクリックしてソルバーを実行します。ソルバーは "classic"
patternsearch
アルゴリズムを実行し、指定された 2 つのプロットを表示します。
アルゴリズムを nups に変更します。ソルバーは新しいアルゴリズムを実行し、指定された 2 つのプロットを表示します。
ソルバーは、"nups"
アルゴリズムの実行を "classic"
アルゴリズムの約 4 分の 1 の関数評価回数で終了し、わずかに優れた (低い) 目的関数値に到達します。
最適化 ライブ エディター タスクで作業しながら、他の pattersearch
アルゴリズムやプロット関数、その他のオプションやソルバーを引き続き調べることができます。
patternsearch stopped because the mesh size was less than options.MeshTolerance.