主要内容

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

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

探索模型示例

该模型sldemo_suspn_3dof基于不同路面轮廓的道路和悬架之间的相互作用模拟车辆动力学。该模型捕获三个自由度的车辆动力学:垂直位移、侧倾和俯仰。信号编辑器块将左右轮胎的测量路面轮廓数据存储为不同的测试组。道路悬架在交互作用子系统根据道路数据和当前车辆状态计算四个轮胎位置处车辆上的悬挂力。车身动力学子系统使用这些力以及由此产生的俯仰和侧倾力矩来计算车辆在三个自由度中的运动。

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

mdl=“sldemo\u susn\u 3dof”;isModelOpen = bdIsLoaded (mdl);open_system (mdl);

在模型中,双击道路悬挂交互块。将打开“遮罩”对话框。遮罩参数前悬架减振设置阻尼系数的值,150

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

右键单击信号并选择性质

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

准备参数输入

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

Cf_扫描=Cf*(0.05:0.1:0.95);

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

numSims=长度(Cf_扫描);

使用一个对于循环:

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

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

对于i=numSims:-1:1英寸(i)=模拟链路模金宝app拟输入(mdl);in(i)=参数(in(i),[mdl“/道路悬架相互作用”],‘Cf’,num2str(Cf_-sweep(i));结束

请注意,在SimulationInput对象上指定块参数不会立即将其应用于模型。指定的值将在模拟过程中应用,并在模拟完成后恢复为其原始值(如果可能)。

使用Parsim并行运行模拟

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

out=parsim(in,“展示进步”,“开”);
[20-Feb-2021 23:49:38]检查并行池的可用性…使用连接到并行池的“本地”配置文件启动并行池(parpool)(工作线程数:6)。[20-Feb-2021 23:50:23]在并行工作线程上启动Simulink…[20-Feb-2021 23:51:11]在并行工作线程上配置模拟缓存文件夹。。。[20-Feb-2021 23:51:13]平行作业工人加载模型…[20-Feb-2021 23:51:18]运行模拟…[20金宝app-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次[20-Feb-2021 23:51:34]清理平行工人。。。

每个SimulationOutput对象包含记录的信号以及SimulationMetadata帕西姆,将捕获错误,以便后续模拟可以继续运行。任何错误都将显示在ErrorMessageSimulationOutput对象的属性。

绘图结果

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

图例_标签=单元格(1,numSims);对于i = numSims:-1:1 simOut = out(i);ts = simOut.logsout.get (“垂直显示”).价值观;% 'ts'是一个MATLAB 'timeseries'对象,它存储时间和%记录的“垂直显示”信号的数据值。使用对象的“plot”方法来绘制数据%的时间。情节(ts);legend_labels{我}= [“跑”num2str (i)];持有所有结束标题(“三自由度悬架模型的响应”)包含(“时间(s)”);伊莱贝尔(‘车辆垂直位移(m)’);传奇(legend_labels“位置”,“NorthEastOutside”);

密切合作

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

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

另见

||

相关的话题