仿真系统概述

简介: 介绍仿真系统的概念,和设计一个仿真系统的大致步骤

什么是系统

讨论仿真系统之前我们需要明确什么是系统,这个概念可以帮助我们理解边界和范围。

那么什么是系统?

德谟克利特的著作《世界大系统》有一段关于系统的阐述:

任何事物都是在联系中显现出来的,都是在系统中存在的,系统联系规定了每一个事物,而每一个事物又能反映系统的联系的总貌。

中国著名学者钱学森的观点是:

系统是由相互作用相互依赖的若干组成部分结合而成的,具有特定功能的有机整体,而且这个有机整体又是它从属的更大系统的组成部分。

词典对于系统的解释是:

组成一个复杂整体的一组互相作用、互相联系或者依存的事物。

用一个汽车总装线来举例,各种零部件通过传送设备(履带或者其他设备),再有工人(或者是机械手臂)按照顺序组装。在这个系统中,工人,机械手臂,零部件相互作用。履带的速度影响零部件的到达,进而影响装配,流水线自身的划分和设计又影响了整体效率。

从上面这个例子可以感受到我们看系统的时候有两个重要的点:

一是边界,即确认需要研究事物范围,比如货币的供应量从某种程度上也可能对流水线有影响,但是我们并不会考虑它。

二是抽象,针对研究内容的不同,需要考虑的事物的详细程度也是不同的,比如机械手臂的出产公司虽然也是一种外部输入,但是会被统一抽象为机械手臂,对于其的特征建模也可以按照平均来计算。

还有一种更通用的描述系统的方式,即三要素,分别为实体,属性和活动。实体确定了系统构成,属性描述了实体特征,而活动描述了系统内部的相互作用。

什么是仿真

仿真一般是指对现实中的系统进行模仿,观测并产生人造过程记录的过程。

仿真最早用于水利研究,逐渐用于航空、航天和原子能技术等领域。后来随着计算机技术的大力发展,扩展到各行各业。

针对互联网公司,特别是线上线下融合较深的业务,由于线上试错成本高,反馈周期慢,通过仿真可以很好服务以下几点:

  • 业务形式新,基本没有可以参考的模型或者参数,加上缺少学术上的积累,仿真可以加速研究一个业务场景中复杂系统间的相互影响。
  • 仿真由于是对真实系统的模仿,所以速度和外部参数是可以调整,且对真实系统无影响,可以快速安全进行实验或者验证,加深对于系统行为的理解。
  • 仿真模型和实验的产出可能成为新知识的来源,用于优化业务。

仿真系统的构建方法

构建仿真系统流程如下:

系统建模

离散or连续

系统可以是离散,也可以是连续的。当然对于现实中的大多数系统,这两种变化都是共存的,一般我们取其中占多数的为准。

大部分自然系统都是连续系统,比如湖面的水位,由于降雨,自然蒸发等处于一个时刻变化的状态,而离散系统一般只在离散时间点发生变化的系统,绝对部分人造系统都属于离散系统。

除了特别的需要以外,大部分系统设计上都会做成离散系统,因为连续系统可以通过引入采样装置转为离散系统,比如上面提到的湖泊系统,就可以通过引入定时采样水质,水位等的装置让系统变成离散系统以方便处理。

确定核心要素

需要明确系统中的实体(包括属性),事件,活动。

我们以外卖配送来看,实体即骑手,顾客,商家,属性可能包括骑手速度,顾客位置,商家位置等,属性可以是从真实系统中获得,也可以是统计上的数据。

事件主要是对于整个配送有重要影响的,点外卖的时候有一些外卖APP会有进度提示,比如商家接单,商家出餐,骑手抢单,骑手送餐,送达顾客处等,当然这些只是展示出来的事件,系统内部可能更复杂,还有更多事件,确认核心要素的时候一般需要业务专家或者领域专家。

订单关键事件-1

订单关键事件-2

大部分系统单单靠事件就可以驱动了,但是有时候还需要明确活动。一般两个相邻且有先后顺序的事件,如果从逻辑上导致了状态的转移,那可以化为一个活动。比如外卖配送中从待取餐状态转移配送中状态,其实暗含了到店和取餐两个事件。活动并不是必须的,如果研究目的不涉及可以不关注。

确定仿真算法

目前有四种成熟仿真算法:

  • 事件调度
  • 活动扫描法
  • 进程交互法
  • 三阶段法

一个仿真系统可以采用一种算法,也可以混合多种使用。

仿真系统的时间由仿真钟控制,算法决定了仿真钟的推进方式。比如事件调度算法,就是每次推进一个固定的仿真钟步长,然后获取当前仿真钟上需要触发的事件,如果多个事件则按照优先级触发。

diagram-10459649492078318512.png

仿真钟的结束一般有两种,一种是终态仿真,即仿真钟在规定时间内停止,比如仿真一个小时的运行情况。另外一种是稳态仿真,这种仿真的仿真钟是无限的,停止条件由其他方式确定,比如某种特定的置信度达到一个阈值,则由外部停止仿真钟。

建立仿真模型

根据确定的仿真算法,梳理系统内部的状态变量和流转方式。再针对不同的事件确定事件对状态和实体属性的影响,明确事件间的相互影响。

用加油站来举例,车量入站,车辆等待加油,车辆加油完成,车辆离开就是一系列事件,期间可能的影响包括加油站内的车辆数量,可用加油枪的数量,剩余油量,收入等。

