メインコンテンツ

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

パターン探索オプション

パターン探索のオプション

optimoptions を使用して patternsearch のオプションを設定します。

options = optimoptions("patternsearch",...
    Option1=value1,Option2=value2);
  • いくつかのオプションは italics にリストされています。これらのオプションは、optimoptions が返すリストには表示されません。optimoptions がこれらのオプション値を非表示にする理由については、optimoptions で非表示になっているオプション を参照してください。

  • ソルバーにオプションを渡すようにしてください。それ以外の場合、patternsearch はデフォルトのオプション値を使用します。

    [x,fval] = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

アルゴリズム オプション

Algorithm は、patternsearch が問題を解決するために使用するアルゴリズムを指定します。

  • "classic"パターン探索ポーリングの仕組み で説明されている元のアルゴリズムを使用します。

  • "nups"非均一パターン探索(NUPS)アルゴリズム で説明されている非均一パターン探索アルゴリズムを使用します。

  • "nups-gps" — GPS (一般化パターン探索) ポーリング アルゴリズムに制限された非均一パターン探索アルゴリズムを使用します (OrthoMADS (直交メッシュ適応直接探索) ポーリングは使用しません)。

  • "nups-mads" — OrthoMADS ポーリング アルゴリズム (GPS ポーリングなし) に制限された非均一パターン探索アルゴリズムを使用します。

アルゴリズムの効果の例については、patternsearchアルゴリズムを探索する および ライブエディタータスクの最適化における patternsearch アルゴリズムの探索 を参照してください。

プロット オプション

PlotFcn は、patternsearch または paretosearch によって各反復で呼び出されるプロット関数を指定します。PlotFcn オプションを組み込みプロット関数名またはプロット関数へのハンドルに設定します。プロット ウィンドウの Stop ボタンをクリックすると、いつでもアルゴリズムを停止できます。たとえば、最適な関数値を表示するには、options を次のように設定します。

options = optimoptions("patternsearch",PlotFcn="psplotbestf");

複数のプロットを表示するには、組み込みのプロット関数名のセル配列または関数ハンドルのセル配列を使用します。

options = optimoptions("patternsearch",...
    PlotFcn={@plotfun1, @plotfun2, ...});

ここで、@plotfun1@plotfun2 などはプロット関数への関数ハンドルです。複数のプロット関数を指定すると、すべてのプロットが同じウィンドウにサブプロットとして表示されます。任意のサブプロットを右クリックすると、別の図ウィンドウに大きなバージョンが表示されます。

patternsearch または単一の目的関数を持つ paretosearch で使用可能なプロット関数:

  • "psplotbestf" — 最適な目的関数の値をプロットします。

  • "psplotfuncount" — 関数評価の回数をプロットします。

  • "psplotmeshsize" — メッシュ サイズをプロットします。

  • "psplotbestx" — 現在の最良点をプロットします。

  • "psplotmaxconstr" — 最大非線形制約違反をプロットします。

  • 独自のプロット関数を作成して使用することもできます。プロット関数の構造 はカスタム プロット関数の構造について説明しています。任意のカスタム関数を関数ハンドルとして渡します。例については、カスタムプロット関数を参照してください。

複数の目的関数を持つ paretosearch の場合、関数ハンドルとして渡すカスタム関数、または次のいずれかの関数を選択できます。

  • "psplotfuncount" — 関数評価の回数をプロットします。

  • "psplotmaxconstr" — 最大非線形制約違反をプロットします。

  • "psplotdistance" — 距離メトリックをプロットします。paretosearch アルゴリズムを参照してください。

  • "psplotparetof" — 目的関数の値をプロットします。3 つ以下の目標に適用されます。

  • "psplotparetox" —パラメーター空間内の現在のポイントをプロットします。3 次元以下に適用されます。

  • "psplotspread" — 広がりメトリックをプロットします。paretosearch アルゴリズムを参照してください。

  • "psplotvolume" — ボリュームメトリックをプロットします。paretosearch アルゴリズムを参照してください。

patternsearch の場合、PlotInterval オプションは、プロット関数の連続した呼び出し間の反復回数を指定します。

プロット関数の構造

プロット関数の最初の行は次の形式をとる。

function stop = plotfun(optimvalues, flag)

関数への入力引数は

  • optimvalues — ソルバーの現在の状態に関する情報を含む構造体。この構造体には、patternsearch の次のフィールドが含まれています。

    • x — 現在のポイント

    • iteration — 反復回数

    • fval — 目的関数の値

    • meshsize — 現在のメッシュサイズ

    • funccount — 関数評価の回数

    • method — 最後の反復で使用されたメソッド

    • TolFun — 最後の反復における関数値の許容範囲

    • TolX — 最後の反復における x 値の許容範囲

    • nonlinineq — 非線形不等式制約。非線形制約関数が指定されている場合にのみ表示されます。

    • nonlineq — 非線形等式制約。非線形制約関数が指定されている場合にのみ表示されます。

    この構造体には、paretosearch の次のフィールドが含まれています。

  • flag — プロット関数が呼び出される現在の状態。flagの可能な値は

    • "init" — 初期化状態

    • "iter" — 反復状態

    • "interrupt" — 中級ステージ

    • "done" — 最終状態

    flag の詳細については、出力関数の構造 を参照してください。

