このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
Global Optimization Toolbox で並列処理を使用する方法
マルチコアプロセッサ
マルチコア プロセッサを使用している場合は、並列処理を使用すると処理速度が向上することがあります。Parallel Computing Toolbox™ ライセンスで、いくつかのワーカーの並列プールを設定できます。Parallel Computing Toolbox ソフトウェアの詳細については、Parallel Computing Toolbox 入門 (Parallel Computing Toolbox)を参照してください。
デュアルコア プロセッサが搭載されており、並列計算を使用するとします。次のコードをコマンド ラインで入力します。
parpool
MATLAB® が、マルチコア プロセッサを使用してワーカーのプールを開始します。既定ではないクラスター プロファイルが既に設定されている場合は、次のコードを入力することによって、マルチコア (ローカル) コンピューティングを実行できます。
parpool('local')
メモ
基本設定によっては、MATLAB は並列プールを自動的に起動できます。この機能を有効にするには、[ホーム] タブの [環境] グループで [並列]、[並列基本設定] を選択してから、[並列プールを自動的に作成する] をオンにします。
並列処理を使用するようにソルバーを設定します。
ソルバー | コマンドライン設定 |
---|---|
ga |
|
gamultiobj |
|
MultiStart |
または
|
paretosearch |
|
particleswarm |
|
patternsearch |
|
surrogateopt |
|
R2019a 以降では、UseParallel
オプションを true
に設定すると、patternsearch
が内部的に UseCompletePoll
設定を true
にオーバーライドし、関数が並列にポーリングするようになります。
options
を使用して適用可能なソルバーを実行すると、そのソルバーは自動的に並列計算を使用します。
並列での最適化計算を停止するには、UseParallel
を false
に設定します。すべての並列計算を停止するには、次のコードを入力します。
delete(gcp)
メモ
ドキュメンテーションでは、Simulink® を呼び出す場合は parfor
または parfeval
を使用しないように推奨されています。parfor 内での関数 sim の使用 (Simulink)を参照してください。そのため、ソルバーの組み込み並列機能を使用して Simulink シミュレーションを並列で最適化すると問題が発生する可能性があります。
プロセッサネットワーク
ネットワーク上に複数のプロセッサがある場合は、Parallel Computing Toolbox 関数と MATLAB Parallel Server™ ソフトウェアを使用して並列計算を設定します。
システムが並列計算用に正しく設定されていることを確認します。システム管理者にチェックを依頼するか、Parallel Computing Toolbox ドキュメンテーションを参照してください。
次のコードを入力して、基本チェックを実行します。ここで、
prof
はクラスター プロファイルです。parpool(prof)
ワーカーは目的関数のファイルと、該当する場合は非線形制約関数のファイルにアクセスできなければなりません。確実にアクセスするため、次のステップのいずれかを実行します。
parpool
(Parallel Computing Toolbox)AttachedFiles
引数を使用してワーカーにファイルを分散する。この例では、objfun.m
が目的関数ファイルで、constrfun.m
が非線形制約関数ファイルです。parpool('AttachedFiles',{'objfun.m','constrfun.m'});
ワーカーはファイルの独自のコピーにアクセスします。
目的または制約関数ファイルへのネットワーク ファイル パスを指定します。
pctRunOnAll('addpath network_file_path')
ワーカーはネットワークを通じて関数ファイルにアクセスします。
ファイルがすべてのワーカーのパス上にあるかどうかをチェックします。
ワーカーにファイルへのパスがない場合は、次のように出力されます。pctRunOnAll('which filename')
filename not found.
並列処理を使用するようにソルバーを設定します。
ソルバー | コマンドライン設定 |
---|---|
ga |
|
gamultiobj |
|
MultiStart |
または
|
paretosearch |
|
particleswarm |
|
patternsearch |
|
surrogateopt |
|
R2019a 以降では、UseParallel
オプションを true
に設定すると、patternsearch
が内部的に UseCompletePoll
設定を true
にオーバーライドし、関数が並列にポーリングするようになります。
並列計算環境を設定した後は、適用可能なソルバーは、options
を使用して呼び出したときにはいつでも自動的に並列計算を使用します。
並列での最適化計算を停止するには、UseParallel
を false
に設定します。すべての並列計算を停止するには、次のコードを入力します。
delete(gcp)
メモ
ドキュメンテーションでは、Simulink を呼び出す場合は parfor
または parfeval
を使用しないように推奨されています。parfor 内での関数 sim の使用 (Simulink)を参照してください。そのため、ソルバーの組み込み並列機能を使用して Simulink シミュレーションを並列で最適化すると問題が発生する可能性があります。
並列検索機能またはハイブリッド機能
patternsearch
検索関数を並列で実行したり、ga
または simulannealbnd
のハイブリッド関数を並列で実行するには、次の手順を実行します。
マルチコアプロセッサ または プロセッサネットワーク の説明に従って並列処理を設定します。
検索機能またはハイブリッド機能に、次のセクションで概説されている条件が満たされていることを確認します。
パターン検索検索機能
patternsearch
は、以下の条件下で並列検索機能を使用します。
UseCompleteSearch
はtrue
です。検索方法は
@searchneldermead
またはcustom
ではありません。検索方法が
patternsearch
ポーリング法またはラテンハイパーキューブ検索の場合、UseParallel
はtrue
になります。optimoptions
を使用してコマンドラインで設定します。options = optimoptions('patternsearch','UseParallel',true,... 'UseCompleteSearch',true,'SearchFcn',@GPSPositiveBasis2N);
検索方法が
ga
の場合、検索方法オプションではUseParallel
がtrue
に設定されています。optimoptions
を使用してコマンドラインで設定します。iterlim = 1; % iteration limit, specifies # ga runs gaopt = optimoptions('ga','UseParallel',true); options = optimoptions('patternsearch','SearchFcn',... {@searchga,iterlim,gaopt});
並列ハイブリッド関数
ga
、particleswarm
、および simulannealbnd
では、反復の後に他のソルバーを実行したり、反復の間に他のソルバーを散在させたりすることができます。これらの他のソルバーはハイブリッド関数と呼ばれます。gamultiobj
でのハイブリッド関数の使用については、gamultiobj による並列コンピューティング を参照してください。patternsearch
と fmincon
はどちらもハイブリッド関数になることができます。patternsearch
が並列で実行されるように、または fmincon
が並列で勾配を推定するようにオプションを設定できます。
ga
の場合は ハイブリッド機能オプション、particleswarm
の場合は ハイブリッド機能、simulannealbnd
の場合は ハイブリッド機能オプション の説明に従って、ハイブリッド機能のオプションを設定します。要約:
ハイブリッド関数が
patternsearch
の場合patternsearch
オプションを作成します:hybridopts = optimoptions('patternsearch','UseParallel',true,... 'UseCompletePoll',true);
patternsearch
をハイブリッド関数として使用するには、ga
またはsimulannealbnd
オプションを設定します。options = optimoptions('ga','UseParallel',true); % for ga options = optimoptions('ga',options,... 'HybridFcn',{@patternsearch,hybridopts}); % or, for simulannealbnd: options = optimoptions(@simulannealbnd,'HybridFcn',{@patternsearch,hybridopts});
並列
patternsearch
の詳細については、 パターン探索 を参照してください。ハイブリッド関数が
fmincon
の場合:fmincon
オプションを作成します:hybridopts = optimoptions(@fmincon,'UseParallel',true,... 'Algorithm','interior-point'); % You can use any Algorithm except trust-region-reflective
fmincon
をハイブリッド関数として使用するには、ga
またはsimulannealbnd
オプションを設定します。options = optimoptions('ga','UseParallel',true); options = optimoptions('ga',options,'HybridFcn',{@fmincon,hybridopts}); % or, for simulannealbnd: options = optimoptions(@simulannealbnd,'HybridFcn',{@fmincon,hybridopts});
並列
fmincon
の詳細については、 並列計算 を参照してください。
並列最適化のテスト
次の手順に従って、問題が並列で正しく動作するかどうかをテストします。
並列計算を使用せずに問題を試し、それが逐次実行されることを確認します。次のテストに進む前に、このテストが成功する (正しい結果が得られる) ことを確認します。
UseParallel
をtrue
に設定し、delete(gcp)
を入力して並列プールが存在しないことを確認します。MATLAB が並列プールを作成しないことを確認するには、[ホーム] タブの [環境] グループで [並列]、[並列基本設定] を選択してから、[並列プールを自動的に作成する] をオフにします。for
ループとは逆順のループの反復によりparfor
で逐次的に問題を実行します。次のテストに進む前に、このテストが成功する (正しい結果が得られる) ことを確認します。UseParallel
をtrue
に設定し、parpool
を使用して並列プールを作成します。マルチコア プロセッサまたはネットワークを設定していない場合は、このテストの処理速度が向上しません。このテストは計算の正確性を検証するためのものです。
options
引数を使用してソルバーを呼び出し、並列機能をテストまたは使用するようにしてください。