主要内容

使用Parsim的平行模拟:在正常模式下参数扫描

此示例显示了如何使用并行计算工具箱™在并行进行蒙特卡洛研究的多个模拟。并行执行利用主机机器的多个内核更快地运行许多模拟。这些仿真也可以使用MATLAB Parallel Server™在计算机簇上并行运行。即使并行计算Toolbox™或MATLAB Parallel Server™,该示例也将起作用,但是模拟将以串行运行。

探索示例模型

该模型sldemo_suspn_3dof基于道路和悬架之间的不同道路剖面的相互作用,模拟车辆动力学。该模型以三个自由度捕获车辆动力学:垂直位移,滚动和音高。信号编辑器块存储了左右轮胎作为不同测试组的道路剖面数据。道路悬浮互动子系统根据道路数据和当前车辆状态在四个轮胎位置计算车辆上的悬架力。身体动力学子系统使用这些力以及最终的螺距和滚动矩来计算三个自由度中的每个度中的车辆运动。

在这项蒙特卡洛研究中,您可以检查前悬架系数对车辆动力学的影响。您运行多个模拟,每个模拟都具有不同的系数值。

mdl ='sldemo_suspn_3dof';ismodelopen = bdisloaded(mdl);Open_System(MDL);

在模型中,双击道路悬架相互作用块。打开“蒙版”对话框。蒙版参数前索。减震设置阻尼系数的值,150

对于身体动力块,找到退出的信号垂直分配外口港口。该信号代表了随时间的垂直车辆位移,悬浮阻尼系数的影响。

右键单击信号并选择特性

在“信号属性”对话框中,记录和可访问性标签有日志信号数据签入,表明该信号已配置用于记录。模拟完成后,您可以使用指定的记录名称,垂直_disp,识别信号并从仿真图对象获取仿真输出数据。

准备参数输入

计算系数的扫描值为设计值的百分比,范围从5%到95%,增量为10%。将值存储在变量中,cf_weep,在基本工作区。

cf_weep = cf*(0.05:0.1:0.95);

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

numsims =长度(cf_weep);

用一个为了循环到:

  1. 创造金宝appSimulink.SimulationInput模型的对象。每个仿真创建一个对象。将对象作为数组存储在变量中,

  2. 为每个模拟指定扫描值。通过其基本名称识别目标掩码参数,CF

为了i = numsims:-1:1 in(i)= s金宝appimulink.simulationInput(mdl);在(i)= setBlockParameter(在(i)中,[mdl“/道路悬浮互动”],,'cf',num2str(cf_weep(i)));结尾

请注意,在仿真input对象上指定块参数不会立即将其应用于模型。指定的值将在模拟期间应用,并在模拟完成后恢复其原始值。

并行运行模拟

使用Parsim函数以并行执行模拟。模拟对象的数组,,最后一步中创建的Parsim功能是第一个参数。来自Parsim命令是一个数组金宝appsimulink.simulationOutput存储在变量中的对象出去。将“ ShowProgress”选项设置为“ ON”,以在MATLAB命令窗口上打印模拟的进度。

out = parsim(在“表演”,,,,'在');
[20-FEB-2021 23:49:38]检查并行池的可用性...使用“本地”配置文件开始并行池(PARPOOL)...连接到并行池(工人数量:6)。[20-FEB-2021 23:50:23]在平行工人上启动Si金宝appmulink ... [20-FEB-2021 23:51:11]在并行工人上配置模拟缓存文件夹... [20-FEB-2021 23:51:13]在平行工人上加载模型... [20-FEB-2021 23:51:18]运行模拟... [20-FEB-2021 23:51:31]完成了10个模拟运行中的1个[20-2月23日23:51:31]完成10次模拟运行中的2次[20-FEB-2021 23:51:31]完成了10次模拟运行中的3台[20-FEB-2021 23:51:31]完成了10个模拟跑步[20-FEB-2021 23:51:31]完成了10次模拟运行中的5次[20-FEB-2021 23:51:31]完成了10次模拟运行中的6个[20-FEB-2021 23:51:33]10次​​模拟运行中的7台[20-FEB-2021 23:51:33]完成了10次模拟运行中的8台[20-FEB-2021 23:51:33]完成了10次模拟运行中的9台[20-FEB-2021 23:51:34]完成10个模拟运行中的10台[20-FEB-2021 23:51:34]清理平行工人...

每个仿真图对象都包含已记录的信号以及仿真的信号。在运行多个模拟时使用Parsim,捕获错误,以便随后的模拟可以继续运行。任何错误都会在错误信息模拟图对象的属性。

情节结果

绘制垂直车辆从不同模拟中的位移,以查看阻尼系数的变化如何影响车辆动力学。该信号以数据集格式的仿真图对象记录。使用得到从每个元素中获取包含时间和信号数据的时间表对象的方法出去

legend_labels =单元格(1,numsims);为了i = numsims:-1:1 simout = out(i);ts = simout.logsout.get('Vertical_disp')。%'ts'是存储时间和已记录的“ vertical_disp”信号的数据值。%使用对象的“图”方法来绘制数据% 时间。情节(TS);legend_labels {i} = ['跑 'num2str(i)];抓住全部结尾标题(“ 3-DOF悬架模型的响应”)xlabel(“时间)”);ylabel(“车辆垂直位移(M)”);传奇(legend_labels,'地点',,,,“东北”);

关闭MATLAB工人

最后,如果以前没有打开,请关闭平行池和模型。

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

也可以看看

||

相关话题