人在仿真软件金宝app

金宝app仿真软件和基于模型的设计

并行模拟:你的选项来配置数据时使用parsim和batchsim

今天我很高兴欢迎客人的博客 里德斯宾塞 。里德有助于并行运行模拟金宝app仿真软件用户使用功能 parsim batchsim 。在这篇文章中,分享最佳实践管理模型所需的数据模型在并行模拟的背景下。金宝app
您可以下载这篇文章中使用的例子 在这里

这个问题

你有没有遇到这种情况你有模型,模拟成功当使用吗 sim卡 命令或播放按钮,但当模拟使用错误 parsim 并行计算工具箱 吗?这可能发生由于种种原因,我们首先我看到最常。
让我们先从这个简单的模型,它使用三个变量定义在MATLAB基础工作区: k , c , :
我可以成功地模拟该模型:
k = 5;c = 3;m = 2;
mdl =“simpleSuspension”;
在(1:2)= Si金宝appmulink.SimulationInput (mdl);
在(1)= (1).setVariable (“k”10);
在(2)= (2).setVariable (“k”,20);
= sim (,“ShowProgress”,“关闭”);
图;
情节((1).logsout.get (“x”). values);持有
情节((2).logsout.get (“x”). values);
现在,让我们尝试使用 parsim 模拟模型与不同的值 k :
mdl =“simpleSuspension”;
在(1:2)= Si金宝appmulink.SimulationInput (mdl);
在(1)= (1).setVariable (“k”10);
在(2)= (2).setVariable (“k”,20);
= parsim (,“ShowProgress”,“上”,“ShowSimulationManager”,“上”);
(20 - 11月- 2022 11:25:57)检查可用性平行池……开始平行池(parpool)使用过程的概要文件…连接到平行池(工人数量:2)。(20 - 11月- 2022 11:26:19)开始仿真软件并行工人……金宝app(20 - 11月- 2022 11:26:26)配置模拟缓存文件夹在平行的工人……(20 - 11月- 2022 11:26:27)加载模型并行的工作……(20 - 11月- 2022 11:26:32)运行模拟……
警告:一个或多个模拟完成与错误。更多的信息,检查SimulationOutput对象在这些指数:
(1 2)
(20 - 11月- 2022 11:26:34)清理平行工人……
警告:仿真误差是由于缺失变量“m”。“TransferBaseWorkspaceVariables”选项设置为“on”来解决这个问题。
正如您可以看到的,模拟误差。我们可以看看 仿真管理器 学习更多的错误。

发生了什么事?

让我们详细看一下发生了什么事。为此,我们可以看看进度显示 parsim 。我们首先看到的是 parsim 开始一个平行的池。
(08 - 11月- 2022 14:11:17)检查可用性平行池……
开始平行池(parpool)使用过程的概要文件…
连接到平行池(工人数量:2)。
开始一个平行池意味着MATLAB会话你与(交互 客户端 在接下来的图片)推出新MATLAB会话背景,(没有用户界面 工人 在接下来的图片)
一旦启动并运行并行工人,我们开始仿真软件在每个工作人员:金宝app
(08 - 11月- 2022 14:11:39)开始仿真软件并金宝app行工人……
为了避免员工之间的冲突,我们配置每个人都使用不同的缓存文件夹:
(08 - 11月- 2022 14:11:46)配置模拟缓存文件夹在平行的工人……
模型加载每个工人:
(08 - 11月- 2022 14:11:47)加载模型并行的工作……
最后,模拟的模型是:
(08 - 11月- 2022 14:11:52)运行模拟……
希望你看到我… 平行的工人需要配置! 在上面的例子中,“配置”是指在工作区底部加载变量。如果你是处理大型复杂模型时,你可能明白“配置”可以意味着很多东西。
我们将讨论在这篇文章中所提供的不同的选择 parsim batchsim 自动化的配置并行的工人

多个选项来配置并行的工人

在这个博客上发表的文章在并行模拟的话题:
如果你通过这些文章,你会发现的过程配置并行工人已经大大简化整个年。MATLAB R2022b, parsim 提供了许多选项来自动配置并行的工人。
这是一幅给的概述 parsim 而你可以选择自动配置。
在下一节中,我们将讨论以下选项来配置并行的工作:
  1. 数据字典和模型工作区
  2. 将客户的工作区
  3. 项目启动任务
  4. 模型的回调
  5. SetupFcn回调
  6. preSimFcn回调

数据字典和模型工作区

如果你所有的模型缺失数据,一个选择是将数据存储在一个 数据字典 或在 模型的工作空间 。这种方式 parsim 会自动提供相关文件并行的工人。
数据字典,所有您需要做的是使用 setVariable 指定的变量在每个不同的模拟:
清晰的
mdl =“simpleSuspensionWithSldd”;
在(1:2)= Si金宝appmulink.SimulationInput (mdl);
在(1)= (1).setVariable (“k”10);
在(2)= (2).setVariable (“k”,20);
= parsim (,“ShowProgress”,“关闭”);

将客户的工作区

