主要内容

并行模拟使用Parsim:参数扫描在正常模式

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

探索模型示例

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

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

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

在模型中,双击道路-悬挂交互模块。掩码对话框打开。面具参数susp前面。阻尼设置阻尼系数的值,150

对于Body Dynamics块,找到退出的信号垂直disp输出港港口。这个信号代表了受悬架阻尼系数影响的车辆随时间的垂直位移。

右键单击信号并选择属性

在“信号属性”对话框中,日志记录和可访问性选项卡已测井信号数据选中,表明该信号已配置用于日志记录。模拟完成后,您可以使用指定的日志名称,vertical_disp,以识别信号并从SimulationOutput对象获取仿真输出数据。

准备参数输入

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

Cf_sweep = Cf * (0.05:0.1:0.95);

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

numSims =长度(Cf_sweep);

使用一个循环:

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

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

i = numSims:-1:1 in(i) = 金宝appSimulink.SimulationInput(mdl);in(i) = setBlockParameter(in(i), [mdl . txt]/ Road-Suspension交互的],Cf的num2str (Cf_sweep(我)));结束

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

使用Parsim并行运行模拟

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

= parsim (,“ShowProgress”“上”);
[20-Feb-2021 23:49:38]检查并行池的可用性…使用“local”配置文件启动并行池(parpool)…[20-Feb-2021 23:50:23] Starting Simulink on parallel workers…金宝app[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-Feb-2021 23:51:31] 10次仿真运行中完成2次[20-Feb-2021 23:51:31] 10次仿真运行中完成3次[20-Feb-2021 23:51:31] 10次仿真运行中完成4次[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次仿真运行中

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

阴谋的结果

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

legend_labels =细胞(1、numSims);i = numSims:-1:1 simOut = out(i);ts = simOut.logsout.get (“vertical_disp”) . values;% 'ts'是一个MATLAB 'timeseries'对象,它存储时间和%记录的'vertical_disp'信号的数据值。使用对象的“plot”方法来绘制数据%的时间。情节(ts);legend_labels{我}= [“运行”num2str (i)];持有所有结束标题(3自由度悬架模型的响应)包含(“时间(s)”);ylabel (“车辆垂直位移(m)”);传奇(legend_labels“位置”“NorthEastOutside”);

关闭MATLAB工人

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

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

另请参阅

||

相关的话题