追加パラメーターの受け渡し は、関数に追加のパラメーターを提供する方法について説明します。

出力引数 stop は、現在の反復でアルゴリズムを停止する方法を提供します。stop には次の値を指定できます。

  • false — アルゴリズムは次の反復に進みます。

  • true — アルゴリズムは現在の反復で終了します。

メモ

プロット関数のフレームワークで座標軸が管理されるため、プロット関数は subplot ステートメントをサポートしていません。複数のサブプロットを指定するには、個別のプロット関数を記述し、cell 配列としてソルバーに渡します。

options = optimoptions("solvername",PlotFcn={@plot1,@plot2,@plot3});

出力関数は subplot をサポートするため、プロット関数ではなく出力関数を使用すると、1 つの関数に複数のプロットを含めることができます。

ポーリングオプション

ポーリング オプションは、パターン探索が各反復でメッシュ ポイントをポーリングする方法を制御します。

PollMethod は、アルゴリズムがメッシュを作成するために使用するパターンを指定します。直接探索アルゴリズムの各クラスには、一般化パターン探索(GPS) アルゴリズム、生成セット探索 (GSS) アルゴリズム、メッシュ適応直接探索(MADS) アルゴリズムの 2 つのパターンがあります。これらのパターンは、正基底 2 N と正基底 N+1 です。

  • patternsearch"GPSPositiveBasis2N" のデフォルト パターンは、次の 2 つの N ベクトルで構成されます。ここで、N は目的関数の独立変数の数です。

    [1 0 0...0] [0 1 0...0] ...[0 0 0...1] [–1 0 0...0] [0 –1 0...0] [0 0 0...–1].

    たとえば、最適化問題に 3 つの独立変数がある場合、パターンは次の 6 つのベクトルで構成されます。

    [1 0 0] [0 1 0] [0 0 1] [–1 0 0] [0 –1 0] [0 0 –1].

  • paretosearch"GPSPositiveBasis2Np2" のデフォルトのパターンは "GPSPositiveBasis2N" と同じですが、すべて 1 とすべてマイナス 1 の 2 つのポイントが追加されています。

    [1 1 1...1] [–1 –1 –1...–1]

    たとえば、最適化問題に 3 つの独立変数がある場合、パターンは次の 8 つのベクトルで構成されます。

    [1 0 0] [0 1 0] [0 0 1] [–1 0 0] [0 –1 0] [0 0 –1] [1 1 1] [–1 –1 –1].

  • "GSSPositiveBasis2N" パターンは "GPSPositiveBasis2N" に似ていますが、線形制約を考慮して基底ベクトルを調整します。現在のポイントが線形制約境界に近い場合、"GSSPositiveBasis2N""GPSPositiveBasis2N" よりも効率的です。paretosearch には、"GPSPositiveBasis2Np2" に似た "GSSPositiveBasis2Np2" パターンもあります。

  • "MADSPositiveBasis2N" パターンは、ランダムに生成された 2 つの N ベクトルで構成されます。ここで、N は目的関数の独立変数の数です。これは、線形独立セットを形成する N ベクトルをランダムに生成し、この最初のセットとこのセットの負の値を使用して 2 つの N ベクトルを生成することによって行われます。上に示すように、"GPSPositiveBasis2N" パターンは線形独立な単位元の正負を使用して形成されますが、"MADSPositiveBasis2N" では、各反復で再生成される NN 列の線形独立な下三角行列のランダムな順列を使用してパターンが生成されます。

    メモ

    問題に線形等式制約がある場合は、MADS ポーリングは使用できません。

  • "GPSPositiveBasisNp1" パターンは、次の N + 1 ベクトルで構成されます。

    [1 0 0...0] [0 1 0...0] ...[0 0 0...1] [–1 –1 –1...–1].

    たとえば、目的関数に 3 つの独立変数がある場合、パターンは次の 4 つのベクトルで構成されます。

    [1 0 0] [0 1 0] [0 0 1] [–1 –1 –1].

  • "GSSPositiveBasisNp1" パターンは "GPSPositiveBasisNp1" に似ていますが、線形制約を考慮して基底ベクトルを調整します。現在のポイントが線形制約境界に近い場合、"GSSPositiveBasisNp1""GPSPositiveBasisNp1" よりも効率的です。

  • "MADSPositiveBasisNp1" パターンは、正の基底を形成するためにランダムに生成された N 個のベクトルで構成されます。ここで、N は目的関数の独立変数の数です。次に、さらに 1 つのランダム ベクトルが生成され、N+1 個のランダムに生成されたベクトルが生成されます。"MADSPositiveBasisNp1" が選択されると、各反復で新しいパターンが生成されます。

    メモ

    問題に線形等式制約がある場合は、MADS ポーリングは使用できません。

  • "OrthoMADSPositiveBasis2N" パターンは、"GPSPositiveBasis2N" パターンに N 次元のランダム回転が続いたものと同じです。

  • "OrthoMADSPositiveBasisNp1" パターンは、"GPSPositiveBasisNp1" パターンに N 次元のランダム回転が続いたものと同じです。

