主要内容

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

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

探索模型示例

该模型sldemo_suspn_3dof模拟车辆动力学基于道路之间的交互和概要文件悬挂不同的道路。捕捉三自由度车辆动力学模型:垂直位移,滚,音高。信号编辑存储测量公路剖面数据块左右轮胎的不同的测试组。Road-Suspension交互子系统计算悬浮力的四个轮胎的车辆位置基于道路数据和当前车辆的状态。人体动力学子系统使用这些力量和滚转力矩产生的音高和计算车辆在每个三个自由度的运动。

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

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

在模型中,双击Road-Suspension交互块。面具对话框打开。面具参数susp前面。阻尼设置阻尼系数的值,150年

人体动态块,找到出口的信号垂直disp输出港港口。这个信号代表了车辆垂直位移随着时间的推移,该悬架阻尼系数的影响。

右键单击并选择信号属性

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

准备参数输入

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

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

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

numSims =长度(Cf_sweep);

使用一个循环:

  1. 创建金宝appSimulink.SimulationInput对象模型。创建一个对象/模拟。将对象作为一个数组存储在一个变量,

  2. 指定扫描为每个模拟值。识别目标面具由其基本参数名称,Cf

我= numSims: 1:1 (i) = Sim金宝appulink.SimulationInput (mdl);在(我)= setBlockParameter((我),(mdl/ Road-Suspension交互的),Cf的num2str (Cf_sweep(我)));结束

注意,指定块SimulationInput对象参数不立即应用到模型。指定的值将被应用在模拟和恢复回原来的值,如果可能的话,在仿真完成之后。

使用Parsim并行运行模拟

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

= parsim (,“ShowProgress”,“上”);
(20 - 2021年2月——23:49:38)检查可用性平行池……开始平行池(parpool)使用“本地”概要文件…连接到平行池(工人数量:6)。(20 - 2021年2月——23:50:23)开始仿真软件并行工人……金宝app(20 - 2021年2月——23:51:11)配置模拟缓存文件夹在平行的工人……(20 - 2021年2月——23:51:13)加载模型并行的工作……(20 - 2021年2月——23:51:18)运行模拟……(20 - 2021年2月——23:51:31)完成1的10模拟运行[20 - 2021年2月——23:51:31]完成2 10模拟运行(20 - 2021年2月——23:51:31)完成10 3模拟运行(20 - 2021年2月——23:51:31)完成4 10模拟运行(20 - 2021年2月——23:51:31)完成5 10模拟运行(20 - 2021年2月——23:51:31)完成6 10模拟运行(20 - 2021年2月——23:51:33)完成7 10个模拟运行(20 - 2021年2月——23:51:33)完成8 10模拟运行(20 - 2021年2月——23:51:33)完成9 10模拟运行(20 - 2021年2月——23:51:34)完成10的模拟运行(20 - 2021年2月——23:51:34)清理平行工人……

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

阴谋的结果

情节从不同的模拟车辆垂直位移改变阻尼系数如何影响车辆动力学。的信号是登录SimulationOutput对象数据集格式。使用得到方法获取timeseries对象包含时间和信号数据的每个元素

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

关闭MATLAB工人

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

如果(~ isModelOpen) close_system (mdl 0);结束删除(gcp (“nocreate”));
平行池使用当地的概要文件被关闭。

另请参阅

||

相关的话题