前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >干货 | AnyLogic建模仿真介绍+武汉疫情案例实战

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

作者头像
短短的路走走停停
发布2020-03-06 15:18:56
6.4K0
发布2020-03-06 15:18:56
举报
文章被收录于专栏:程序猿声
文案 向柯玮 审核修改 邓发珩

前言

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

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

目录

  • 前言
  • 目录
  • 系统评估方法
    • 测量方法
    • 解析方法
    • 仿真方法
  • 为什么要使用仿真建模
  • 仿真建模方法
    • 系统动力学
    • 离散事件
    • 智能体
  • AnyLogic的基本使用
    • 什么是AnyLogic
    • 下载安装
  • 案例简介

系统评估方法

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

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

测量方法

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

解析方法

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

仿真方法

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

为什么要使用仿真建模

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

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

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

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

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

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

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

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

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

仿真建模方法

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

系统动力学

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

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

离散事件

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

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

智能体

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

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

AnyLogic的基本使用

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

什么是AnyLogic

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

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

下载安装

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

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

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

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

案例简介

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

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

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

参数有:

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

在最初,我们认为

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

这个过程中,我们认为:

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

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

下面我们开始。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最终的一些展示。

中国加油,武汉加油!

参考资料

[1]

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿声 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 目录
  • 系统评估方法
    • 解析方法
      • 仿真方法
      • 为什么要使用仿真建模
      • 仿真建模方法
        • 系统动力学
          • 离散事件
            • 智能体
            • AnyLogic的基本使用
              • 什么是AnyLogic
                • 下载安装
                • 案例简介
                  • 参考资料
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档