UseCompletePoll は、現在のメッシュ内のすべてのポイントを各反復でポーリングする必要があるかどうかを指定します。UseCompletePoll の値は true または false になります。UseCompletePoll は、Algorithm"classic" の場合にのみ適用されます。

  • UseCompletePolltrue に設定すると、アルゴリズムは各反復でメッシュ内のすべてのポイントをポーリングし、目的関数の値が最小のポイントを次の反復の現在のポイントとして選択します。

  • UseCompletePoll をデフォルト値の false に設定すると、アルゴリズムは、目的関数の値が現在のポイントの値よりも小さいポイントを見つけるとすぐにポーリングを停止します。アルゴリズムは、そのポイントを次の反復の現在のポイントとして設定します。

  • paretosearch の場合のみ、MinPollFraction オプションは、UseCompletePoll のバイナリ値の代わりに、ポーリング中に調査されるポーリング方向の割合を指定します。完全なポーリングを指定するには、MinPollFraction1 に設定します。すべての目的関数を改善するポイントが見つかったらすぐにポーリングを停止するように指定するには、MinPollFraction0 に設定します。

PollOrderAlgorithm は、アルゴリズムが現在のメッシュ内のポイントを探索する順序を指定します。PollOrderAlgorithm は、Algorithm"classic" の場合にのみ適用されます。次のオプションがあります。

  • "Consecutive" (デフォルト) — アルゴリズムはメッシュ ポイントを 連続 順序、つまり ポーリング方法 で説明されているパターン ベクトルの順序でポーリングします。

  • "Random" — ポーリング順序はランダムです。

  • "Success" — 各反復における最初の探索方向は、アルゴリズムが前回の反復で最適なポイントを見つけた方向です。最初のポイントの後、アルゴリズムは "Consecutive" と同じ順序でメッシュ ポイントをポーリングします。

多目的オプション

paretosearch ソルバーは主に patternsearch オプションを使用します。利用可能な組み込みプロット関数のいくつかは異なります。プロット オプション を参照してください。以下のオプションは paretosearch にのみ適用されます。

表では、N は決定変数の数を表します。

多目的パターン探索オプション

オプション定義許可された値と{デフォルトの}
ParetoSetSizeパレート集合内の点の数。正の整数 | {max(60,number of objectives) }
ParetoSetChangeTolerance溶液の量や広がりの変化に対する許容度。これらの測定値のいずれかが相対的に ParetoSetChangeTolerance 未満に変化すると、反復は終了します。詳細は、停止条件を参照してください。正のスカラー | {1e-4}
MinPollFractionポーリングするパターンの最小部分。0 から 1 までのスカラー | {0}
InitialPoints

paretosearchの初期点。次のいずれかのデータ型を使用します。

  • nvars 列の行列。各行は 1 つの初期点を表します。

  • 次のフィールドを含む構造体 (X0 を除くすべてのフィールドはオプションです)。

    • X0nvars 列を持つ行列。各行は 1 つの初期点を表します。

    • FvalsnumObjectives 列を持つ行列。各行は X0 の対応するポイントにおける目的関数の値を表します。

    • CineqnumIneq 列を持つ行列。各行は X0 の対応する点における非線形不等式制約値を表します。

Fvals または Cineq フィールドに欠落したエントリがある場合、paretosearch は欠落した値を計算します。

nvars 列の行列 | 構造 | {[]}

探索オプション

SearchFcn オプションは、ポーリング前の各反復でアルゴリズムが実行できるオプションの探索を指定します。探索によって目的関数を改善するポイントが返された場合、アルゴリズムは次の反復でそのポイントを使用し、ポーリングを省略します。同じ SearchFcnPollMethod を選択した場合は、選択したオプションが異なる場合は両方が使用されますが、Poll メソッドのみが使用されます。

"classic" アルゴリズムの場合のみ、探索方法としてポーリング方式を選択できます。

