主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

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

この例では,并行计算工具箱™を使用して,モンテカルロ法のシミュレーションを複数並列して実行する方法を示します。並列実行はホストマシンの複数のコアを活用して多くのシミュレーションの実行を高速化します。これらのシミュレーションは,MATLAB并行服务器™を使用し,コンピュータークラスターで並列に実行することもできます。この例は并行计算工具箱™またはMATLAB并行服务器™が利用できない場合でも機能しますが,シミュレーションは逐次実行されます。

モデル例の確認

モデルsldemo_suspn_3dofは,さまざまな路面凹凸に対する路面とサスペンション間の交互作用に基づいた車両運動のシミュレーションを実行します。このモデルは,車両運動を垂直変位,ロール,ピッチの3つの自由度で取得します。信号编辑ブロックは,測定した左と右のタイヤの路面凹凸データを異なるテストグループとして保存します。Road-Suspension交互サブシステムが,道路データと現在の車両状態に基づいて,4つのタイヤ位置で車両にかかるサスペンションの力を計算します。体动力学サブシステムでは,これらの力とその結果となるピッチモーメントおよびロールモーメントを使用して,3つの自由度ごとに車両の動きを計算します。

このモンテカルロ法では,車両運動に対するフロントサスペンション係数の影響を検査します。複数のシミュレーションを,それぞれ異なる係数値で実行します。

mdl =“sldemo_suspn_3dof”isModelOpen=bdIsLoaded(mdl);open_系统(mdl);

モデルでRoad-Suspension交互ブロックをダブルクリックします。マスクダイアログボックスが開きます。マスクパラメーターの[susp前面。阻尼)に減衰係数の値150を設定します。

体动力学ブロックでは,垂直disp出力端子から出る信号を見つけます。この信号が表す時間経過に沿った車両の垂直変位は、サスペンション減衰係数の影響を受けます。

信号を右クリックし、[プロパティ]を選択します。

(信号プロパティ]ダイアログボックスの,[ログとユーザー補助機能)タブでは(信号データのログ]チェックボックスがオンになっており,信号がログ作成用に構成されていることを示します。シミュレーションの終了後,指定したログ名垂直显示を使用して信号を特定し、模拟输出オブジェクトからシミュレーション出力データを取得できます。

パラメーター入力の準備

スイープ値は、5% から 95% まで 10% ずつインクリメントする設計値のパーセントの係数として計算します。ベース ワークスペースで変数Cf_sweepに値を保存します。

Cf_sweep = Cf * (0.05:0.1:0.95);

実行するシミュレーション回数を決定します。これは,スイープ値の数と同じです。この数を変数努姆斯に保存します。

numSims =长度(Cf_sweep);

ループを使用して、次を行います。

  1. モデルの金宝app仿真软件。SimulationInputオブジェクトを作成します。シミュレーションにつき 1.つのオブジェクトを作成します。オブジェクトを配列として変数に保存します。

  2. 各シミュレーションのスイープ値を指定します。基となる名前Cfでターゲットマスクパラメーターを特定します。

i = numSims:-1:1 in(i) = 金宝appSimulink.SimulationInput(mdl);in(i) = setBlockParameter(in(i), [mdl . txt]/ Road-Suspension交互的],Cf的num2str (Cf_sweep(我)));结束

ブロック パラメーターを 模拟输入オブジェクトに指定しても、直ちにモデルに適用されるわけではないことに注意してください。指定した値はシミュレーション中に適用され、シミュレーションの終了後、可能な場合は元の値に戻されます。

帕西姆を使ったシミュレーションの並列実行

関数parsimを使用してシミュレーションを並列実行します。最後の手順で作成されたSimulationInputオブジェクトの配列は,最初の引数として関数parsimに渡されます。parsimコマンドからの出力は、変数出来に保存される金宝app仿真软件。SimulationOutputオブジェクトの配列です。“ShowProgress”オプションを”“に設定し,シミュレーションの進行状況をMATLABコマンドウィンドウに出力します。

= parsim (,“ShowProgress”“上”);
[13- 12 -2018 12:01:49] check for availability of parallel pool…使用“local”配置文件启动并行池(parpool)…[13- 12 -2018 12:04:34] Starting Simulink on parallel workers…金宝app[13- 12 -2018 12:04:35]配置并行工作器上的模拟缓存文件夹…[13- 12 -2018 12:04:36] Loading model on parallel workers…[13- 12 -2018 12:05:00]运行模拟…[13- 12 -2018 12:06:24] 10次仿真运行中完成1次[13- 12 -2018 12:06:24]10次仿真运行中完成2次[13- 12 -2018 12:06:24]10次仿真运行中完成3次[13- 12 -2018 12:06:38]10次仿真运行中完成4次[13- 12 -2018 12:06:39]10次仿真运行中完成5次[13- 12 -2018 12:06:40]10次仿真运行中完成6次[13- 12 -2018 12:07:18]完成10次仿真运行中的7次[13- 12 -2018 12:07:19]完成10次仿真运行中的8次[13- 12 -2018 12:07:19]完成10次仿真运行中的9次[13- 12 -2018 12:07:30]完成10次仿真运行中的10次仿真运行中的10次[13- 12 -2018 12:07:30]

各 模拟输出オブジェクトには、ログ信号に加え、模拟元数据が含まれています。parsimを使用して複数のシミュレーションを実行すると,後続のシミュレーションを継続して実行できるようにエラーがキャプチャされます。エラーがあればSimulationOutputオブジェクトの错误信息プロパティに表示されます。

結果のプロット

さまざまなシミュレーションから車両の垂直変位をプロットして,減衰係数の変化が車両運動にどのように影響するかを確認します。信号はSimulationOutputオブジェクトに数据集形式で記録されます。收到メソッドを使用して,出来の各要素からの時間と信号データが含まれる時系列オブジェクトを取得します。

legend_labels =细胞(1、numSims);i=numSims:-1:1 simOut=out(i);ts=simOut.logsout.get(“vertical_disp”) . values;%“ts”是一个MATLAB“timeseries”对象,用于存储时间和%记录的'vertical_disp'信号的数据值。使用对象的“plot”方法来绘制数据%的时间。情节(ts);legend_labels{我}= [“运行”num2str(i)];等待全部的结束标题(3自由度悬架模型的响应)xlabel(‘时间’);ylabel (“车辆垂直位移(m)”);图例(图例和标签,“位置”“NorthEastOutside”);

MATLABワーカーを閉じる

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

如果(~isModelOpen)闭_系统(mdl,0);结束删除(gcp (“nocreate”));
正在关闭使用“本地”配置文件的并行池。