このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
ソルバーが並列計算を行う仕組み
Global Optimization Toolbox における並列処理タイプ
並列処理は最適化アルゴリズムを高速化する魅力的な方法です。並列処理を使用するには、Parallel Computing Toolbox™ ライセンスと並列ワーカー プール (parpool
) が必要です。詳細については、Global Optimization Toolbox で並列処理を使用する方法を参照してください。
Global Optimization Toolbox ソルバーはさまざまな方法で並列コンピューティングを使用します。
ソルバー | 並列? | 並列特性 |
---|---|---|
| × | 並列機能はありません。ただし、fmincon は、GlobalSearch で実行すると並列勾配推定を使用できます。Optimization Toolbox での並列計算の使用を参照してください。 |
|
| 開始ポイントは複数のプロセッサに分散されます。これらのポイントから、ローカル ソルバーが完了まで実行されます。詳細については、MultiStartおよびGlobal Optimization Toolbox で並列処理を使用する方法を参照してください。 |
fmincon の場合、並列 MultiStart による並列勾配推定は行われません。 | ||
|
| 反復ごとに 1 回ずつ、並列で評価される母集団。詳細については、遺伝的アルゴリズムおよびGlobal Optimization Toolbox で並列処理を使用する方法を参照してください。 |
適応度または制約関数のベクトル化はありません。 | ||
|
| 反復ごとに 1 回ずつ、並列で評価される母集団。詳細については、粒子群およびGlobal Optimization Toolbox で並列処理を使用する方法を参照してください。 |
目的関数または制約関数のベクトル化はありません。 | ||
|
| ポール点は並列で評価され、反復ごとに 1 回発生します。詳細については、パターン探索およびGlobal Optimization Toolbox で並列処理を使用する方法を参照してください。 |
目的関数または制約関数のベクトル化はありません。 | ||
| × | 並列機能はありません。ただし、simulannealbnd は並列実行されるハイブリッド関数を使用できます。シミュレーテッド アニーリングを参照してください。 |
|
| 探索ポイントは並列に評価されます。 |
目的関数または制約関数のベクトル化はありません。 |
さらに、いくつかのソルバーには、終了後に実行されるハイブリッド関数があります。一部のハイブリッド関数は並列で実行できます。また、ほとんどの patternsearch
探索方法は並列に実行できます。詳細については、並列探索関数またはハイブリッド関数を参照してください。
ツールボックス関数によるプロセスの分散方法
parfor の特性と注意点
ネストされた parfor ループはありません. ほとんどのソルバーは並列計算を実行するために Parallel Computing Toolbox parfor
(Parallel Computing Toolbox) 関数を使用します。2 つのソルバー surrogateopt
と paretosearch
は、代わりに parfeval
(Parallel Computing Toolbox) を使用します。
メモ
parfor
は、別の parfor
ループ内から呼び出された場合は並列で動作しません。
メモ
ドキュメンテーションでは、Simulink® を呼び出す場合は parfor
または parfeval
を使用しないように推奨されています。parfor 内での関数 sim の使用 (Simulink)を参照してください。そのため、ソルバーの組み込み並列機能を使用して Simulink シミュレーションを並列で最適化すると問題が発生する可能性があります。複数の Global Optimization Toolbox ソルバーで Simulink モデルを最適化する方法を示す例については、Simulink モデルを並列に最適化を参照してください。
たとえば、目的関数 userfcn
が parfor
を呼び出し、MultiStart
と並列処理を使用して fmincon
を呼び出すとします。また、並列最適化機能 に示されているように、fmincon
の並列勾配評価の条件が満たされていると仮定します。図parfor を並列で実行した場合は次の3つのケースを示しています。
最も外側のループは並列の
MultiStart
です。そのループのみを並列に実行します。最も外側の
parfor
ループはfmincon
内にあります。fmincon
のみを並列に実行します。最も外側の
parfor
ループはuserfcn
内にあります。この場合、userfcn
はparfor
を並列に使用できます。
parfor を並列で実行した場合
並列乱数は再現不可能. MATLAB® の乱数シーケンスは疑似乱数であり、シード、つまり初期設定から決定されます。並列計算では、必ずしも制御可能または再現可能ではないシードが使用されます。たとえば、MATLAB の各インスタンスには、ランダム シーケンスの現在のシードを決定するデフォルトのグローバル設定があります。
patternsearch
の場合、ポーリングまたは探索方法として MADS を選択した場合、並列パターン探索では再現可能な実行がありません。探索方法として遺伝的アルゴリズムまたはラテンハイパーキューブを選択した場合、並列パターン探索では再現可能な実行がありません。
ga
および gamultiobj
の場合、並列母集団世代では再現不可能な結果が生成されます。
MultiStart
は違います。並列 MultiStart
から再現可能な実行を 得ることができます。MultiStart
は疑似ランダムな開始点をローカルで生成し、その開始点を並列プロセッサに配布するため、実行は再現可能です。したがって、並列プロセッサは乱数を使用しません。詳細については、並列処理と乱数ストリームを参照してください。
制限事項とパフォーマンスに関する考慮事項. parfor
に関連するその他の注意事項は 並列 for ループ (parfor) (Parallel Computing Toolbox) に記載されています。
並列計算の速度に影響する要因と並列計算の結果に影響する要因については、並列計算によるパフォーマンスの向上 を参照してください。Global Optimization Toolbox 関数を使用した並列計算にも同じ考慮事項が適用されます。
MultiStart
MultiStart
は、問題と開始ポイントを複数のプロセスまたはプロセッサに自動的に分散できます。問題は独立して実行され、MultiStart
は個別の局所最小値を GlobalOptimSolution
オブジェクトのベクトルに結合します。MultiStart
は、次の場合に並列コンピューティングを使用します。
Parallel Computing Toolbox ソフトウェアのライセンスを持っていること。
Parallel Computing Toolbox 関数の
parpool
を使用して並列計算を有効にします。MultiStart
オブジェクトのUseParallel
プロパティをtrue
に設定します。ms = MultiStart('UseParallel',true);
これらの条件が満たされると、MultiStart
は問題と開始ポイントをプロセスまたはプロセッサに 1 つずつ分散します。アルゴリズムは、停止条件に達するか、配布する開始ポイントがなくなると停止します。MultiStart
Display
プロパティが 'iter'
の場合、MultiStart
は次のように表示されます。
Running the local solvers in parallel.
並列 MultiStart
の例については、並列マルチスタート を参照してください。
並列マルチスタートの実装上の問題. fmincon
は、並列 MultiStart
と併用すると、並列で勾配を推定できません。この並列勾配推定の欠如は、ネストされた parfor ループはありません で説明されている parfor
の制限によるものです。
fmincon
は、直列ではなく並列で勾配を推定するのに時間がかかることがあります。この場合、fmincon
での並列勾配推定と MultiStart
を使用すると、速度低下が増幅されます。たとえば、ms
MultiStart
オブジェクトの UseParallel
が false
に設定されているとします。problem.options.UseParallel
を true
に設定して、fmincon
が problem
を解くのに 1 秒長くかかるとします。すると、run(ms,problem,200)
は、problem.options.UseParallel
を false
に設定して同じ実行を行った場合よりも 200 秒長くかかります。
メモ
逐次実行した場合、parfor
ループは for
ループよりも実行が遅くなります。したがって、最高のパフォーマンスを得るには、MultiStart
UseParallel
プロパティが true
の場合、ローカル ソルバーの UseParallel
オプションを false
に設定します。
メモ
並列で実行する場合でも、ソルバーはホスト マシンで目的関数と非線形制約関数を逐次的に呼び出すことがあります。したがって、関数がシリアルおよび並列で評価されるかどうかについて想定されていないことを確認してください。
GlobalSearch
GlobalSearch
は問題と開始ポイントを複数のプロセスまたはプロセッサに分散しません。ただし、GlobalSearch
が fmincon
ローカル ソルバーを実行する場合、fmincon
は並列有限差分によって勾配を推定できます。fmincon
は、次の場合に並列コンピューティングを使用します。
Parallel Computing Toolbox ソフトウェアのライセンスを持っていること。
Parallel Computing Toolbox 関数の
parpool
を使用して並列計算を有効にします。UseParallel
オプションをoptimoptions
とともにtrue
に設定します。problem
構造でこのオプションを設定します。opts = optimoptions(@fmincon,'UseParallel',true,'Algorithm','sqp'); problem = createOptimProblem('fmincon','objective',@myobj,... 'x0',startpt,'options',opts);
詳細については、Optimization Toolbox での並列計算の使用を参照してください。
パターン探索
patternsearch
は、パターン内のポイントに関連付けられた目的関数と制約関数の評価を、複数のプロセスまたはプロセッサに自動的に分散できます。patternsearch
は、次の場合に並列コンピューティングを使用します。
Parallel Computing Toolbox ソフトウェアのライセンスを持っていること。
Parallel Computing Toolbox 関数の
parpool
を使用して並列計算を有効にします。optimoptions
を使用して次のオプションを設定します。UseCompletePoll
はtrue
です。UseVectorized
はfalse
(デフォルト) です。UseParallel
はtrue
です。
これらの条件が満たされると、ソルバーはポーリング中にパターン探索の目的関数と制約値を並列に計算します。さらに、patternsearch
は Cache
オプションの設定を上書きし、デフォルトの 'off'
設定を使用します。
R2019a 以降、UseParallel
オプションを true
に設定すると、patternsearch
が内部的に UseCompletePoll
設定を true
にオーバーライドし、関数が並列にポーリングするようになります。
メモ
並列実行している場合でも、patternsearch
はホスト マシン上で目的関数と非線形制約関数を順次呼び出すことがあります。このため、関数が逐次的または並列のいずれで評価されるのかについて、仮定がなされていないことを確認してください。
並列探索関数. patternsearch
はオプションで各反復で探索関数を呼び出すことができます。次の場合、探索は並列になります。
UseCompleteSearch
をtrue
に設定します。探索方法を
@searchneldermead
またはcustom
に設定しないでください。探索方法を
patternsearch
ポーリング方式またはラテンハイパーキューブ探索に設定し、UseParallel
をtrue
に設定します。または、探索方法を
ga
に設定する場合は、UseParallel
をtrue
に設定した探索方法オプションを作成します。
並列パターン探索における実装上の問題. パターン探索 にリストされている patternsearch
オプションの制限は、一部は parfor
の制限から、一部は並列処理の性質から生じています。
Cache
は'off'
にオーバーライドされます —patternsearch
はCache
を永続変数として実装します。parfor
は、変数がプロセッサごとに異なる設定を持つ可能性があるため、永続変数を処理しません。UseCompletePoll
はtrue
です —UseCompletePoll
は、patternsearch
がより良いポイントを見つけたらすぐにポーリングを停止するかどうかを決定します。並列探索を行う場合、parfor
はすべての評価を同時にスケジュールし、patternsearch
はすべての評価が完了した後に続行します。patternsearch
は評価の開始後に停止することはできません。R2019a 以降、
UseParallel
オプションをtrue
に設定すると、patternsearch
が内部的にUseCompletePoll
設定をtrue
にオーバーライドし、関数が並列にポーリングするようになります。UseVectorized
はfalse
です —UseVectorized
は、patternsearch
が 1 回の関数呼び出しでパターン内のすべてのポイントをベクトル化された方法で評価するかどうかを決定します。UseVectorized
がtrue
の場合、patternsearch
は関数の評価を分散しないため、parfor
は使用されません。
遺伝的アルゴリズム
ga
と gamultiobj
は、母集団に関連付けられた目的関数と非線形制約関数の評価を複数のプロセッサに自動的に分散できます。ga
は、次の場合に並列コンピューティングを使用します。
Parallel Computing Toolbox ソフトウェアのライセンスを持っていること。
Parallel Computing Toolbox 関数の
parpool
を使用して並列計算を有効にします。optimoptions
を使用して次のオプションを設定します。UseVectorized
はfalse
(デフォルト) です。UseParallel
はtrue
です。
これらの条件が満たされると、ga
は母集団内の個体の目的関数と非線形制約値を並列に計算します。
メモ
並列実行している場合でも、ga
はホスト マシン上で適応度関数と非線形制約関数を順次呼び出すことがあります。このため、関数が逐次的または並列のいずれで評価されるのかについて、仮定がなされていないことを確認してください。
並列遺伝的アルゴリズムの実装上の問題. 遺伝的アルゴリズム にリストされているオプションの制限は、一部は parfor
の制限から、一部は並列処理の性質から生じています。
UseVectorized
はfalse
です —UseVectorized
は、ga
がベクトル化された方法で 1 回の関数呼び出しで母集団全体を評価するかどうかを決定します。UseVectorized
がtrue
の場合、ga
は関数の評価を分散しないため、parfor
は使用されません。
ga
は終了後に実行されるハイブリッド関数を持つことができます。遺伝的アルゴリズムにおけるハイブリッド方式 を参照してください。ハイブリッド関数で並列計算を活用するには、UseParallel
が true
になるようにオプションを個別に設定します。ハイブリッド関数が patternsearch
の場合、patternsearch
が並列に実行されるように UseCompletePoll
を true
に設定します。
ハイブリッド関数が fmincon
の場合、並列勾配推定を行うには、optimoptions
で次のオプションを設定します。
GradObj
は'on'
であってはなりません —'off'
または[]
は使用できます。または、非線形制約関数がある場合、
GradConstr
は'on'
であってはならず、'off'
または[]
になります。
ハイブリッド関数のオプションの記述方法については、並列ハイブリッド関数 を参照してください。
gamultiobj による並列計算
gamultiobj
を使用した並列コンピューティングは、ga
を使用した場合とほぼ同じように動作します。詳細については、遺伝的アルゴリズムを参照してください。
gamultiobj
と ga
を使用した並列コンピューティングの違いは、ハイブリッド関数に関係しています。gamultiobj
では、ハイブリッド関数は1 つだけ、fgoalattain
のみが許可されます。この関数は、gamultiobj
の実行が終了した後にオプションで実行されます。計算されたパレート境界内の各個体、つまり gamultiobj
によって発見された最終的な母集団は、fgoalattain
を使用した最適化の開始点になります。これらの最適化は並行して実行されます。これらの最適化を実行するプロセッサの数は、個体数と parpool
のサイズのうち小さい方になります。
fgoalattain
を並列実行するには、オプションを正しく設定します。
fgoalopts = optimoptions(@fgoalattain,'UseParallel',true) gaoptions = optimoptions('ga','HybridFcn',{@fgoalattain,fgoalopts});
gamultiobj
を gaoptions
と一緒に実行すると、fgoalattain
が並行して実行されます。ハイブリッド関数の設定の詳細については、ハイブリッド関数オプション を参照してください。gamultiobj
は parfor
ループを使用して fgoalattain
を呼び出すため、fgoalattain
は gamultiobj
とのハイブリッド関数として使用された場合、並列で勾配を推定しません。詳細については、ネストされた parfor ループはありませんを参照してください。
粒子群
particleswarm
は、母集団に関連付けられた目的関数の評価を複数のプロセッサに自動的に分散できます。particleswarm
は、次の場合に並列コンピューティングを使用します。
Parallel Computing Toolbox ソフトウェアのライセンスを持っていること。
Parallel Computing Toolbox 関数の
parpool
を使用して並列計算を有効にします。optimoptions
を使用して次のオプションを設定します。UseVectorized
はfalse
(デフォルト) です。UseParallel
はtrue
です。
これらの条件が満たされると、particleswarm
は母集団内の粒子の目的関数を並列に計算します。
メモ
並列実行している場合でも、particleswarm
はホスト マシン上で目的関数を逐次的に呼び出すことがあります。したがって、目的関数がシリアルで評価されるか並列で評価されるかについての仮定がないことを確認してください。
並列粒子群最適化における実装上の問題. 粒子群 にリストされているオプションの制限は、一部は parfor
の制限から、一部は並列処理の性質から生じています。
UseVectorized
はfalse
です —UseVectorized
は、particleswarm
がベクトル化された方法で 1 回の関数呼び出しで母集団全体を評価するかどうかを決定します。UseVectorized
がtrue
の場合、particleswarm
は関数の評価を分散しないため、parfor
は使用されません。
particleswarm
は終了後に実行されるハイブリッド関数を持つことができます。遺伝的アルゴリズムにおけるハイブリッド方式 を参照してください。ハイブリッド関数で並列計算を活用するには、UseParallel
が true
になるようにオプションを個別に設定します。ハイブリッド関数が patternsearch
の場合、patternsearch
が並列に実行されるように UseCompletePoll
を true
に設定します。
ハイブリッド関数が fmincon
の場合、並列勾配推定を行うには、GradObj
オプションを 'off'
または []
に、optimoptions
とともに設定します。
ハイブリッド関数のオプションの記述方法については、並列ハイブリッド関数 を参照してください。
シミュレーテッド アニーリング
simulannealbnd
は自動的には並列実行されません。ただし、並列コンピューティングを活用するハイブリッド関数を呼び出すことはできます。ハイブリッド関数のオプションの記述方法については、並列ハイブリッド関数 を参照してください。
パレート探索
paretosearch
は、母集団に関連付けられた目的関数の評価を複数のプロセッサに自動的に分散できます。paretosearch
は、次の場合に並列コンピューティングを使用します。
Parallel Computing Toolbox ソフトウェアのライセンスを持っていること。
Parallel Computing Toolbox 関数の
parpool
を使用して並列計算を有効にします。optimoptions
を使用して次のオプションを設定します。UseParallel
はtrue
です。
これらの条件が満たされると、paretosearch
は母集団内の粒子の目的関数を並列に計算します。
メモ
並列実行している場合でも、paretosearch
はホスト マシン上で目的関数を逐次的に呼び出すことがあります。したがって、目的関数がシリアルで評価されるか並列で評価されるかについての仮定がないことを確認してください。
アルゴリズムの詳細については、並列計算とベクトル化関数評価のための変更 を参照してください。
サロゲート最適化
surrogateopt
は、母集団に関連付けられた目的関数の評価を複数のプロセッサに自動的に分散できます。surrogateopt
は、次の場合に並列コンピューティングを使用します。
Parallel Computing Toolbox ソフトウェアのライセンスを持っていること。
Parallel Computing Toolbox 関数の
parpool
を使用して並列計算を有効にします。optimoptions
を使用して次のオプションを設定します。UseParallel
はtrue
です。
これらの条件が満たされると、surrogateopt
は母集団内の粒子の目的関数を並列に計算します。
メモ
並列実行している場合でも、surrogateopt
はホスト マシン上で目的関数を逐次的に呼び出すことがあります。したがって、目的関数がシリアルで評価されるか並列で評価されるかについての仮定がないことを確認してください。
アルゴリズムの詳細については、並列surrogateoptアルゴリズム を参照してください。