SearchFcn の値を以下に示します。

  • デフォルトの [] では、探索ステップは指定されません。

  • 組み込みのポーリング アルゴリズム: "GPSPositiveBasis2N""GPSPositiveBasisNp1""GSSPositiveBasis2N""GSSPositiveBasisNp1""MADSPositiveBasis2N""MADSPositiveBasisNp1""OrthoMADSPositiveBasis2N"、または "OrthoMADSPositiveBasisNp1"

  • "searchga" は遺伝的アルゴリズムを使用した探索を指定します。2 つの追加パラメーターを使用して遺伝的アルゴリズム探索を変更できます。

    options = optimoptions("patternsearch",SearchFcn=...
           {@searchga,iterlim,optionsGA})
    • iterlim — 遺伝的アルゴリズム探索が実行されるパターン探索の反復回数を指定する正の整数。iterlim のデフォルトは 1 です。このような時間のかかる探索を複数回実行しても結果が改善される可能性は低いため、この値を変更しないことをお勧めします。

    • optionsGAoptimoptions を使用して設定できる遺伝的アルゴリズムのオプション。searchga オプションを指定しない場合は、searchgapatternsearch と同じ UseParallel および UseVectorized オプション設定を使用します。

  • "searchlhs" はラテンハイパーキューブ探索を指定します。patternsearch は次のように探索の各ポイントを生成します。各要素について、ベクトル [1,2,...,k] から rand(1,k) を引いたものを k で割ったものをランダムに順列化します。(k は点の数です。)これにより、各コンポーネントがほぼ均等に間隔をあけられた k ポイントが生成されます。結果のポイントは、任意の境界に合わせて拡大縮小されます。Latin hypercube は、デフォルトの境界である -11 を使用します。

    探索の実行方法は、UseCompleteSearch オプションの設定によって異なります。

    • UseCompleteSearchtrue に設定すると、アルゴリズムはラテン超方格探索によって各反復でランダムに生成されるすべてのポイントをポーリングし、目的関数の値が最小のポイントを選択します。

    • UseCompleteSearchfalse (デフォルト) に設定すると、アルゴリズムは、ランダムに生成されたポイントの 1 つで目的関数の値が現在のポイントの目的関数の値よりも小さいものを見つけるとすぐにポーリングを停止し、次の反復でそのポイントを選択します。

    次の 2 つの追加パラメーターを使用して、ラテン ハイパーキューブ探索を変更できます。

    options = optimoptions("patternsearch",SearchFcn=...
        {@searchlhs,iterlim,level})
    • iterlim — ラテンハイパーキューブ探索が実行されるパターン探索の反復回数を指定する正の整数。iterlim のデフォルトは 1 です。

    • levellevelpatternsearch が探索するポイントの数であり、正の整数です。level のデフォルトは次元数の 15 倍です。

  • "searchneldermead" は、Nelder-Mead アルゴリズムを使用する fminsearch を使用した探索を指定します。次の 2 つの追加パラメーターを使用して、Nelder-Mead 探索を変更できます。

    options = optimoptions("patternsearch",SearchFcn=...
         {@searchneldermead,iterlim,optionsNM})
    • iterlim — Nelder-Mead 探索が実行されるパターン探索の反復回数を指定する正の整数。iterlim のデフォルトは 1 です。

    • optionsNMoptimset 関数を使用して作成できる fminsearch のオプション。

  • "rbfsurrogate" は、surrogateopt サロゲート (サロゲート最適化アルゴリズム を参照) と同様に、ラジアル基底関数サロゲートを使用した探索を指定します。サロゲート変数は、最新の N+1 以上の評価ポイントから形成されます。ここで、N は変数の数 (x0 のサイズ) です。アルゴリズムが 10*N ポイントを評価した後、サロゲートはリセット (消去) され、新しいサロゲートのポイントはリセット後のポイントから取得されます。ラジアル基底関数には少なくとも N+1 個のポイントが必要なので、リセット後は、アルゴリズムが少なくとも N+1 個の追加ポイントを評価するまで探索は実行されません。サロゲート変数には、すべての変数の上限と下限が必要です。境界を指定しない場合は、アルゴリズムによって最近のポイント リストから境界が構築されます。したがって、一部の変数に制限を指定しないと、アルゴリズムはより多くの計算を実行し、実行速度が少し遅くなります。いずれにしても、この探索機能は比較的時間がかかるため、時間のかかる目的関数で使用するのが最適です。

  • Custom を使用すると、独自の探索機能を作成できます。

    options = optimoptions("patternsearch",SearchFcn=@myfun);

    独自の探索関数を作成するために使用できるテンプレートを表示するには、次のように入力します。

    edit searchfcntemplate

    次のセクションでは、探索機能の構造について説明します。

探索機能の構造

探索関数には次の呼び出し構文が必要です。

function [successSearch,xBest,fBest,funccount] = ...
    searchfcntemplate(fun,x,A,b,Aeq,beq,lb,ub, ...
        optimValues,options)

