主要内容

使用Parsim的并行模拟:测试用例扫描

这个例子展示了如何在Signal Editor块中使用SimulationInput对象金宝app和parsim命令。parsim命令使用并行计算工具箱™(如果可用)并行运行模拟,否则模拟以串行运行。

模型概述

该模型sldemo_suspn_3dof下图模拟了不同道路轮廓下基于道路-悬架相互作用的车辆动力学。车辆动力学在三个自由度:垂直位移,滚转和俯仰。左右轮胎的道路轮廓数据作为不同的测试用例导入到Signal Editor块中。道路-悬架相互作用子系统根据道路数据和车辆当前状态计算车辆在四个轮胎位置上的悬架力。在身体动力学子系统中,这些力以及由此产生的俯仰和横摇力矩用于确定车辆在三个自由度中的运动:垂直位移、横摇和俯仰。

使用不同的道路轮廓来模拟悬架模型,以确定设计是否满足预期的性能目标。并行计算工具箱用于加速这些多重模拟,如下所示。

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

设置多个模拟所需的数据

使用Signal Editor块的numberofscenario参数确定Signal Editor块中的案例数。用例数量用于确定步骤3中要运行的迭代次数。

sigEditBlk = [mdl“/路配置文件”];numCases = str2double (get_param (sigEditBlk“NumberOfScenarios”));

创建一个数组金宝app仿真软件。SimulationInput对象定义要运行的模拟集。每个SimulationInput对象对应于一个仿真,并将作为数组存储在变量中,.面具参数,ActiveScenario,指定Signal Editor块场景的扫描值。为每个模拟设置活动场景。

idx = numCases:-1:1 in(idx) = 金宝appSimulink.SimulationInput(mdl);in(idx) = setBlockParameter(in(idx), sigeditblock,“ActiveScenario”, idx);结束

注意,在SimulationInput对象上指定模型参数并不会立即将其应用到模型中。在仿真过程中应用指定的值,如果可能,在仿真完成后恢复到初始值。

使用Parsim并行运行模拟

使用parsim函数并行地执行模拟。SimulationInput对象数组,,在最后一步中创建的parsim函数作为第一个参数。的输出parsim的数组金宝app仿真软件。SimulationOutput对象存储在变量中.将“ShowProgress”选项设置为“on”,在MATLAB命令窗口上打印模拟的进度。

= parsim (,“ShowProgress”“上”);
[21-Feb-2021 01:43:41]检查并行池的可用性…使用“local”配置文件启动并行池(parpool)…[21- 2 -2021 01:44:30] Starting Simulink on parallel workers…金宝app[21-Feb-2021 01:45:05]在并行工作器上配置模拟缓存文件夹…[21-Feb-2021 01:45:07]加载模型并行工人…[21-Feb-2021 01:45:13]运行模拟…[21-Feb-2021 01:45:26] 20次仿真运行中完成1次[21-Feb-2021 01:45:26] 20次仿真运行中完成2次[21-Feb-2021 01:45:26] 20次仿真运行中完成3次[21-Feb-2021 01:45:26] 20次仿真运行中完成4次[21-Feb-2021 01:45:26] 20次仿真运行中完成5次[21-Feb-2021 01:45:26] 20次仿真运行中完成6次[21-Feb-2021 01:45:29] 20次仿真运行中完成7次[21-Feb-2021 01:45:29] 20次仿真运行中完成8次[21-Feb-2021 01:45:29] 20次仿真运行中完成9次[21-Feb-2021 01:45:29] 20次仿真运行中完成10次[21-Feb-2021 01:45:29] 20次仿真运行中完成11次[21-Feb-2021 01:45:29] 20次仿真运行中完成12次[21-Feb-2021 01:45:31] 20次仿真运行中完成13次[21-Feb-2021 01:45:31] 20次仿真运行中完成14次[21-Feb-2021 01:45:31] 20次仿真运行中完成15次[21-Feb-2021 01:45:31] 20次仿真运行中完成16次[21-Feb-2021 01:45:31] 20次仿真运行中完成17次[21-Feb-2021 01:45:31] 20次仿真运行中完成18次[21-Feb-2021 01:45:34] Completed 19 of 20 simulation runs [21-Feb-2021 01:45:34]

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

阴谋的结果

绘制不同模拟的垂直车辆位移图,以查看车辆在不同道路剖面上的表现。信号以数据集格式记录在SimulationOutput对象中。使用得到方法获取timeseries对象,该对象包含来自的每个元素的时间和信号数据

legend_labels =细胞(1、numCases);i = 1:numCases 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”));

另请参阅

||

相关的话题