[Pyhton] SimPy 离散事件模拟框架详解 —— 以一个简单的汽车充电排队模拟为例

目录

  • 一、背景知识
  • 二、SimPy 讲解
    • 2.1 SimPy 概述
    • 2.2 基本概念
    • 2.3 一个汽车开开停停的例子
    • 2.4 在走走停停过程中增加充电过程(过程交互)
    • 2.5 共享资源
  • 三、后续
  • 参考链接
  • 附录二
一、背景知识人们在生产活动和社会活动中 , 经常遇到一类复杂的系统 , 这类系统中有许多事件时而出现 , 时而消失 , 时而动作 , 时而停止 , 而启动和停止都发生在一些离散的时刻 , 并带有一定的随机性 。例如 , 港口中船舶的停靠码头、生产线上机床的启停、电话的接通和断开、计算机系统中某项作业的进行和退出 , 凡此种种 , 都带有上述特点 , 这类系统叫做离散事件动态系统(DEDS) 。随着生产和科技的日益发展 , 以及人类社会交往的日趋频繁 , 这类系统的数量和种类也越来越多 。
设计此类系统时 , 往往需要仿真来评估算法或方案的性能 , 常见的软件有:
商业软件:
名字简介图示AnyLogic通用多方法建模工具 。结合了基于代理、系统动力学和离散事件建模 。Arena一种离散事件模拟程序 , 也允许对连续过程进行建模 。Care pathway simulator专门为服务行业(如医疗保健)设计的离散事件模拟程序 。Enterprise Dynamics一个模拟软件平台 , 用于模拟和分析几乎任何制造、材料处理和物流挑战 。ExtendSim通用仿真软件包DELMIA3DEXPERIENCE 平台的一部分FlexSim拖拖拉拉做离散事件模拟 , 3DGoldSim将动态离散事件模拟嵌入到 Monte Carlo 框架GPSS离散事件模拟语言 。供应商可以提供不同的实现Micro Saint Sharp通用离散事件建模工具 , 使用拖放界面和C#编程语言MS4 Modeling Environment基于离散事件和混合模型的通用DEVS方法的软件环境Plant Simulation能够模拟和优化生产系统和流程的软件ProModel AutoCAD Edition在数字孪生Autodesk工具集(AutoCAD和Inventor)中快速构建空间精确的布局和过程仿真模型 。Simcad Pro实时变化 , 零代码有界面 , 支持 VRSimEvents向MATLAB / Simulink环境添加离散事件仿真 。SIMUL8基于对象的仿真软件VisualSim基于时序、功耗和功能的电子、嵌入式软件和半导体的基于模型的系统架构探索WITNESS可在桌面和云端使用 VR 进行离散事件模拟开源软件:
名字语言类型License简介JaamSimJavaAppApasche 2.0JaamSim是一款自由开源的离散事件模拟软件 , 包括拖放式用户界面、交互式3D图形、输入和输出处理以及模型开发工具和编辑器 。CPN ToolsBETAAppGPLv2用于分析所有类型应用中的物流/排队模型的工具 。DESMO-JJavaLibApasche 2.0Java离散事件模拟框架 , 支持混合事件/过程模型 , 并提供2D和3D动画 。FacsimileScalaLibLGPLv3离散事件模拟/仿真库 。PowerDEVSC++AppAFL, GPLv2基于DEVS形式的混合系统建模和仿真集成工具 。Ptolemy IIJavaLibBSD支持面向角色设计实验的软件框架 。SIM.JSJavaScriptLibLGPLJS是一个完全用JavaScript编写的通用离散事件模拟库 。在浏览器中运行 , 支持基于GUI的建模工具 。SimPyPythonLibMITSimPy是基于标准Python的基于过程的离散事件模拟框架 。SimulaSimulaLanguage一种专门为模拟而设计的编程语言 。SystemCC++LibApache 2.0提供事件驱动模拟内核 。注:软件示意图见《附录二》
二、SimPy 讲解2.1 SimPy 概述1)SimPy 是 python 的离散事件模拟框架 。2)SimPy 中的流程由 Python 生成器函数定义 。例如 , 可以用于为客户、车辆或代理等活动组件建模 。SimPy 还提供各种类型的共享资源来模拟容量有限的拥塞点(如服务器、结账柜台和隧道) 。3)模拟可以要多快有多快、实时、或者手动步进三种方式进行 。3)尽管理论上 SimPy 可以用于连续模拟 , 但它没有任何功能来帮助您实现这一点 。另一方面 , SimPy 对于具有固定步长的模拟来说是过火的 , 在这种情况下 , 您的流程不会相互交互或共享资源 。

经验总结扩展阅读