Covid-19:模拟Simulink中的指数扩展万博1manbetx
更新(10/14/2020):GitHub存储库现在包含一个Matlab应用程序来模拟模型并可视化结果。我们将应用程序编译为Matlab Web App.并使用它在云中寄出它MATLAB Web App Server。点击此处在Web浏览器中尝试。
上周,我的同事马里亚诺Lizarraga Fernandez指出了我华盛顿Covid-19的仿真我们认为使用MathWorks产品实施类似的东西会很有趣。s manbetx 845
现在克斯发表A.基于MATLAB的模拟器,是时候为我们发布使用Simulink,StateFlow和Simevents实现的模拟。万博1manbetx
以下是一个随机设置的50个“代理”的结果(绿色是感染前,红色被感染,蓝色被恢复):
让我们看看我如何把它放在一起。
扩展卷曲模拟器
在思考我如何实施这种模拟时越过我思绪的第一件事是我可以重用我一起放入的一些算法卷曲的模拟器我一段时间发表。
利用Stones的动态互相撞击已经实现的,我添加了反对边界盒和逻辑以跟踪感染传播的逻辑。
首先,让我们看看顶级。
这里是州流图表的样子:
细节
这是它的所有作品:
- 内部状态流,Simulink状态集成了代理的万博1manbetx运动
- 在每次步骤中,我们都会调用Matlab函数来检测代理是否触摸其中一个边界墙。如果一个代理商,我们在墙方向上反转了其速度的符号,并通过这种更新的速度重新初始化了Simulink状态的集成器块。万博1manbetx
- 每次步骤,我们都会调用Matlab函数来检测两个代理是否接触。如果他们这样做,我们使用Simulink函数计算新速度并在Simulink状态中重置Integrato万博1manbetxr块。
- 发生这种情况时,我们调用StateFlow图形功能来确定感染是否已传播。要跟踪谁被感染,我们使用全球数据存储
- 如果我们确定新代理已被感染,则状态溢图调用生成Simevents实体的Simulink函数万博1manbetx
- 此实体被发送到一个实体服务器以恢复固定的时间。
- 一旦恢复时间结束,实体服务器退出动作呼叫相应地更新全局数据存储的Simulink函数。万博1manbetx
结果
这是我减少了代理的初始速度的不同结果。看到对传播的影响很有意思:
现在轮到你了
下载我们的模拟器Matlab Central.或直接从GitHub.让我们知道你的想法。
注释
要发表评论,请点击这里登录您的MathWorks帐户或创建新的。