主要内容

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

此示例展示了如何使用并行计算工具箱™并行运行蒙特卡罗研究的多个模拟。并行执行利用主机的多个核心来更快地运行许多模拟。这些模拟也可以使用MATLAB并行服务器™在计算机集群上并行运行。即使并行计算工具箱™或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 = length(Cf_sweep);

使用一个循环:

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

  2. 为每个模拟指定扫描值。通过目标掩码参数的基础名称标识目标掩码参数,Cf

(i) = Simulink.Simulation金宝appInput(mdl);in(i) = setBlockParameter(in(i), [mdl ./ Road-Suspension交互的],Cf的num2str (Cf_sweep(我)));结束

注意,在SimulationInput对象上指定块参数并不会立即应用到模型。指定的值将在模拟期间应用,并在模拟结束后(如果可能的话)恢复到其原始值。

使用Parsim并行运行模拟

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

Out = parsim(in,“ShowProgress”“上”);
[20-Feb-2021 23:49:38]检查并行池的可用性…使用“本地”配置文件启动并行池(parpool)…[20-Feb-2021 23:50:23]在并行工作上启动Simulink…金宝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次模拟运行中的3次[20-Feb-2021 23:51:31]完成10次模拟运行中的5次[20-Feb-2021 23:51:31]完成10次模拟运行中的6次[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对象。

阴谋的结果

从不同的模拟中绘制垂直车辆位移图,以了解不同的阻尼系数如何影响车辆动力学。信号以Dataset格式记录在SimulationOutput对象中。使用得到的每个元素中包含时间和信号数据的时间序列对象

legend_labels = cell(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 {i} = [“运行”num2str (i)];持有所有结束标题(“三自由度悬架模型的响应”)包含(“时间(s)”);ylabel (车辆垂直位移(m));传奇(legend_labels“位置”“NorthEastOutside”);

关闭MATLAB Workers

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

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

另请参阅

||

相关的话题