このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
ライブエディタータスクの最適化における 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
ライブエディターの最適化タスクで問題を作成する
新規または既存のライブ スクリプトを開きます。ライブ エディター タブの コード セクションで、タスク をクリックして、ライブ エディター タスクのギャラリーを開きます。最適化 の下で、最適化 をクリックします。
アプローチを選択
最適化ライブ エディター タスクで、ソルバー ベースのアプローチを選択します。
問題の種類の指定
問題の種類を指定するには、次のオプションを選択します。
目的 — 非線形
制約条件 - 下限、上限、線形不等式
ソルバー - patternsearch
問題データの選択
問題データに対して次のオプションを選択します。
目的関数 — ファイルから矢印をクリックし、関数ハンドルを選択します。選択矢印をクリックし、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.