人在仿真软件万博1manbetx

万博1manbetx基于Simulink和模型的设计

Covid-19:使用并行模拟来研究感染传播

在一个以前的文章我引入了一个模型,模拟像COVID-19这样的现象的指数级传播。随着新闻中越来越多的关于消除限制计划的讨论,我认为使用不同的消除限制场景运行多个模拟并观察潜在的结果会很有趣。

你可以下载这个项目MATLAB中央GitHub

图中显示了一个示例结果仿真管理器:我进行了250次模拟,改变了代理的初始速度。这个参数与人们遵守限制规则的程度类似。你可以看到,对于极端的病例,结果是直接的:在缓慢的速度下,所有人都被监禁,几乎没有人被感染。相反,如果速度太快,每个人都会被感染。最有趣的是在中间。如您所见,对于一个初始速度范围,结果是很难预测的。

仿真管理器

让我们看看我是如何使用的parsim仿真管理器运行这些模拟,利用我电脑上的所有核心,并产生上面的图像。

如果你不熟悉帕西姆,我建议你早点来这里帖子在这里我引入了这个函数。

管理仿真数据

您可能知道,有多种方法可以指定模型所需的数据。这样的选择数据字典模型的工作空间,基础工作区,和万博1manbetx仿真软件。SimulationInput对象在美国,人们对选择什么感到困惑是可以理解的。对于这个项目,我可能已经使用了这些方法的任何组合,并得到我想要的结果。下面是我决定使用的,以及为什么。

首先,我决定在模型工作区中为模型所需的所有参数存储一组默认值。在开发模型时,它允许我更新图表,而不需要在基本工作区中定义任何特定的变量(尽可能保持模型处于可更新状态是我在教导Simulink时重复的第一个和主要建议之一)。万博1manbetx

您可能知道,模型工作区有四个数据源的选项:模型文件、mat文件、MATLAB文件(MATLAB脚本)、MATLAB代码。我选择了一个MATLAB脚本。

在模型资源管理器中设置模型工作区

使用Parsim模拟模型时,我可以指定要使用的参数万博1manbetx仿真软件。SimulationInput对象和setVariable方法。

下面是我的代码,准备将传递给parsim的模拟输入对象数组:

准备模拟输入

我希望这能更清楚地说明我在MATLAB脚本中定义模型工作区的原因:我需要来自模型工作区的值来创建模拟输入对象。在这个项目中,我有固定数量的具有默认初始位置的代理。在模拟输入对象中,我要做的是用一个随机扰动修改它们的初始位置并给它们分配初始速度。

文章仿真功能

在上面的截图中,你可能注意到我使用了setPostSimFcn方法的模拟输入对象,我传递给它函数句柄我想在模拟完成后在每个工人上执行。

此函数将接收作为输入的万博1manbetx仿真软件。SimulationOutput对象由模型生成,并且应该生成Simulink。万博1manbetxparsim将为该模拟返回的SimulationOutput对象。这通常有两种用法:

  • 对记录的数据进行后期处理添加结果为原始仿真输出对象
  • 对记录的数据进行后期处理代替原始仿真输出对象

正如您可以想象的那样,在运行大量模拟时,该第二选项变得有用的每个日志数据。在我的情况下,这里是我的模拟后功能的样子:

文章仿真功能

在这段代码中,我计算在模拟的最后一个时间步骤中,有多少代理从未被感染,以及有多少代理已被感染,现在已免疫。

在仿真管理器中可视化结果

通过所有这些设置,我可以在仿真管理器中的并行工作人员上完成单个仿真时可视化结果。因为我在模拟输出对象中添加了从未感染的代理数量,所以我可以创建一个散点图来显示这个数字与代理的初始速度之间的关系。

可视化的结果

模拟并行

此时,是时候运行这些模拟了。我想突出3种可能的方法来做这件事。您可以在多个模拟工作流程上阅读更多这里

选项1 - parsim:默认情况下,parsim是一个阻塞函数;只有当所有模拟都完成时,它才会返回命令提示符。

parsim

选项2 - parsim背景:Parsim有一个在后台运行的选项。有了这个选项,parsim将立即返回MATLAB提示符,这样您就可以在并行工作人员运行模拟时在MATLAB中做其他工作。在本例中,parsim返回一个数组万博1manbetxSimulink.Simulation.Futures.当这些未来对象的state属性变为“finished”时,就可以使用fetchOutput方法检索仿真输出对象。

parsim背景

方案3 -批量生产:batchsim,我们更进一步,让所有的东西都在并行集群上管理。在这种情况下,一个并行工作者成为head worker,负责将模拟分派给其他并行工作者并收集结果。它需要多一个worker,但是它的优点是您可以关闭MATLAB并稍后重新连接以获得作业和获取结果。

batchsim

现在轮到你了

从以下网站下载项目MATLAB中央GitHub请在下面的评论中告诉我们你的想法。你会注意到,该项目还包括一个MATLAB应用程序,可以使用Simulink编译器部署…万博1manbetx稍后会有更多细节。

下面是仿真管理器可视化的实时视频,我正在使用6个并行工作器运行250个仿真。

多重模拟使用parsim

|

评论

要留下评论,请点击这里登录到您的MathWorks帐户或创建一个新帐户。