主要内容

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

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

探索示例模型

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

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

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

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

模型的快速加速器可执行文件是使用buildRapidAcceleratorTarget功能来自金宝appSimulink.方块图包裹,包裹buildRapidAcceleratorTarget函数返回分配给全局变量的默认运行时参数集,RTP,在SetupFcn中,并在下一步中用于修改参数值。开放sldemo\u parsim\u paramsweep\u suspn\u raccel\u设置编辑器中检查代码。请注意,构建过程是经过优化的,因此如果构建文件已经存在并与模型和机器体系结构兼容,那么它就会提前返回。

使用SimulationInput对象设置多个模拟

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

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

确定要运行的模拟数量,该数量等于扫描值的数量。将该数量存储在变量中,努姆斯

numSims=长度(Mb_扫描);

使用对于循环到:

  1. 创造金宝app模拟输入对象。为每个模拟创建一个对象。将对象作为数组存储在变量中,在里面

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

对于i=numSims:-1:1 in(i)=Simu金宝applink.SimulationInput(mdl);in(i)=in(i).setModelParameter(“SimulationMode”“快速”...“RapidAcceleratorUpdateCheck”“关”);in(i).PreSimFcn=@(x)sldemo_parsim_paramseep_suspen_raccel_presim(x,Mb_sweep(i));结束

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

使用Parsim并行运行模拟

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

= parsim (,“ShowProgress”“开”...“设置FCN”@ () 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中每个元素所包含的时间和信号数据。

图例_标签=单元格(1,numSims);对于i = 1:numSims simOut = out(i);ts = simOut.logsout.get (“vertical_disp”).价值观;t.plot;图例_标签{i}=[“跑”num2str(i)];持有全部的结束头衔(“三自由度悬架模型的响应”)xlabel(‘时间’);ylabel (“车辆垂直位移(m)”);图例(图例和标签,“位置”“东北外”);

关闭MATLAB工人

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

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