本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

运行多个仿真

对于涉及多个并行仿真和记录大量数据的工作流,您可以使用 Simulink.SimulationInput 对象数组创建仿真集。这在模型测试、试验设计、蒙特卡罗分析和模型优化等场景中非常有用。

使用 Simulink.SimulationInput 对象数组可简化多次仿真的运行及其并行运行。如果您拥有 Parallel Computing Toolbox™,可以使用 parsimbatchsim 命令并行运行仿真。

parsim 命令将每个仿真分发到多个工作进程以减少整体仿真时间。parsim 命令自动创建并行池,确定文件依存关系并管理用于进行 Accelerator 和 Rapid Accelerator 仿真的工件。

batchsim 命令将仿真工作负载分散到计算群集。各个仿真的执行在群集上进行,使您能够在批处理作业运行时执行其他任务,或关闭客户端 MATLAB® 并稍后访问批处理作业。

在没有 Parallel Computing Toolbox 许可证的情况下,parsim 的行为类似于 sim 命令。然后仿真以串行方式运行。

batchsim 命令使用 Parallel Computing Toolbox™ 许可证运行仿真计算群集。如果不能创建并行池,则 batchsim 以串行方式运行各仿真。如果未使用 Parallel Computing Toolbox 许可证,则 batchsim 会引发错误。

您可以使用 Simulink.SimulationInput 对象对模型进行更改,并用这些更改并行运行仿真。更改 Simulink.SimulationInput 对象会覆盖模型中的值。仿真使用 Simulink.SimulationInput 对象中的值,而不是模型中定义的值。这样,您不用编辑模型就可以更改它。Simulink.SimulationInput 对象允许您更改模型中的下列设置:

  • 初始状态

  • 外部输入

  • 模型参数

  • 模块参数

  • 变量

通过 Simulink.SimulationInput 对象,您还可以分别使用 PreSimFcnPostSimFcn 指定在每个仿真的开始和结束时运行的 MATLAB 函数。

当您使用 Simulink.SimulationInput 对象时,仿真结束后将还原模型参数。请参阅Run Parallel Simulations Using parsim

注意

当池尚未打开并且首次运行仿真时,仿真需要更多时间才能开始。随后的并行仿真会更快。

其他优点

  • 将错误输出到仿真输出对象中,以便于调试

  • 兼容 Rapid Accelerator,可快速重启

  • 兼容文件记录(适用于大数据)

  • 除了本地并行池,还兼容 MATLAB Parallel Server™

  • 能够将基础工作区变量传输给工作进程

  • 避免透明度错误

Simulation Manager

Simulation Manager 允许您监视多个并行仿真。它显示仿真在并行运行时的运行进度。您可以查看每次运行的详细信息,如参数、已用时间和诊断。Simulation Manager 是一个有用的工具,您可选择用它分析和比较 Simulation Data Inspector 中的结果。您还可以选择一项运行并将其值应用于模型。有关详细信息,请参阅Simulation Manager

多个仿真的数据记录

产生的包含仿真输出的 Simulink.SimulationOutput 对象捕获错误消息和仿真元数据。当您选择 Data Import/Export > Log Dataset data to file 配置参数时,Simulink® 为在生成的 MAT 文件中存储的每个 Dataset 创建一个 Simulink.SimulationData.DatasetRef 对象。您可以使用 DatasetRef 对象访问 Dataset 元素的数据。对于使用 Simulink.SimulationInput 对象运行的仿真,DatasetRef 对象作为 SimulationOutput 对象的一部分返回。因此,您可以更快地访问它们,而且无需您来创建它们。

MATLAB 内存可能无法容纳并行仿真产生的记录数据。对于并行仿真,请考虑记录到持久存储以减少内存需求。对于 Simulink 中的并行仿真,当您选择 Data Import/Export > Log Dataset data to file 配置参数 (LoggingToFile) 时,会执行下列操作:

  • 数据以 Dataset 格式记录在 MAT 文件中

  • 为每个仿真的每个 Dataset 元素(例如 logsout)创建一个 Simulink.SimulationData.DatasetRef 对象

您可以使用 DatasetRef 对象访问特定信号的数据。您可以创建 matlab.io.datasetore.SimulationDatastore 对象,以用于将持久存储中的记录数据流式传输到模型中。

另请参阅

| | | | | | | | | |

相关主题