探索関数には次の入力引数があります。

  • fun — 目的関数

  • x — 現在のポイント

  • A,b — 線形不等式制約

  • Aeq,beq — 線形等式制約

  • lb,ub — 下限と上限の制約

  • optimValues — 探索オプションを設定できる構造。この構造体には、次のフィールドがあります。

    • x — 現在のポイント

    • fvalx における目的関数の値

    • iteration — 現在の反復回数

    • funccount — ユーザー関数評価用のカウンター

    • scale — 設計ポイントのスケールに使用されるスケール係数

    • problemtype — 探索ルーチンに渡されるフラグ。問題が 'unconstrained''boundconstraints'、または 'linearconstraints' のいずれであるかを示します。このフィールドは、非線形制約問題のサブ問題タイプです。

    • meshsize — 探索ステップで使用される現在のメッシュサイズ

    • method — 最後の反復で使用されたメソッド

  • options —パターン探索オプション

この関数には次の出力引数があります。

  • successSearch — 探索が成功したかどうかを示すブール識別子

  • xBest,fBest — 探索方法で見つかった最適なポイントと最適な関数値

  • funccount — 探索メソッドにおけるユーザー関数評価の回数

例については、探索とポーリング を参照してください。

完全な探索

UseCompleteSearch オプションは、SearchFcn"GPSPositiveBasis2N""GPSPositiveBasisNp1""GSSPositiveBasis2N""GSSPositiveBasisNp1""MADSPositiveBasis2N""MADSPositiveBasisNp1"、または "searchlhs" に設定すると適用されます。UseCompleteSearch の値は true または false になります。

ポーリング アルゴリズムである探索関数の場合、UseCompleteSearch はポーリング オプション UseCompletePoll と同じ意味を持ちます。ラテンハイパーキューブ探索における UseCompleteSearch の意味については、探索オプション"searchlhs" エントリを参照してください。

メッシュオプション

メッシュ オプションは、パターン探索で使用するメッシュを制御します。以下のオプションを使用できます。

  • InitialMeshSize は初期メッシュのサイズを指定します。これは、初期点からメッシュ ポイントまでの最短ベクトルの長さです。InitialMeshSize は正のスカラーである必要があります。既定値は 1.0 です。

  • MaxMeshSize はメッシュの最大サイズを指定します。最大サイズに達すると、反復が成功した後もメッシュ サイズは増加しません。MaxMeshSize は正のスカラーである必要があり、ポーリングまたは探索方法として GPS または GSS アルゴリズムが選択された場合にのみ使用されます。既定値は Inf です。MADS は最大サイズ 1 を使用します。

  • AccelerateMesh は、メッシュ サイズが小さい場合に、各失敗した反復の後に MeshContractionFactor0.5 で乗算するかどうかを指定します。AccelerateMesh には、デフォルトの値 true (アクセラレータを使用する) または false (アクセラレータを使用しない) を指定できます。AccelerateMesh は、GPS および GSS ポーリング アルゴリズムと "classic" アルゴリズムにのみ適用されます。

  • MeshRotate は、PollMethod"GPSPositiveBasisNp1" または "GSSPositiveBasisNp1" の場合にのみ適用されます。MeshRotate = "On" は、ポーリングが失敗した後にメッシュ サイズが MeshTolerance オプションの 1/100 未満の場合、メッシュ ベクトルに -1 が乗算されることを指定します。つまり、小さなメッシュ サイズでの最初のポーリングが失敗した後、アルゴリズムは方向 ei (単位正方向) と –Σ ei でポーリングする代わりに、方向 – ei と Σ ei でポーリングします。MeshRotate の値は "Off" または "On" (既定値) になります。

    • MeshRotate は不連続関数に特に便利です。

    • 問題に等式制約がある場合、MeshRotate は無効になります。

  • ScaleMesh は、アルゴリズムがパターン ベクトルを、現在のポイント (または制約のない問題の場合は初期点) のコンポーネントの絶対値の対数に比例する定数で慎重に乗算することによって、メッシュ ポイントをスケーリングするかどうかを指定します。ScaleMesh の値は false または true (デフォルト) になります。問題に "classic" アルゴリズムの等式制約がある場合、ScaleMesh は無効になります。

  • MeshExpansionFactor は、ポーリングが成功した後にメッシュ サイズが増加する係数を指定します。デフォルト値は 2.0 です。これは、ポーリングが成功した後、メッシュのサイズが 2.0 倍されることを意味します。MeshExpansionFactor は正のスカラーである必要があり、ポーリングまたは探索方法として GPS または GSS 方式が選択され、Algorithm オプションが "classic" の場合にのみ使用されます。MADS は 4.0MeshExpansionFactor を使用します。詳細については、メッシュの拡張と収縮を参照してください。

  • MeshContractionFactor は、ポーリングが失敗した後にメッシュ サイズを減少させる係数を指定します。デフォルト値は 0.5 です。これは、ポーリングが失敗した後、メッシュのサイズが 0.5 倍されることを意味します。MeshContractionFactor は正のスカラーである必要があり、ポーリングまたは探索方法として GPS または GSS 方式が選択され、Algorithm オプションが "classic" の場合にのみ使用されます。MADS は 0.25MeshContractionFactor を使用します。詳細については、メッシュの拡張と収縮を参照してください。

