主要内容

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

此示例显示如何通过使用并行计算工具箱™并行运行Monte Carlo研究的多个模拟。并行执行利用主机的多个核心更快地运行许多模拟。这些模拟也可以使用MATLABPLASSERD Server™在计算机集群上并行运行。此示例即使是不可用的并行计算工具箱™或MATLABPRILLENT Server™,但模拟将在串行运行。

探索示例模型

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

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

mdl =“sldemo_suspn_3dof”;ISModeLopen = BDISloaded(MDL);Open_System(MDL);

设置以构建快速加速器目标

使用该模型可执行的快速加速器可在Setupfcn呼叫中构建BuildRapidaccelEratorTarget.从中的功能金宝appsimulink.blockdiagram包裹。这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. 创建金宝appsimulink.simulationInpul.对象。为每个模拟创建一个对象。将对象作为数组存储在变量中,

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

为了i = numsims:-1:1在(i)= sim金宝appulink.simulationInput(MDL)中;在(i)= In(i).setmodelparameter(“SimulationMode”'迅速的'...'Rapidacceleratoruptodatecheck''离开');在(i).presimfcn = @(x)sldemo_parsim_paramsweep_suspn_raccel_preesim(x,mb_sweep(i));结尾

SimulationInput对象用于修改模型参数。“SimulationMode”被设置为使用快速加速器,“RapidAcceleratorUpToDateCheck”模型参数被设置为“off”,以跳过最新的检查,因为在模拟和相同的构建文件之间没有对模型做出结构更改,可以使用。注意,在SimulationInput对象上指定模型参数并不会立即将其应用到模型中。在仿真过程中应用指定的值,如果可能,在仿真完成后恢复到初始值。检查PreSimFcn中的代码,SLDEMO_PARSIM_PARAMSWEEP_SUSPN_RACCEL_PRESIM..它用modifytunableParameters.从仿真软件。金宝app方块图包更改的参数对应的车辆质量。PreSimFcn的第一个参数总是SimulationInput对象,并通过Simulink®传递到函数中。金宝appPreSimFunction将另一个模型参数添加到SimulationInput对象中,并返回用于仿真的参数。

使用Parsim并行运行模拟

使用parsim函数并行地执行模拟。SimulationInput对象数组,,在最后一步中创建的被传递到parsim函数作为第一个参数。的输出parsim命令是一系列金宝app仿真软件。SimulationOutput存储在变量中的对象出去.将“showprogress”选项设置为“开”以在MATLAB命令窗口上打印模拟的进度。如前所述,setupfcn作为参数传递给Parsim命令,如果需要,将在工人上构建快速加速器目标。

= parsim (,“ShowProgress”'在'...'setupfcn'@ () sldemo_parsim_paramsweep_suspn_raccel_setup (mdl));
[13- 12 -2018 12:26:56]检查并行池的可用性…使用“local”配置文件启动并行池(parpool)…[13-Dec-2018 12:28:03] Starting Simulink on parallel workers…金宝app分析和传送文件给工人…完成。[13- 12 -2018 12:28:03]配置并行工作器上的模拟缓存文件夹…[13- 12 -2018 12:28:04] Running SetupFcn on parallel workers…[13- 12 -2018 12:29:02] Loading model on parallel workers…[13- 12 -2018 12:29:06]运行模拟…[13- 12 -2018 12:29:15] 10次仿真运行中完成1次[13- 12 -2018 12:29:14]10次仿真运行中完成2次[13- 12 -2018 12:29:14]10次仿真运行中完成3次[13- 12 -2018 12:29:14]10次仿真运行中完成4次[13- 12 -2018 12:29:15]10次仿真运行中完成5次[13- 12 -2018 12:29:15]10次仿真运行中完成6次[13- 12 -2018 12:29:17] Completed 7 of 10 simulation runs [13- 12 -2018 12:29:17] Completed 8 of 10 simulation runs [13- 12 -2018 12:29:17] Completed 9 of 10 simulation runs

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

阴谋的结果

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

letcend_labels = cell(1,numsims);为了i = 1:numSims simOut = out(i);ts = simOut.logsout.get (“vertical_disp”).Values;ts.plot;Legend_Labels {i} = ['跑步 'num2str(i)];抓住全部结尾标题('3-DOF暂停模型的响应')xlabel('时间'');ylabel (“车辆垂直位移(m)”);传奇(Legend_Labels,'地点'“东北朝”);

关闭MATLAB工人

最后,关闭并行池和模型,如果他们之前未打开。

如果(〜是iSmodevenen)Close_System(MDL,0);结尾删除(GCP('noicreate'));
使用“本地”配置文件的并行池正在关闭。