如果由于某种原因,你不能或者不想用数据字典,可能是使用 TransferBaseWorkspaceVariables 选择 parsim batchsim 送一份客户的基础工作的工人。
清晰;
k = 5;c = 3;m = 2;
mdl =“simpleSuspension”;
在(1:2)= Si金宝appmulink.SimulationInput (mdl);
在(1)= (1).setVariable (“k”10);
在(2)= (2).setVariable (“k”,20);
= parsim (,“TransferBaseWorkspaceVariables”,“上”,“ShowProgress”,“上”);
(20 - 11月- 2022 11:26:53)检查可用性平行池……(20 - 11月- 2022 11:26:53)开始仿真软件并金宝app行工人……(20 - 11月- 2022 11:26:53)配置模拟缓存文件夹在平行的工人……(20 - 11月- 2022 11:26:53)转移基地工作空间变量在模型中使用并行的工作……(20 - 11月- 2022 11:26:53)加载模型并行的工作……(20 - 11月- 2022 11:26:54)运行模拟……(20 - 11月- 2022 11:26:55)完成1的2模拟运行[11月20 - - 2022 11:26:55]完成2 2模拟运行(20 - 11月- 2022 11:26:55)清理平行工人……
这种方法的优点和缺点是什么?
  • 正方观点:简单,一个额外的参数,我们整个客户群工作区自动复制到工人。
  • 反对:可能是低效的,如果客户端会话有许多大型变量在其基础工作空间所不需要的模拟。

项目启动任务

如果你的模型的一部分 MATLAB项目 在客户端和MATLAB项目是开放的, parsim 将转移和开放项目上的工人,将执行哪一个 项目启动任务
清晰的
openProject (“ParsimDataManagment.prj”);
mdl =“simpleSuspension”;
在(1:2)= Si金宝appmulink.SimulationInput (mdl);
在(1)= (1).setVariable (“k”10);
在(2)= (2).setVariable (“k”,20);
= parsim (,“ShowProgress”,“关闭”);
关闭(currentProject);

模型的回调

如果你不使用MATLAB项目,另一个选择是使用 回调函数 如模型 preLoadFcn。 对于我的示例模型,我可以定义 k , c 这种方式:
当模型将被加载到工人 preLoadFcn 回调将执行并定义变量所需的模型。
清晰;
mdl =“simpleSuspensionWithCallback”;
在(1:2)= Si金宝appmulink.SimulationInput (mdl);
在(1)= (1).setVariable (“k”10);
在(2)= (2).setVariable (“k”,20);
= parsim (,“ShowProgress”,“关闭”);

SetupFcn回调

如果以上都不是适合你, parsim 提供了一个 SetupFcn 回调,可用于工人上运行任何额外的自定义设置。的 setupFcn 回调将人均运行一次。作为一个简单的例子, SetupFcn 可以评估代码工人的基础工作。
mdl =“simpleSuspension”;
在(1:2)= Si金宝appmulink.SimulationInput (mdl);
在(1)= (1).setVariable (“k”10);
在(2)= (2).setVariable (“k”,20);
= parsim (,“SetupFcn”@ ()mySetupFunction ());
(20 - 11月- 2022 11:27:08)检查可用性平行池……(20 - 11月- 2022 11:27:08)开始仿真软件并金宝app行工人……工人们…做分析和传输文件。(20 - 11月- 2022 11:27:10)配置模拟缓存文件夹在平行的工人……(20 - 11月- 2022 11:27:10)在并行运行SetupFcn工人……(20 - 11月- 2022 11:27:12)加载模型并行的工作……(20 - 11月- 2022 11:27:13)运行模拟……(20 - 11月- 2022 11:27:13)完成1的2模拟运行[11月20 - - 2022 11:27:13]完成2 2模拟运行(20 - 11月- 2022 11:27:13)清理平行工人……
setup函数是:
函数mySetupFunction ()
evalin (“基地”,“c = 3; k = 5; m = 2;”);
结束

preSimFcn回调

除了 SetupFcn 回调,一旦人均, SimulationInput 对象提供了 preSimFcn 回调上运行任何MATLAB代码工人每个仿真之前。的 SimulationInput 对象作为参数传递给我们可以更改对象的工人。我们可以使用 preSimFcn 并行化时间密集的设置。的灵活性 preSimFcn 也可以是一种理想的集成遗留MATLAB代码你可以设置模拟运行。
清晰的
mdl =“simpleSuspension”;
在(1:2)= Si金宝appmulink.SimulationInput (mdl);
在(1)(1)= .setPreSimFcn(@(在)presim (10),);
在(2)= (2).setPreSimFcn(@(在)presim (20),);
= parsim(的);
(20 - 11月- 2022 11:27:15)检查可用性平行池……(20 - 11月- 2022 11:27:15)开始仿真软件并金宝app行工人……(20 - 11月- 2022 11:27:15)配置模拟缓存文件夹在平行的工人……(20 - 11月- 2022 11:27:15)加载模型并行的工作……(20 - 11月- 2022 11:27:16)运行模拟……(20 - 11月- 2022 11:27:17)完成1的2模拟运行[11月20 - - 2022 11:27:17]完成2 2模拟运行(20 - 11月- 2022 11:27:17)清理平行工人……
presim 功能:
函数在= presim (k)
在= in.setVariable (“k”k *兰德);
在= in.setVariable (“c”3);
在= in.setVariable (“米”2);
结束

现在轮到你了

在下面的评论中让我们知道它的组合在这篇文章中列出的方法用于设置并行模拟。
|

댓글

댓글을남기려면링크를클릭하여MathWorks계정에로그인하거나계정을새로만드십시오。