制約パラメーター

ペナルティパラメーターの意味については、パターン探索のための非線形制約ソルバーアルゴリズム を参照してください。

  • InitialPenalty — 非線形制約アルゴリズムで使用されるペナルティパラメーターの初期値を指定します。InitialPenalty1 以上である必要があり、デフォルトは 10 です。

  • PenaltyFactor — 問題が必要な精度で解決されず、制約が満たされない場合にペナルティパラメーターを増やします。PenaltyFactor1 よりも大きくする必要があり、デフォルトは 100 です。

TolBind は、線形制約に関して、現在の点から実行可能領域の境界までの距離の許容値を指定します。つまり、TolBind は線形制約がアクティブであるタイミングを指定します。TolBind は停止基準ではありません。アクティブな線形制約は、patternsearch がポーリングまたは探索に使用するポイントのパターンを変更します。TolBind の既定値は 1e-3 です。

キャッシュオプション

パターン探索アルゴリズムは、すでにポーリングしたポイントの記録を保持できるため、同じポイントを複数回ポーリングする必要がありません。目的関数の計算に比較的長い時間を要する場合、キャッシュ オプションを使用するとアルゴリズムを高速化できます。ポイントを記録するために割り当てられたメモリはキャッシュと呼ばれます。このオプションは、決定論的な目的関数にのみ使用し、確率論的な目的関数には使用しないでください。

Cache は、キャッシュが使用されるかどうかを指定します。オプションはデフォルトである "On""Off" です。Cache"On" に設定すると、アルゴリズムはキャッシュ内のポイントの CacheTol 以内にあるメッシュ ポイントで目的関数を評価しません。

CacheTol は、アルゴリズムがポーリングを省略するために、メッシュ ポイントがキャッシュ内のポイントにどれだけ近い必要があるかを指定します。CacheTol は正のスカラーである必要があります。既定値は eps です。

CacheSize はキャッシュのサイズを指定します。CacheSize は正のスカラーでなければなりません。既定値は 1e4 です。

メモ

ソルバーを並列で実行すると、Cache は機能しません。

詳細については、キャッシュを使用するを参照してください。

停止条件

停止基準は、パターン探索アルゴリズムを停止する原因を決定します。パターン探索では次の基準が使用されます。

MeshTolerance はメッシュ サイズの最小許容値を指定します。メッシュ サイズが MeshTolerance より小さくなると、GPS および GSS アルゴリズムは停止します。MADS 2N はメッシュ サイズが MeshTolerance^2 より小さくなると停止します。MADS Np1 は、メッシュ サイズが (MeshTolerance/nVar)^2 より小さくなると停止します。ここで、nVarx0 の要素数です。MeshTolerance の既定値は 1e-6 です。

MaxIterations は、アルゴリズムが実行する反復の最大回数を指定します。反復回数が MaxIterations に達するとアルゴリズムは停止します。デフォルト値は独立変数の数の 100 倍です。

MaxFunctionEvaluations は目的関数の評価の最大数を指定します。関数評価の回数が MaxFunctionEvaluations に達すると、アルゴリズムは停止します。デフォルト値は独立変数の数の 2000 倍です。

MaxTime は、パターン探索アルゴリズムが停止するまでに実行される最大時間を秒単位で指定します。これには、パターン探索アルゴリズムに指定された一時停止時間も含まれます。

StepTolerance は、連続する 2 回の反復における現在のポイント間の最小距離を指定します。MADS ポーリングには適用されません。ポーリングが失敗した後、連続する 2 つのポイント間の距離が StepTolerance 未満で、メッシュ サイズが StepTolerance より小さい場合、アルゴリズムは停止します。既定値は 1e-6 です。

FunctionTolerance は目的関数の最小許容値を指定します。MADS ポーリングには適用されません。ポーリングが失敗した後、前の最適ポイントでの関数値と現在の最適ポイントでの関数値の差が FunctionTolerance 未満であり、メッシュ サイズも StepTolerance より小さい場合、アルゴリズムは停止します。既定値は 1e-6 です。

例については、ソルバー許容値の設定 を参照してください。

ConstraintTolerance は停止基準として使用されません。非線形制約に関する実現可能性を判断するために使用されます。既定値は 1e-6 です。

出力関数のオプション