比如车辆开始加油事件发生时会在未来生成车辆加油完成这个事件,具体的完成时间需要通过统计学或者其他建模方式给出。

实现仿真系统

实现仿真系统主要有两个流派:

  • 基于高级语言自研
  • 基于仿真语言开发

还有一种就是从专业的支持公司购买仿真系统,并直接使用,比如anylogic,flexsim等。

自研就不用多说了,多用于新兴系统,且开发资源充足的公司。

仿真语言更适合成熟的系统,或者科研院校,比如Modelica (https://openmodelica.org)。

分析仿真结果

这个和仿真研究目的强关联,一般都是从仿真过程记录中加工获得结果数据。唯一需要注意的有随机性的仿真系统一次仿真只是一次抽象,要注意置信度。

仿真上云

仿真系统和普通的业务系统不同,它对于冷启动不敏感,资源需求大但是不均衡,同时仿真单个任务运行时间长。

一般仿真系统上云可以考虑的就是执行节点的动态伸缩,根据仿真任务的情况适当缩减或者扩容节点,按量付费。

另外还有一个可能的方向就是基于serverless,因为仿真系统本身可以基于事件驱动,搭配MQ可以通过事件来驱动function进行过程流转,中间过程可以落库,也可以写文件。由于没有具体操作过,效果还有费用上的对比没有数据,但是至少基于serverless的话伸缩性会很好。

参考

这里有一些公开的仿真应用:

另外补充阅读:

相关文章
|
3月前
|
传感器
毕业设计 基于51单片机自动智能浇花系统设计
毕业设计 基于51单片机自动智能浇花系统设计
|
8月前
|
供应链 数据挖掘
基于Flexsim的供应链建模与仿真课程设计(下)
基于Flexsim的供应链建模与仿真课程设计
182 0
|
8月前
|
供应链 BI Windows
基于Flexsim的供应链建模与仿真课程设计(上)
基于Flexsim的供应链建模与仿真课程设计
154 0
基于Flexsim的供应链建模与仿真课程设计(上)
【仿真建模】第五课:AnyLogic入门基础课程 - 地铁车站仿真讲解
为了更好的控制是否显示热力图,在Main中复制启动限流的复选框,创建一个是否显示热力图的复选框。拖拽一个目标线,放到如下图所示的位置,该线代表非限行状态下,行人需要到达的目的地。绘制一个如下图所示的路径作为缓冲路线,形状可以自己定义,不一定要和我一样。再拖拽一个pedGoTo出来,跟随缓冲路线,代表限行状态下的行走路线。绘制一个用于控制行人出现的目标线,最好长一点,因为行人出现比较随意。将可见设置为否,让墙成为逻辑上的墙,即,在运行时不可见的墙。在Main窗口中,画一个如下图所示的墙,只留下入口。
504 0
【仿真建模】第五课:AnyLogic入门基础课程 - 地铁车站仿真讲解
【仿真建模】第四课:AnyLogic入门基础课程 - 轨道交通仿真入门讲解
拖拽出一个trainSource,设置其车厢数量为4(默认为11,车厢太多会超出轨道,导致报错),设置轨道上的位置为起点。运行查看效果(我这里运行前设置trainSource的间隔时间为1分钟了)其中,中间的trainMoveTo的方向要设置为反向,因为列车需要倒车。其中每个trainMoveTo的路线都设置为从当前到目标轨道自动计算。加入延迟,不让列出顺利到达和销毁,而是在到达后等一段时间再销毁。改造轨道,弧形是按住Alt键得到的。定义轨道上的起点和终点。创建车型类型:列车头。创建车厢类型:列车身。
164 0
【仿真建模】第四课:AnyLogic入门基础课程 - 轨道交通仿真入门讲解
【仿真建模】第三课:AnyLogic入门基础课程 - 多层建筑行人疏散仿真讲解
为了实现对一楼和二楼不同的疏散时间,复制之前的按钮,创造两个新按钮分别对一楼和二楼进行控制。在MyFloor1中,选择colOut,按照Ctrl键移动,复制一个colOut1出来。好像服务的延迟时间太长了,可以调小一点,设置为uniform(0.5, 1.0)为了区分一楼和二楼,在Main中调整MyFloor2的高度为40。把等待时间设置长一点,设置为uniform(1.5, 2.0)为了控制人们的逃生目的地,我们先拖拽一个集合出来。在Main中,把MyFloor2拖拽出来。
228 0
【仿真建模】第三课:AnyLogic入门基础课程 - 多层建筑行人疏散仿真讲解
|
机器人 Python
ArbotiX+rviz功能仿真
ArbotiX是一款控制电机、舵机的硬件控制板 提供了相应的ROS功能包 提供了一个差速控制器,通过接收速度控制指令,更新机器人的里程计状态
ArbotiX+rviz功能仿真
|
机器人
《机器人自动化:建模、仿真与控制》——2.3 仿真
本节书摘来自华章计算机《机器人自动化:建模、仿真与控制》一书中的第2章,第2.3节,作者[法]吕克·若兰(Luc Jaulin),译 黄心汉 彭刚,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1268 0
|
机器人 测试技术
《机器人自动化:建模、仿真与控制》——第2章 仿真
本节书摘来自华章计算机《机器人自动化:建模、仿真与控制》一书中的第2章,作者[法]吕克·若兰(Luc Jaulin),译 黄心汉 彭刚,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
984 0