主要内容

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

此示例演示如何使用并行计算工具箱并行运行蒙特卡罗研究的多个模拟™. 并行执行利用主机的多个核心更快地运行许多模拟。这些模拟也可以使用MATLAB并行服务器在计算机集群上并行运行™. 即使并行计算工具箱™ 或者MATLAB并行服务器™ 不可用,但模拟将以串行方式运行。

探索示例模型

模型sldemo_suspn_3dof.基于道路与悬架的相互作用,模拟车辆动态。该模型在三次自由中捕获了车辆动态:垂直位移,卷和间距。信号编辑器块存储左右轮胎的测量道路轮廓数据作为不同的测试组。道路悬架相互作用子系统基于道路数据和当前车辆状态计算四个轮胎位置的车辆上的悬架力。身体动力子系统使用这些力和所得到的间距和滚动力矩来计算三个自由度中的每一个中的车辆运动。

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

mdl ='sldemo_suspn_3dof'isModelOpen=bdIsLoaded(mdl);open_系统(mdl);

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

对于身体动态块,找到退出的信号垂直分布输出端口。该信号表示悬架阻尼系数影响的车辆随时间的垂直位移。

右键单击信号并选择特性

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

准备参数输入

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

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

确定要运行的模拟数量,该数量等于扫描值的数量。将该数量存储在变量中,努姆斯

numsims =长度(cf_sweep);

使用为了循环到:

  1. 创造万博1manbetx模拟输入模型的对象。每个模拟创建一个对象。将对象存储为变量中的数组,在里面

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

为了i = numsims:-1:1在(i)= sim万博1manbetxulink.simulationInput(MDL)中;在(i)= setBlockParameter((i)中,[mdl'/道路悬架互动'],'cf',num2str(cf_sweep(i)));终止

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

使用Parsim并行运行模拟

使用Parsim函数并行执行模拟。仿真对象的数组,在里面,在最后一步中创建的将传递到Parsim用作第一个参数。来自的产出Parsim命令是一个数组万博1manbetxsimulink.simulationOutput.存储在变量中的对象出来。将“ShowProgress”选项设置为“on”,以在MATLAB命令窗口上打印模拟进度。

出局= Parsim(在,'showprogress''在');
[20-FEB-2021 23:49:38]检查并行池的可用性...使用“本地”配置文件启动并行池(Parpool)...连接到并行池(工人数:6)。[20-Feb-2021 23:50:23]在并行工人上启动Si万博1manbetxmulink ... [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月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]完成了6个仿真运行中的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对象包含Logged信号以及Simulation MetaData。运行多个模拟时Parsim,捕获错误,以便随后的模拟可以继续运行。任何错误都会显示出来错误信息SimulationOutput对象的属性。

绘图结果

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

letcend_labels = cell(1,numsims);为了i=numSims:-1:1 simOut=out(i);ts=simOut.logsout.get('垂直_disp').Values;%“ts”是一个MATLAB“timeseries”对象,用于存储时间和记录的“垂直_disp”信号的%数据值。%使用对象的“绘图”方法,根据%时间。绘图(ts);图例_标签{i}=['跑 'num2str(i)];等待全部的终止头衔('3-DOF暂停模型的响应')xlabel(‘时间’);ylabel('车辆垂直位移(m)');图例(图例和标签,“位置”“东北外”);

关闭Matlab Workers.

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

如果(~isModelOpen)闭_系统(mdl,0);终止删除(gcp)(“不创造”));
正在关闭使用“本地”配置文件的并行池。

也可以看看

||

相关话题