OutputFcn は、パターン探索アルゴリズムが各反復で呼び出す関数を指定します。出力関数ファイルmyfun.mの場合、

options = optimoptions("patternsearch",OutputFcn=@myfun);

複数の出力関数の場合は、関数ハンドルのセル配列を入力します。

options = optimoptions('patternsearch",...
    OutputFcn={@myfun1,@myfun2,...});

独自の出力関数を書くために使用できるテンプレートを表示するには、次のように入力します。

edit psoutputfcntemplate

MATLAB® コマンドプロンプトで。

出力関数で追加のパラメーターを渡すには、無名関数 を使用します。

出力関数の構造

出力関数には次の呼び出し構文が必要です。

[stop,options,optchanged] = myfun(optimvalues,options,flag)

MATLAB は optimvaluesoptionsflag データを出力関数に渡し、出力関数は stopoptionsoptchanged データを返します。

出力関数には次の入力引数があります。

  • optimvalues — ソルバーの現在の状態に関する情報を含む構造体。この構造体には、次のフィールドがあります。

    • x — 現在のポイント

    • iteration — 反復回数

    • fvalx における目的関数の値

    • meshsize — 現在のメッシュサイズ

    • funccount — 関数評価の回数

    • method — 最後の反復で使用された手法。非線形制約のある問題の場合は 'Update multipliers' または 'Increase penalty' など。非線形制約のない問題の場合は 'Successful Poll''Refine Mesh'、または 'Successful Search' など。接尾辞が '\Rotate' になる場合もあります。

    • TolFun — 最後の反復における関数値の変化の絶対値

    • TolX — 最後の反復における x の変化のノルム

    • nonlinineqx の非線形不等式制約関数の値。非線形制約関数が指定されている場合にのみ表示されます。

    • nonlineqx の非線形等式制約関数の値。非線形制約関数が指定されている場合にのみ表示されます。

  • options — オプション

  • flag — 出力関数が呼び出される現在の状態。flagの可能な値は

    • 'init' — 初期化状態

    • 'iter' — 反復状態

    • 'interrupt' — 非線形制約問題の部分問題の反復

      • flag'interrupt' の場合、optimvalues フィールドの値がサブ問題の反復に適用されます。

      • flag'interrupt' の場合、patternsearchoptions の変更を受け入れず、optchanged を無視します。

    • 'done' — 最終状態

追加パラメーターの受け渡し は、出力関数に追加のパラメーターを提供する方法について説明します。

出力関数は、次の引数を patternsearch に返します。

  • stop — 現在の反復でアルゴリズムを停止する方法を提供します。stop は次の値を取ることができます。

    • false — アルゴリズムは次の反復に進みます。

    • true — アルゴリズムは現在の反復で終了します。

  • optionspatternsearch オプション。

  • optchangedoptions への変更を示すブールフラグ。後続の反復で options を変更するには、optchangedtrue に設定します。

コマンドウィンドウに表示するオプション

Display は、パターン探索の実行中にコマンド ラインに表示される情報の量を指定します。利用可能なオプションは次のとおりです

  • "final" (デフォルト) — 停止の理由が表示されます。

  • "off" または同等の "none" — 出力は表示されません。

  • "iter" — 反復ごとに情報が表示されます。

  • "diagnose" — 反復ごとに情報が表示されます。さらに、診断ではいくつかの問題情報とデフォルトから変更されたオプションがリストされます。

"iter""diagnose" はどちらも次の情報を表示します。

  • Iter — 反復回数

  • FunEval — 関数評価の累積回数

  • MeshSize — 現在のメッシュサイズ

  • FunVal — 現在のポイントの目的関数値

  • Method — 現在のポーリングの結果(非線形制約関数は指定されていません)。非線形制約関数では、Method はサブ問題が解決された後に使用される更新方法を表示します。

  • Max Constraint — 最大非線形制約違反(非線形制約関数が指定されている場合にのみ表示されます)

ベクトル化と並列化のオプション

目的関数と制約関数をシリアル、並列、またはベクトル形式で評価することを選択できます。ベクトル化または並列計算を使用するには、UseVectorized または UseParallel オプションを true に設定します。

メモ

"classic" アルゴリズムにベクトル化または並列ポーリングを使用するには、UseCompletePolltrue に設定する必要があります。同様に、"classic" アルゴリズムでは、ベクトル化または並列探索のために UseCompleteSearchtrue に設定します。

