Main Content

运行并行仿真

parsim 命令允许您对模型(设计)运行并行(同时)仿真。在这种情况下,并行运行意味着在不同工作进程中同时运行多个仿真。parsim 函数可让您在蒙特卡罗分析、参数扫描、模型测试、试验设计和模型优化等场景中,很方便地采用不同的输入或不同的参数设置运行同一模型。目前,不支持通过将模型分解为较小的组件并在多个工作进程中同时运行这些组件来并行运行整个仿真。

您可以使用多个仿真面板在 Simulink 编辑器中运行多个仿真。您可以从模型画布中选取一个感兴趣的模块参数,并指定要用于仿真的值。使用多个仿真面板,您可以提供类似使用并行的配置以并行方式运行您的仿真。要运行您设置的仿真,首先选择设计研究,然后在 Simulink® 工具条的仿真选项卡上,点击全部运行。在仿真完成后,您可以在仿真管理器中查看和管理结果。有关详细信息,请参阅Multiple Simulations Panel: Simulate for Different Values of Stiffness for a Vehicle Dynamics SystemConfigure and Run Simulations with Multiple Simulations Panel

要使用 parsim 函数并行运行仿真,您需要具有用于本地工作进程的 Parallel Computing Toolbox™。此外,针对多个计算机集群、云和网格等场景,您还可以使用 MATLAB® Parallel Server™。在没有 Parallel Computing Toolbox 和 MATLAB Parallel Server 的情况下,parsim 函数以串行方式运行仿真。有关详细信息,请参阅Parallel Computing ToolboxMATLAB Parallel Server

如果不存在并行池,parsim 函数将基于默认集群配置文件创建一个池。要使用非默认集群,请在调用 parsim 函数之前使用该集群的配置文件创建一个池。

此示例针对一组扫描参数并行运行多个仿真。

mdl = "sldemo_suspn_3dof";
openExample(...
    "simulink_features/MultipleSimulationsWorkflowTipsExample",...
    supportingFile=mdl)

Cfsweep  = 2500*(0.05:0.1:0.95);
numSims   = numel(Cfsweep);

simIn(1:numSims) = Simulink.SimulationInput(mdl);
for idx = 1:numSims
    simIn(idx) = setBlockParameter(simIn(idx),...
                         (mdl + "/Road-Suspension Interaction"),...
                          "Cf",num2str(Cfsweep(idx)));
end

simOut = parsim(simIn);

parsim 的工作原理

parsim 函数基于 Simulink.SimulationInput 对象使用不同的参数和值运行仿真。每个 SimulationInput 对象指定模型的一个仿真。可以创建一个由这些对象组成的数组,以用于多个仿真。有关详细信息,请参阅Running Multiple Simulations

您可以在 Simulink.SimulationInput 对象上使用这些函数和属性:

  • setVariables - 更改基础工作区、数据字典或模型工作区中的变量

  • setBlockParameter - 更改模块参数

  • setModelParameter - 更改模型参数

  • setPreSimFcn - 指定在每次仿真之前先运行 MATLAB 函数,以在集群上进行自定义和后处理结果

  • setPostSimFcn - 指定在每次仿真之后运行 MATLAB 函数,以在集群上进行自定义和后处理结果

  • InitialState - 更改初始状态

  • ExternalInput - 将数值数组、时间序列或数据集对象指定为模型的外部输入

以下流程图显示执行 parsim 函数时发生的一系列事件

使用 parsim 函数时,可以覆盖对模型库模块的更改。在新工作进程上建立模型时,模型直接从工作进程库中继承属性。使用 parsim 函数的 SetUpFcn 名称-值参量将模型库模块更改传递给工作进程。

另请参阅

对象

函数

工具

相关主题