このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
パターン探索オプション
パターン探索のオプション
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— アルゴリズムは現在の反復で終了します。
メモ
プロット関数のフレームワークで座標軸が管理されるため、プロット関数は 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"では、各反復で再生成される 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 psoutputfcntemplateMATLAB® コマンドプロンプトで。
出力関数で追加のパラメーターを渡すには、無名関数 を使用します。
出力関数の構造
出力関数には次の呼び出し構文が必要です。
[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 |
メモ ソルバーを並列で実行すると、 | すべて |
CacheSize | キャッシュのサイズ(ポイント数)。 | すべて |
CacheTol |
| すべて |
ConstraintTolerance | 非線形制約に対する許容範囲。 | すべて |
Display | コマンド ウィンドウへの表示レベル。 | すべて |
FunctionTolerance | 関数値の許容範囲。 | すべて |
InitialMeshSize | パターン探索アルゴリズムで使用される初期メッシュ サイズ。 | すべて |
InitialPenalty | ペナルティパラメーターの初期値。 | すべて |
MaxFunctionEvaluations | 目的関数評価の最大数。 | すべて |
MaxIterations | 反復最大回数 | すべて |
MaxMeshSize | ポーリング/探索ステップで使用される最大メッシュ サイズ。 | GPSとGSS |
MaxTime | 最適化に許可される合計時間 (秒単位)。パターン探索アルゴリズムの指定された一時停止時間も含まれます。 | すべて |
MeshContractionFactor | 反復が失敗した場合に使用されるメッシュ収縮係数。 | GPSとGSS、 |
MeshExpansionFactor | メッシュ拡張係数。反復が成功したときにメッシュを拡張します。 | GPSとGSS、 |
MeshRotate | ポイントが最適であると宣言する前にパターンを回転させます。 | GPS Np1 と GSS Np1 |
MeshTolerance | メッシュ サイズの許容範囲。 | すべて |
OutputFcn | パターン探索が各反復で呼び出すユーザー指定関数。 | すべて |
PenaltyFactor | ペナルティ更新パラメーター。 | すべて |
PlotFcn | 実行時にプロットする関数を指定します。 | すべて |
PlotInterval | プロット関数が間隔ごとに呼び出されることを指定します。 | すべて |
PollOrderAlgorithm | 探索方向がポーリングされる順序。 | GPSとGSS、 |
PollMethod | パターン探索で使用されるポーリング戦略。 |
|
ScaleMesh | 変数の自動スケーリング。 | すべて |
SearchFcn | パターン探索で使用する探索方法を指定します。 | すべて |
StepTolerance | 独立変数に対する許容範囲。 | すべて |
TolBind | 線形拘束がアクティブかどうかを判断するために使用されるバインド許容値。 | すべて |
UseCompletePoll | 現在の反復の周りのポーリングを完了します。ポーリングステップですべてのポイントを評価します。 |
|
UseCompleteSearch | 探索方法がポーリング メソッドの場合、現在の反復の周囲で探索を完了します。探索ステップ内のすべてのポイントを評価します。 |
|
UseParallel |
| すべて |
UseVectorized | 目的関数と制約関数がベクトル化されるかどうかを指定します。 | すべて |