主要内容

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

此示例显示如何通过使用并行计算工具箱™并行运行Monte Carlo研究的多个模拟。并行执行利用主机的多个核心更快地运行许多模拟。这些模拟也可以使用MATLABPLASSERD Server™在计算机集群上并行运行。此示例即使是不可用的并行计算工具箱™或MATLABPRILLENT Server™,但模拟将在串行运行。

探索示例模型

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

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

mdl ='sldemo_suspn_3dof';ISModeLopen = BDISloaded(MDL);Open_System(MDL);

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

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

右键单击信号并选择特性

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

准备参数输入

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

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

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

numsims =长度(cf_sweep);

用一个为了循环到:

  1. 创建金宝appsimulink.simulationInpul.模型的对象。每个模拟创建一个对象。将对象存储为变量中的数组,

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

为了i = numsims:-1:1在(i)= sim金宝appulink.simulationInput(MDL)中;在(i)= setBlockParameter((i)中,[mdl'/道路悬架互动'],'cf',num2str(cf_sweep(i)));结尾

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

使用Parsim并行运行模拟

使用Parsim函数并行执行模拟。仿真对象的数组,,在最后一步中创建的被传递到Parsim用作第一个参数。来自的产出Parsim命令是一系列金宝appsimulink.simulationOutput.存储在变量中的对象出去。将“showprogress”选项设置为“开”以在MATLAB命令窗口上打印模拟的进度。

出局= Parsim(在,'showprogress''在');
[13-Dec-2018 12:01:49]检查并行池的可用性...使用“本地”配置文件连接到并行池(工人数量:6)来启动并行池(Parpool)。[13-Dec-2018 12:04:34]在并行工人上启动Si金宝appmulink ... [13-Dec-2018 12:04:35]配置并行工人的模拟缓存文件夹... [2018年12月13日12:04:36]加载平行工人的模型...... [13-dec-2018 12:05:00]运行模拟... [13-dec-2018 12:06:24]完成了10个模拟运行中的1个[13-2018年12月12:06:24]完成了10个模拟运行中的2种[2018年12:06:24]完成了10个仿真运行中的3个[13-dec-2018 12:06:38]的10个模拟运行[13-dec-2018 12:06:39]完成了10个模拟运行中的5个[13-dec-2018 12:06:40]完成了6个仿真运行中的6个[13-dec-2018 12:07:18]完成7个仿真运行中的7个(2018年12:07:19)完成了10个仿真运行中的8种[2018年12:07:19]中完成了10个模拟运行中的9种[2018年12:07:30]在10个模拟运行中完成了10个[13-dec-2018 12:07:30]清理平行工人......

每个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'timeersies'对象,用于存储时间和时间记录的“垂直_disp”信号的%数据值。%使用对象的“plot”方法绘制数据的数据% 时间。绘图(TS);Legend_Labels {i} = ['跑 'num2str(i)];抓住全部结尾标题('3-DOF暂停模型的响应')Xlabel('时间'');ylabel('车辆垂直位移(m)');传奇(Legend_Labels,'地点'“东北朝”);

关闭Matlab Workers.

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

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