ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Parfor を使った並列シミュレーション:ノーマル モードでのパラメーター スイープ

この例では、Parallel Computing Toolbox™ を使用して、モンテカルロ法の Simulink シミュレーションを複数並列して実行する方法を示します。これには、5 つの主要手順があります。

  1. 自分のマシンで MATLAB ワーカーを起動

  2. 複数シミュレーションに必要なデータを設定

  3. parfor (parallel for) ループで複数のシミュレーションを実行

  4. 複数シミュレーションの結果をプロット

  5. MATLAB ワーカーを閉じる

モデルの概要

以下に示すモデル sldemo_suspn_3dof sldemo_suspn_3dof は、さまざまな路面凹凸に関して、道路/サスペンションの相互作用に基づく車両運動をシミュレーションします。車両運動は、垂直変位、ロール、ピッチの 3 つの自由度でキャプチャされます。左と右のタイヤの路面凹凸は、異なるテスト グループとして Signal Builder ブロックにインポートされます。Road-Suspension Interaction サブシステムが、道路データと現在の車両状態に基づいて、4 つのタイヤ位置で車両にかかるサスペンションの力を計算します。Body Dynamics サブシステムでは、これらの力とその結果のピッチおよびロールのモーメントを使用して、垂直変位、ロール、ピッチの 3 つの自由度で車両の動きを決定します。

このモンテカルロ法では、フロント サスペンション システムの減衰係数を変化させて、車両運動に対するそれらの影響を研究します。下記に示すように、これらの複数のシミュレーションは、Parallel Computing Toolbox の使用によってスピードアップされます。

mdl               = 'sldemo_suspn_3dof';
isModelOpen       = bdIsLoaded(mdl);
open_system(mdl);

手順 1: 自分のマシンで MATLAB ワーカーを起動

まず、MATLAB ワーカーのプールを設定し、起動します。matlabpool コマンドを使用して、MATLAB プールが開いていることを確認し、マルチコア デスクトップでローカル プールを開きます。これには、Parallel Computing Toolbox が必要です。

numWorkers   = matlabpool('size');
isPoolOpen   = (numWorkers > 0);
if(~isPoolOpen)
    matlabpool;
end
Starting matlabpool using the 'LocalProfile1' profile ... connected to 6 workers.

手順 2: 複数シミュレーションに必要なデータを設定

モンテカルロ法で使用されるフロント サスペンション減衰係数のパラメーター ベクトルを作成します。また、手順 3 でシミュレーション結果の収集に使用される SimulationOutput オブジェクトの配列を Simulink パッケージに事前に割り当てます。

Cf_sweep            = Cf*(0.05:0.1:0.95);
iterations          = length(Cf_sweep);
simout(iterations)  = Simulink.SimulationOutput;

手順 3: parfor (Parallel for) ループで複数のシミュレーションを実行

parfor ループ内のさまざまなパラメーターに対応する複数のシミュレーションを実行します。simsim コマンドはすべてのシミュレーション データを Simulink パッケージの SimulationOutput オブジェクトとして返します。Nシミュレーションの結果は、手順 2 で事前に割り当てられた変数 simout 内に収集されることに注意してください。

parfor idx = 1:iterations
    load_system(mdl);
    set_param([mdl '/Road-Suspension Interaction'],'MaskValues',...
        {'Kf',num2str(Cf_sweep(idx)),'Kr','Cr'});
    simout(idx) = sim(mdl,'SimulationMode','normal');
end

手順 4: 複数シミュレーションの結果をプロット

さまざまなシミュレーションから車両の垂直変位をプロットして、減衰係数の変化が車両運動にどのように影響したかを確認します。SimulationOutput オブジェクトの get メソッドを使用して、simout の各要素に含まれている時間と信号のデータを取得します。

legend_labels = cell(1,iterations);
for i = 1:iterations
        si = simout(i);
        ts = si.get('logsout').get('vertical_disp').Values;
        ts.plot;
        legend_labels{i} = ['Run ' num2str(i)];
        hold all
end
title('Response of a 3-DoF Suspension Model')
xlabel('Time (s)');
ylabel('Vehicle vertical displacement (m)');
legend(legend_labels,'Location','NorthEastOutside');

手順 5: MATLAB ワーカーを閉じる

最後に、MATLAB プールとモデルを閉じます (まだ閉じられていない場合)。

if(~isModelOpen)
    close_system(mdl, 0);
end
if(~isPoolOpen)
    matlabpool close
end
Parallel pool using the 'LocalProfile1' profile is shutting down.
この情報は役に立ちましたか?