干货 | AnyLogic建模仿真介绍+武汉疫情案例实战

程序猿声

共 3072字,需浏览 7分钟

 ·

2020-02-27 23:21

文案 向柯玮
审核修改 邓发珩

前言

多方法?系统仿真?都是些啥啊?

f5924c3aaa05b407c1e0c83e66b5bdc6.webp

别急,今天就让小玮陪你一起走进一款多方法仿真软件AnyLogic,来了解了解多方法仿真是什么以及简单的使用AnyLogic这样的多方法仿真软件。

a3eeb25fccf685e3538b1ff68014b537.webp

目录

  • 前言

  • 目录

  • 系统评估方法

    • 测量方法

    • 解析方法

    • 仿真方法

  • 为什么要使用仿真建模

  • 仿真建模方法

    • 系统动力学

    • 离散事件

    • 智能体

  • AnyLogic的基本使用

    • 什么是AnyLogic

    • 下载安装

  • 案例简介

系统评估方法

这是一个非常直观的概念,大家可以从字面上就可以知道系统评估的意思,没错就是对我们的系统的结果进行一定程度上的评估。

用的评估方法只要有以下三种。

测量

e0b01ce12c740066620655a3602d47c7.webp

利用测量工具。直接获得系统指标值。例:使用尺子测量长度。使用秒表获得100米跑时间。

解析方法

30b668eed0635ddf35dd187a7dd5ff21.webp

利用公式。简单计算获得系统指标值。例:计算圆周长公式 L = 2×π×r 单服务系统(到达泊松分布,服务指数分布)。平均等待时间W=λb²/(1-λb)。

仿真方法

924e27d9f0950626b089d523680dcce4.webp

利用计算机。对系统的结构、功能和行为 等进行动态性比较逼真的模拟仿 真获得系统相关指标值。例:利用AnyLogic仿真建模。

为什么要使用仿真建模

我们可以通过一个例子来说明我们为什么要使用仿真建模。

去银行办理业务,平均每小时10位客户,柜台只有1名柜员,平均服务时间为5分钟,我们需要求出平均的等待时间。

c1f732adf8da1fed4068081ca159854b.webp

在这里我们可以使用数学公式

d16af2fc947ec2542eaf0748faa168c9.webp

但是我们可以知道这只是假设每个人都是独立的前来,如果是几个人一块儿来呢?

778041e4375407bcedb6280a98890d71.webp

如果柜员有多个呢?如果服务时间有不同的分布呢?这些问题综合起来,即便是一个很简单的系统,我们也很难获得一个解析解

而且,在现实生活往往会更加的复杂

  • 只有一些特定的员工可以做一些交易
  • 客户可能被引导给其他员工
  • 出纳员可能共享资源
  • 如打印机或复印机
  • 不同的员工可能有不同的技术和能力
  • 等等……
c9a2052229edb600ead3420c7c23271a.webp

这些让我们几乎不可能从原来的方法中获得我们满意的结果。

这个时候,有可预见的复杂性和保证结果的分析方法就是:仿真建模

仿真建模方法

介绍使用仿真建模的原因,下面我们来讨论讨论建模的方法。

系统动力学

通常用于长期、战略性模型。假设被构建对象高度聚合:人、产 品、事件及其他离散物品在模型中 用数量代表。

比如说现在武汉疫情的变化趋势,我们就可以通过系统动力学来进行建模。

219cf4eb74653212f2575eae16997881.webp

离散事件

我们周围的世界表现是“连续 的”,分析连续的过程是,合适的 做法是对连续的本质进行抽象,只 考虑那些系统过程中“重要的”时 刻和时间。

比如说供应链中的问题,我们就可以通过离散事件来进行建模。

52e44bacf4c7419f143c2b9f41e07938.webp

智能体

以个体为中心的建模。确定智能体(人、建筑物、产品等),定义其行为(驱动力、状态、行为等),将其放到一个中心环境中,或可建立连接。则系统层(整体)行为就展现为 很多个体行为交互的结果。

比如说我们之前举的银行办理业务的模型,我们就可以通过智能体来进行建模。

AnyLogic的基本使用

前面介绍了一些关于仿真建模的基本知识,现在我们来介绍咱们的工具。

什么是AnyLogic

正所谓工欲善其事,必先利其器,有一款高效的建模工具,会对我们的工作产生巨大的便利,那么今天给大家介绍的就是一款建模神器AnyLogic。f7095b45d0bcf73ac7c75d265aed563e.webp

这是一款100%基于java的软件,所以为了建立一个比较酷炫的模型,还是很有必要了解一定的java知识。

e28ebe0965be4cb2f1c7477ab6d2be4a.webp

下载安装

首先我们前往AnyLogic官网[1],点击右上角的download进行下载。

13dc4444c432442b2cb47bd3b18a215a.webp

在安装的过程中我们要注意不要点击install,而是点击下面的按钮,这样我们就可以选择软件语言,当然,我们也可以在这里直接点击install,在进入软件之后再调节语言,但是能简便一点是一点嘛。

设置好安装路径之后就可以打开软件了。点击新建模型,设置好模型名称和模型路径,我们就相当于正式进入了AnyLogic模型的建设了。

