Main Content

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

パターン検索オプション

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

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 — アルゴリズムは現在の反復で終了します。

投票オプション

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

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 です。時間のかかる検索を複数回実行しても結果が改善される可能性は低いため、この値を変更しないことをお勧めします。

    • optionsGA — 遺伝的アルゴリズムのオプション。optimoptions を使用して設定できます。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 は、ソルバーを並列で実行すると機能しません。

All

CacheSize

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

All

CacheTol

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

All

ConstraintTolerance

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

All

Display

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

All

FunctionTolerance

関数値の許容範囲。

All

InitialMeshSize

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

All

InitialPenalty

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

All

MaxFunctionEvaluations

目的関数評価の最大数。

All

MaxIterations

反復最大回数

All

MaxMeshSize

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

GPSとGSS

MaxTime

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

All

MeshContractionFactor

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

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

MeshExpansionFactor

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

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

MeshRotate

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

GPS Np1 と GSS Np1

MeshTolerance

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

All

OutputFcn

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

All

PenaltyFactor

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

All

PlotFcn

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

All

PlotInterval

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

All

PollOrderAlgorithm

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

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

PollMethod

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

"classic" アルゴリズム

ScaleMesh

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

All

SearchFcn

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

All

StepTolerance

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

All

TolBind

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

All

UseCompletePoll

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

"classic" アルゴリズム

UseCompleteSearch

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

"classic" アルゴリズム

UseParallel

true の場合、投票または検索の目的関数を並列に計算します。false に設定すると、この動作は無効になります。

All

UseVectorized

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

All