このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
パターン検索オプション
パターン検索のオプション
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
の次のフィールドが含まれています。x
— 現在のポイントfval
— 目的関数の値iteration
— 反復回数funccount
— 関数評価の回数nonlinineq
— 非線形不等式制約。非線形制約関数が指定されている場合にのみ表示されます。nonlineq
— 非線形等式制約、常に空[]
volume
— 体積測定(paretosearch アルゴリズムの定義 を参照)averagedistance
— 距離測定(paretosearch アルゴリズムの定義 を参照)spread
— スプレッド測定(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"
では、パターンは各反復で再生成される N 行 N 列の線形独立下三角行列のランダム順列を使用して生成されます。メモ
問題に線形等式制約がある場合は、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"
の場合にのみ適用されます。
UseCompletePoll
をtrue
に設定すると、アルゴリズムは各反復でメッシュ内のすべてのポイントをポーリングし、目的関数値が最小のポイントを次の反復の現在のポイントとして選択します。UseCompletePoll
をデフォルト値のfalse
に設定すると、アルゴリズムは、目的関数の値が現在のポイントの値よりも小さいポイントを見つけるとすぐにポーリングを停止します。アルゴリズムは、そのポイントを次の反復の現在のポイントとして設定します。paretosearch
の場合のみ、MinPollFraction
オプションは、UseCompletePoll
のバイナリ値の代わりに、ポーリング中に調査されるポーリング方向の割合を指定します。完全なポーリングを指定するには、MinPollFraction
を1
に設定します。すべての目的関数を改善するポイントが見つかったらすぐに投票を停止するように指定するには、MinPollFraction
を0
に設定します。
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 |
|
|
検索オプション
SearchFcn
オプションは、ポーリング前の各反復でアルゴリズムが実行できるオプションの検索を指定します。検索によって目的関数を改善するポイントが返された場合、アルゴリズムは次の反復でそのポイントを使用し、ポーリングを省略します。同じ SearchFcn
と PollMethod
を選択した場合は、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
オプションを指定しない場合、searchga
はpatternsearch
と同じUseParallel
およびUseVectorized
オプション設定を使用します。
"searchlhs"
はラテンハイパーキューブ検索を指定します。patternsearch
は次のように検索の各ポイントを生成します。各要素について、ベクトル[1,2,...,k]
からrand(1,k)
を引いたものをk
で割ったものをランダムに順列します。(k
は点の数です。)これにより、k
ポイントが生成され、各コンポーネントはほぼ均等に間隔が空けられます。結果のポイントは、任意の境界に合うようにスケーリングされます。Latin hypercube
は、デフォルトの境界である-1
と1
を使用します。検索の実行方法は、
UseCompleteSearch
オプションの設定によって異なります。UseCompleteSearch
をtrue
に設定すると、アルゴリズムはラテン超方格探索によって各反復でランダムに生成されるすべてのポイントをポーリングし、目的関数の値が最小のポイントを選択します。UseCompleteSearch
をfalse
(デフォルト) に設定すると、アルゴリズムは、ランダムに生成されたポイントの 1 つで目的関数の値が現在のポイントの値よりも小さいものを見つけるとすぐにポーリングを停止し、次の反復でそのポイントを選択します。
次の 2 つの追加パラメータを使用して、ラテン ハイパーキューブ検索を変更できます。
options = optimoptions("patternsearch",SearchFcn=... {@searchlhs,iterlim,level})
iterlim
— ラテンハイパーキューブ検索が実行されるパターン検索の反復回数を指定する正の整数。iterlim
のデフォルトは 1 です。level
—level
はpatternsearch
が検索するポイントの数であり、正の整数です。level
のデフォルトは次元数の 15 倍です。
"searchneldermead"
は、Nelder-Mead アルゴリズムを使用するfminsearch
を使用した検索を指定します。次の 2 つの追加パラメータを使用して、Nelder-Mead 検索を変更できます。options = optimoptions("patternsearch",SearchFcn=... {@searchneldermead,iterlim,optionsNM})
iterlim
— Nelder-Mead 検索が実行されるパターン検索の反復回数を指定する正の整数。iterlim
のデフォルトは 1 です。optionsNM
—optimset
関数を使用して作成できる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
— 現在のポイントfval
—x
での目的関数値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
は、メッシュ サイズが小さい場合に、各失敗した反復の後にMeshContractionFactor
を0.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.0
のMeshExpansionFactor
を使用します。詳細については、メッシュの拡張と収縮を参照してください。MeshContractionFactor
は、ポーリングが失敗した後にメッシュ サイズを減少させる係数を指定します。デフォルト値は0.5
です。これは、ポーリングが失敗した後にメッシュのサイズが0.5
倍されることを意味します。MeshContractionFactor
は正のスカラーである必要があり、ポーリングまたは検索方法として GPS または GSS 方式が選択され、Algorithm
オプションが"classic"
である場合にのみ使用されます。MADS は0.25
のMeshContractionFactor
を使用します。詳細については、メッシュの拡張と収縮を参照してください。
制約パラメータ
ペナルティパラメータの意味については、パターン探索のための非線形制約ソルバーアルゴリズム を参照してください。
InitialPenalty
— 非線形制約アルゴリズムで使用されるペナルティ パラメーターの初期値を指定します。InitialPenalty
は1
以上である必要があり、既定値は10
です。PenaltyFactor
— 問題が必要な精度で解決されず、制約が満たされない場合にペナルティ パラメータを増やします。PenaltyFactor
は1
よりも大きい必要があり、デフォルトは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
より小さくなると停止します。ここで、 nVar
は x0
の要素数です。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 は optimvalues
、options
、flag
データを出力関数に渡し、出力関数は stop
、options
、optchanged
データを返します。
出力関数には次の入力引数があります。
optimvalues
— ソルバーの現在の状態に関する情報を含む構造体。この構造体には、次のフィールドがあります。x
— 現在のポイントiteration
— 反復回数fval
—x
での目的関数値meshsize
— 現在のメッシュサイズfunccount
— 関数評価の回数method
— 最後の反復で使用された方法。非線形制約のある問題の場合は'Update multipliers'
または'Increase penalty'
、非線形制約のない問題の場合は'Successful Poll'
、'Refine Mesh'
、または'Successful Search'
(接尾辞'\Rotate'
が付く場合もあります)TolFun
— 最後の反復における関数値の変化の絶対値TolX
— 最後の反復におけるx
の変化のノルムnonlinineq
—x
の非線形不等式制約関数の値。非線形制約関数が指定されている場合にのみ表示されます。nonlineq
—x
の非線形等式制約関数の値。非線形制約関数が指定されている場合にのみ表示されます。
options
— オプションflag
— 出力関数が呼び出される現在の状態。flag
の可能な値は'init'
— 初期化状態'iter'
— 反復状態'interrupt'
— 非線形制約問題の部分問題の反復flag
が'interrupt'
の場合、optimvalues
フィールドの値がサブ問題の反復に適用されます。flag
が'interrupt'
の場合、patternsearch
はoptions
の変更を受け入れず、optchanged
を無視します。
'done'
— 最終状態
追加パラメーターの受け渡し は、出力関数に追加のパラメータを提供する方法について説明します。
出力関数は、patternsearch
に次の引数を返します。
stop
— 現在の反復でアルゴリズムを停止する方法を提供します。stop
には次の値を指定できます。false
— アルゴリズムは次の反復に進みます。true
— アルゴリズムは現在の反復で終了します。
options
—patternsearch
オプション。optchanged
—options
への変更を示すブールフラグ。後続の反復でoptions
を変更するには、optchanged
をtrue
に設定します。
コマンドウィンドウオプションに表示
Display
は、パターン検索の実行中にコマンド ラインに表示される情報の量を指定します。利用可能なオプションは次のとおりです
"final"
(デフォルト) — 停止の理由が表示されます。"off"
または同等の"none"
— 出力は表示されません。"iter"
— 反復ごとに情報が表示されます。"diagnose"
— 反復ごとに情報が表示されます。さらに、診断にはいくつかの問題情報とデフォルトから変更されたオプションがリストされます。
"iter"
と "diagnose"
は両方とも次の情報を表示します。
Iter
— 反復回数FunEval
— 関数評価の累積回数MeshSize
— 現在のメッシュサイズFunVal
— 現在のポイントの目的関数値Method
— 現在の投票の結果(非線形制約関数は指定されていません)。非線形制約関数を使用すると、Method
はサブ問題が解決された後に使用される更新方法を表示します。Max Constraint
— 最大非線形制約違反(非線形制約関数が指定されている場合にのみ表示されます)
ベクトル化と並列化のオプション
目的関数と制約関数をシリアル、並列、またはベクトル形式で評価することを選択できます。ベクトル化または並列計算を使用するには、UseVectorized
または UseParallel
オプションを true
に設定します。
メモ
"classic"
アルゴリズムにベクトル化ポーリングまたは並列ポーリングを使用するには、UseCompletePoll
を true
に設定する必要があります。同様に、"classic"
アルゴリズムの場合、ベクトル化または並列検索のために UseCompleteSearch
を true
に設定します。
R2019a 以降では、UseParallel
オプションを true
に設定すると、patternsearch
が内部的に UseCompletePoll
設定を true
にオーバーライドし、関数が並列にポーリングするようになります。
UseVectorized
がfalse
の場合、patternsearch
はメッシュ ポイントをループしながら、一度に 1 つのポイントで目的関数を呼び出します。(これは、UseParallel
がデフォルト値のfalse
にあることを前提としています。)UseVectorized
はtrue
であり、patternsearch
はメッシュ内のすべてのポイントに対して目的関数を一度に呼び出します。つまり、目的関数を 1 回呼び出します。非線形制約がある場合、アルゴリズムがベクトル化された方法で計算できるように、目的関数と非線形制約をすべてベクトル化する必要があります。
詳細と例については、目的関数と制約関数をベクトル化する を参照してください。
UseParallel
がtrue
の場合、patternsearch
は、確立した並列環境を使用して、目的関数を並列に呼び出します (Global Optimization Toolbox で並列処理を使用する方法 を参照)。コマンドラインで、"UseParallel"
をfalse
に設定して連続的に計算します。
メモ
ベクトル化計算と並列計算を同時に使用することはできません。UseParallel
を true
に設定し、UseVectorized
を true
に設定すると、patternsearch
は目的関数と制約関数を並列ではなくベクトル化された方法で評価します。
目的関数と制約関数の評価方法
UseCompletePoll = true と仮定する | UseVectorized = false | UseVectorized = true |
---|---|---|
UseParallel = false | シリアル | ベクトル化 |
UseParallel = true | 並列 | ベクトル化 |
パターン検索アルゴリズムのオプションテーブル
すべてのアルゴリズムのオプション可用性表
オプション | 説明 | アルゴリズムの可用性 |
---|---|---|
AccelerateMesh | メッシュサイズの縮小を加速します。 | GPS と GSS、 |
Cache |
メモ
| All |
CacheSize | キャッシュのサイズ(ポイント数)。 | All |
CacheTol |
| All |
ConstraintTolerance | 非線形制約に対する許容度。 | All |
Display | コマンド ウィンドウへの表示レベル。 | All |
FunctionTolerance | 関数値の許容範囲。 | All |
InitialMeshSize | パターン検索アルゴリズムで使用される初期メッシュ サイズ。 | All |
InitialPenalty | ペナルティパラメータの初期値。 | All |
MaxFunctionEvaluations | 目的関数評価の最大数。 | All |
MaxIterations | 反復最大回数 | All |
MaxMeshSize | ポーリング/検索ステップで使用される最大メッシュ サイズ。 | GPSとGSS |
MaxTime | 最適化に許可される合計時間 (秒単位)。パターン検索アルゴリズムの指定された一時停止時間も含まれます。 | All |
MeshContractionFactor | 反復が失敗した場合に使用されるメッシュ収縮係数。 | GPS と GSS、 |
MeshExpansionFactor | メッシュ拡張係数。反復が成功したときにメッシュを拡張します。 | GPS と GSS、 |
MeshRotate | ポイントが最適であると宣言する前に、パターンを回転させます。 | GPS Np1 と GSS Np1 |
MeshTolerance | メッシュ サイズの許容範囲。 | All |
OutputFcn | パターン検索が各反復で呼び出すユーザー指定の関数。 | All |
PenaltyFactor | ペナルティ更新パラメータ。 | All |
PlotFcn | 実行時にプロットする関数を指定します。 | All |
PlotInterval | プロット関数が間隔ごとに呼び出されることを指定します。 | All |
PollOrderAlgorithm | 検索方向がポーリングされる順序。 | GPS と GSS、 |
PollMethod | パターン検索で使用されるポーリング戦略。 |
|
ScaleMesh | 変数の自動スケーリング。 | All |
SearchFcn | パターン検索で使用する検索方法を指定します。 | All |
StepTolerance | 独立変数に対する許容範囲。 | All |
TolBind | 線形制約がアクティブかどうかを判断するために使用されるバインド許容値。 | All |
UseCompletePoll | 現在の反復の周りのポーリングを完了します。投票ステップのすべてのポイントを評価します。 |
|
UseCompleteSearch | 検索方法がポーリング メソッドの場合、現在の反復の周囲で検索を完了します。検索ステップ内のすべてのポイントを評価します。 |
|
UseParallel |
| All |
UseVectorized | 目的関数と制約関数がベクトル化されるかどうかを指定します。 | All |