R2019a 以降、UseParallel オプションを true に設定すると、patternsearch が内部的に UseCompletePoll 設定を true にオーバーライドし、関数が並列にポーリングするようになります。

  • UseVectorizedfalse の場合、patternsearch はメッシュ ポイントをループしながら、一度に 1 つのポイントで目的関数を呼び出します。(これは、UseParallel がデフォルト値の false にあることを前提としています。)

  • UseVectorizedtrue であり、patternsearch はメッシュ内のすべてのポイントに対して目的関数を一度に呼び出します。つまり、目的関数を 1 回呼び出します。

    非線形制約がある場合、アルゴリズムがベクトル化された方法で計算できるように、目的関数と非線形制約をすべてベクトル化する必要があります。

    詳細と例については、目的関数と制約関数をベクトル化する を参照してください。

  • UseParalleltrue の場合、patternsearch は、確立した並列環境を使用して、目的関数を並列に呼び出します (Global Optimization Toolbox で並列処理を使用する方法 を参照)。コマンドラインで、"UseParallel"false に設定して連続的に計算します。

メモ

ベクトル化計算と並列計算を同時に使用することはできません。UseParalleltrue に設定し、UseVectorizedtrue に設定すると、patternsearch は目的関数と制約関数を並列ではなくベクトル形式で評価します。

目的関数と制約関数の評価方法

UseCompletePoll = true と仮定しますUseVectorized = falseUseVectorized = true
UseParallel = falseシリアルベクトル化
UseParallel = true並列ベクトル化

パターン探索アルゴリズムのオプションテーブル

すべてのアルゴリズムのオプション可用性表

オプション説明アルゴリズムの可用性
AccelerateMesh

メッシュサイズの縮小を加速します。

GPSとGSS、"classic"アルゴリズム

Cache

Cache"on" に設定すると、patternsearch はポーリングしたメッシュ ポイントの履歴を保持し、後続の反復でそれらの近くの点を再度ポーリングしません。目的関数の計算に長い時間がかかり、patternsearch の実行速度が遅い場合は、このオプションを使用します。目的関数が確率的である場合は、このオプションを使用しないことをお勧めします。

メモ

ソルバーを並列で実行すると、Cache は機能しません。

すべて

CacheSize

キャッシュのサイズ(ポイント数)。

すべて

CacheTol

patternsearch がポーリングを回避するために、現在のメッシュ ポイントがキャッシュ内のポイントにどれだけ近い必要があるかを指定する正のスカラー。"Cache" オプションが "on" に設定されている場合に使用できます。

すべて

ConstraintTolerance

非線形制約に対する許容範囲。

すべて

Display

コマンド ウィンドウへの表示レベル。

すべて

FunctionTolerance

関数値の許容範囲。

すべて

InitialMeshSize

パターン探索アルゴリズムで使用される初期メッシュ サイズ。

すべて

InitialPenalty

ペナルティパラメーターの初期値。

すべて

MaxFunctionEvaluations

目的関数評価の最大数。

すべて

MaxIterations

反復最大回数

すべて

MaxMeshSize

ポーリング/探索ステップで使用される最大メッシュ サイズ。

GPSとGSS

MaxTime

最適化に許可される合計時間 (秒単位)。パターン探索アルゴリズムの指定された一時停止時間も含まれます。

すべて

MeshContractionFactor

反復が失敗した場合に使用されるメッシュ収縮係数。

GPSとGSS、"classic"アルゴリズム

MeshExpansionFactor

メッシュ拡張係数。反復が成功したときにメッシュを拡張します。

GPSとGSS、"classic"アルゴリズム

MeshRotate

ポイントが最適であると宣言する前にパターンを回転させます。

GPS Np1 と GSS Np1

MeshTolerance

メッシュ サイズの許容範囲。

すべて

OutputFcn

パターン探索が各反復で呼び出すユーザー指定関数。

すべて

PenaltyFactor

ペナルティ更新パラメーター。

すべて

PlotFcn

実行時にプロットする関数を指定します。

すべて

PlotInterval

プロット関数が間隔ごとに呼び出されることを指定します。

すべて

PollOrderAlgorithm

探索方向がポーリングされる順序。

GPSとGSS、"classic"アルゴリズム

PollMethod

パターン探索で使用されるポーリング戦略。

"classic"アルゴリズム

ScaleMesh

変数の自動スケーリング。

すべて

SearchFcn

パターン探索で使用する探索方法を指定します。

すべて

StepTolerance

独立変数に対する許容範囲。

すべて

TolBind

線形拘束がアクティブかどうかを判断するために使用されるバインド許容値。

すべて

UseCompletePoll

現在の反復の周りのポーリングを完了します。ポーリングステップですべてのポイントを評価します。

"classic"アルゴリズム

UseCompleteSearch

探索方法がポーリング メソッドの場合、現在の反復の周囲で探索を完了します。探索ステップ内のすべてのポイントを評価します。

"classic"アルゴリズム

UseParallel

true の場合、ポーリングまたは探索の目的関数を並列に計算します。false に設定すると、この動作は無効になります。

すべて

UseVectorized

目的関数と制約関数がベクトル化されるかどうかを指定します。

すべて