把鼠标放在左侧图标处,我们就可以看到我们的工具箱。有很多东西,在接下来,我们通过一个简单的例子来让大家熟悉熟悉基本操作。

30259230f112759d64a78c6af2a79513.webp

案例简介

本次我们的案例是武汉疫情的SIR简易模型,我们采用的方法是系统动力学。本次案例的效果如下:

在本例中,我们简单的把疫情的几个模块分为

  • 易感染者
  • 感染者
  • 移出者(包括死亡者和治愈者)

参数有:

  • 总人口=5000
  • 接触人数=10
  • 传染概率=0.1
  • 疾病周期=10

在最初,我们认为

  • 易感染者=总人口-1(初始只有一个感染者)
  • 感染者=(初始为1)
  • 移出者=(初始为0)

这个过程中,我们认为:

  • 感染者的增加规律为(接触人数感染者/总人口传染概率*易感染者)
  • 移出者的增加规律为(感染者/疾病周期)

(这些不是很严谨的设法,只是单纯做个案例讲解--)3a53738d856bec8e92f882d6fd6b7f21.webp

下面我们开始。

把鼠标放在左侧,我们可以看到系统动力学的选项,点一下就可以看见系统动力学的工具栏。

首先用左键拖动一个存量出来,然后按住ctrl键并用左键拖动存量,我们可以发现,我们复制了一个存量出来,我们需要三个存量,所以我们需要再拖一次。

在这里我们需要解释一下存量的意思,顾名思义,其实就是储存变量的意思,其实就是编程意义上的变量,那么我们在之前说的参数其实就是常变量。

这些模型我们是可以随意变化大小的,我们做一些调整,然后给这些存量进行命名。

2c25b0e845acfe643adb1d71f16794de.webp

然后我们再拖动参数图像出来,按照我们之前的参数设置,一共应该有4个参数,拖出来,复制,命名。

72ebfb94260a9854f2ac13f0b6e617b6.webp

这个时候我们不要急,我们现在需要给这些存量进行赋初始值,对参数赋默认值。用鼠标点击存量在右侧窗口我们可以看到赋值处。依次填入我们的初始值。

cace511dc36dec024b06f7c477ecf1af.webp

对于参数,我们需要点击前面的那个点,点击后面的文字是不起作用的,需要点击前面的点,记住奥。同样的填入初始值。

3cb45c6de40dd5175934dc10968bb909.webp

其实在这个面板,大家就可以更加清晰的理解到这个参数的意义了吧?因为看到了类型嘛。很容易就可以和程序联系起来。

但是,到目前为止,我们还不够,我们要让各个存量,参数之间建立联系,这个时候,我们就需要借助流量这个东西了。

e93f5302021881a5186857f2c8aa2876.webp

双击从一个存量中间的点拉到另外一个存量中间的点,我们就可以看到生成了一个箭头。

我们是可以对箭头进行命名的,先点击箭头,然后就可以命名了。

036c0926b86e5527ae075009f534ad95.webp

在这里我们介绍一下流量的意思,就是类似于一个管道,把一个存量中的东西按照一定的规则转移到另外一个存量中去。

我们点击箭头,可以出现以下界面。

00dae67cdad6ea65d4dfd270a9be93c6.webp

在flow位置就是我们的规则,在之前我们已经介绍了从易感染者到感染者的规则是(接触人数感染者/总人口传染概率*易感染者),填进去就可以了。

但是,这个时候我们会发现在flow的边框那里出现了一个红色的小x,这是因为我们还没有让流量和我们相应的参数建立起关系。

69f13be9f8628dc086a6d8e025448a6a.webp

点击处于灰色位置的X,我们就可以让参数和流量建立起联系了,当我们把所有的联系建好了以后,我们会出现如图所示的画面。

7eb2d0fe14b4f8fd19e0e3a94d4a1190.webp

在这个时候,我们差不多已经建立了一个简单的模型,我们点击运行就可以看到我们的程序了(要记住点击左下角的启动按钮),会出现下面的画面。

046344e52b19341584b35bd144079366.webp

但是呢,我们可能觉得这个还不是很酷炫,我们还可以加一些数据分析的东西进去。

回到我们的主程序,选择工具栏中的分析。

bb31cd17a285541420c9d4a203413f3b.webp选择时间折线图或者别的图,其实原理都是一样的,我们在这里介绍一下时间折线图的使用。

还是老样子,我们把时间折线图拖出来,就可以设置我们的参数名称以及值的大小。

我们发现,这里面只有两个值让我们填,那么有的时候如果我们有更多的怎么办呢?其实点击下方的“+”好就可以了。

01a4d93bcac3b9f33d81de5b3f35bd6e.webp

再次运行程序就差不多完成了本次的建模,其实还有更多更复杂的操作,在这个位置,我们先不介绍了,以后有机会会再给大家介绍的。

最终的一些展示。

3a53738d856bec8e92f882d6fd6b7f21.webp

中国加油,武汉加油!

02347bd59c405ea42d755cb2cd8dea7a.webp

参考资料

[1]

AnyLogic官网: https://www.anylogic.com/


浏览 122
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报