文档

并行模拟使用Parsim:参数扫描在快速加速器模式

这个例子展示了如何使用并行计算工具箱™并行运行蒙特卡洛研究的多个模拟。并行执行利用主机的多核来更快地运行许多模拟。这些模拟也可以使用MATLAB分布式计算服务器™在计算机集群上并行运行。即使并行计算工具箱™或MATLAB分布式计算服务器™不可用,这个示例也可以工作,但模拟将以串行方式运行。

探索模型示例

该模型sldemo_suspn_3dof基于路面与悬架的相互作用,对不同路面情况下的车辆动力学进行了仿真。该模型可以在三个自由度(垂直位移、横摇和俯仰)中捕捉车辆的动态。Signal Builder块存储测量的道路轮廓数据的左右轮胎作为不同的测试组。道路-悬架相互作用子系统根据道路数据和车辆当前状态计算车辆在四个轮胎位置上的悬架力。身体动力学子系统使用这些力和由此产生的俯仰和横摇力矩来计算车辆在三个自由度中的每个自由度的运动。

在蒙特卡罗研究中,通过改变车辆质量来研究其对车辆动力学的影响。并行计算工具箱用于加速这些多重模拟,如下所示。

mdl =“sldemo_suspn_3dof”;isModelOpen = bdIsLoaded (mdl);open_system (mdl);

安装以生成快速加速器目标

模型的Rapid Accelerator可执行文件是在SetupFcn调用中使用buildRapidAcceleratorTarget函数的万博1manbetx仿真软件。立体图包中。的buildRapidAcceleratorTarget函数返回指定给全局变量的默认运行时参数集,RTP,在SetupFcn中,并在下一步中用于修改参数值。开放sldemo_parsim_paramsweep_suspn_raccel_setup编辑器中检查代码。请注意,构建过程是经过优化的,因此如果构建文件已经存在并与模型和机器体系结构兼容,那么它就会提前返回。

使用SimulationInput对象设置多个模拟

将扫描值存储在一个变量中,Mb_sweep,在基本工作区中。

Mb_sweep = m * (0.5:5:45.5);

确定要运行的模拟的数量,这等于扫描值的数量。将数字存储在一个变量中,numSims

numSims =长度(Mb_sweep);

使用一个循环:

  1. 创建万博1manbetx仿真软件。SimulationInput对象。为每个模拟创建一个对象。将对象作为数组存储在变量中,

  2. 在SimulationInput对象上指定模型参数。

i = numSims:-1:1 in(i) = 万博1manbetxSimulink.SimulationInput(mdl);在(我)=(我).setModelParameter (“SimulationMode”“快速”...“RapidAcceleratorUpToDateCheck”“关闭”);(我)。PreSimFcn = @(x) sldemo_parsim_parsim_paramsweep_susn_racel_presim (x, Mb_sweep(i));结束

SimulationInput对象用于修改模型参数。“SimulationMode”被设置为使用快速加速器,“RapidAcceleratorUpToDateCheck”模型参数被设置为“off”,以跳过最新的检查,因为在模拟和相同的构建文件之间没有对模型做出结构更改,可以使用。注意,在SimulationInput对象上指定模型参数并不会立即将其应用到模型中。在仿真过程中应用指定的值,如果可能,在仿真完成后恢复到初始值。检查PreSimFcn中的代码,sldemo_parsim_paramsweep_suspn_raccel_presim.它使用modifyTunableParameters从仿真软件。万博1manbetx立体图package to change the parameter corresponding to vehicle mass. The first argument to the PreSimFcn is always the SimulationInput object, and is passed into the function by Simulink®. The PreSimFunction adds another model parameter to the SimulationInput object and returns it to be used for simulation.

使用Parsim并行运行模拟

使用parsim函数并行地执行模拟。SimulationInput对象数组,,在最后一步中创建的parsim函数作为第一个参数。的输出parsim的数组万博1manbetx仿真软件。SimulationOutput对象存储在变量中.将“ShowProgress”选项设置为“on”,在MATLAB命令窗口上打印模拟的进度。如前所述,SetupFcn作为参数传递给parsim命令,以便在必要时在工人上构建快速加速器目标。

= parsim (,“ShowProgress”“上”...“SetupFcn”@ () sldemo_parsim_paramsweep_suspn_raccel_setup (mdl));
[06-Feb-2018 21:38:02] check for availability for parallel pool…使用“local”配置文件启动并行池(parpool)…连接到12个工人。[06-Feb-2018 21:38:22]加载Simulin万博1manbetxk在并行工作者上…分析和传送文件给工人…完成。[06-Feb-2018 21:38:48]在并行工作者上配置模拟缓存文件夹…[06-Feb-2018 21:38:49]运行SetupFcn并行工作…[06-Feb-2018 21:39:19]加载模型并行工人…[06-Feb-2018 21:39:19]运行模拟…[06-Feb-2018 21:39:24]在10次仿真运行中完成1次[06-Feb-2018 21:39:24]在10次仿真运行中完成2次[06-Feb-2018 21:39:24]在10次仿真运行中完成3次[06-Feb-2018 21:39:24]在10次仿真运行中完成4次[06-Feb-2018 21:39:24]在10次仿真运行中完成5次[06-Feb-2018 21:39:24 [06-Feb-2018 21:39:24] Completed 7 of 10 simulation runs [06-Feb-2018 21:39:24] Completed 8 of 10 simulation runs [06-Feb-2018 21:39:24] Completed 9 of 10 simulation runs [06-Feb-2018 21:39:24] Completed 10 of 10 simulation runs [06-Feb-2018 21:39:24] Cleaning up parallel workers...

每个SimulationOutput对象包含记录的信号和SimulationMetadata。当运行多个模拟使用parsim,捕获错误,以便后续模拟可以继续运行。任何错误都会在ErrorMessage属性的模拟输出对象。

阴谋的结果

绘制不同模拟的垂直车辆位移图,以查看车辆质量的变化如何影响车辆动力学。使用得到方法来获取simout中每个元素所包含的时间和信号数据。

legend_labels =细胞(1、numSims);i = 1:numSims simOut = out(i);ts = simOut.logsout.get (“vertical_disp”) . values;ts.plot;legend_labels{我}= [“运行”num2str (i)];持有所有结束标题(3自由度悬架模型的响应)包含(“时间(s)”);ylabel (“车辆垂直位移(m)”);传奇(legend_labels“位置”“NorthEastOutside”);

关闭MATLAB工人

最后,如果之前没有打开并行池和模型,请关闭它们。

如果(~ isModelOpen) close_system (mdl 0);结束删除(gcp (“nocreate”));
使用“本地”配置文件的并行池正在关闭。
这个话题有用吗?