`
jimmykuu
  • 浏览: 37022 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SimPy: Simulation with SimPy

Go 
阅读更多

        所有离散事件程序自动以软件时钟的方式保持当前模拟时间。在SimPy中可以通过now()函数得到当前模拟时间,在模拟开始的时候,软件时钟设置为0.0。用户不能直接改变软件时钟。

        当模拟软件运行时,当前模拟时间随着事件进行一步步增加。随着模拟系统状态的改变,事件随时会发生。如:顾客的到达就是一个事件,同理,顾客的离开也是。

       使用SimPy是必须载入Simulation模块:

 
  1. from SimPy.Simulation import *  

 

        以下语句必须在出现在任何SimPy进程被激活之前,用来初始化模拟系统的全局变量和把软件时钟置零:

  1. initialize()  

 

        接下来是一些创建和激活对象的SimPy语句。当遇到下面语句时,模拟系统将开始运行:

  1. simulate(until=endtime)  

 

        然后模拟开始,SimPy开始查找并执行第一个预订的事件,执行完后,继续寻找并执行第二个事件,以此类推。这将持续进行直到出现下列情况:

  • 没有可执行的时间(这时now()等于最后一个事件发生的时间)
  • 模拟时间到达结束时间(now()等于结束时间)
  • stopSimulation()命令被执行(now()等于当stopSimulation()被调用时的模拟时间)
        典型的做法是在simulate语句中用until参数来终止模拟,但是也可以在任何时候用下面命令终止:

  1. stopSimulation()  

        在模拟结束以后,附加的语句仍可以执行,这对于保存或显示像平均等待时间或队列长度这些结果将非常有用。

        接下来的代码仅仅显示了模拟程序的主要部分(能够完整执行的代码请看示例1和示例2),这里Message是一个预定义的Process的子类,m是它的实例,是一个特定的消息。激活的m执行至少一个预定义的时间,这里执行m的PEM(这里是go),simulate(until=1000.0)语句将立即跳到第一个预定义的事件来开始运行模拟系统。它将一直运行下去知道事件执行完毕或模拟时间到达1000.0。当模拟结束,预先编写的Report方法将被执行用来显示结果:

 
  1. initialize()  
  2. m = Message()  
  3. activate(m, m.go(), at=0.0)  
  4. simulate(until=1000.0)  
  5.   
  6. Report()    # report results when the simulation finishes  

 

分享到:
评论

相关推荐

    simpy-examples:Simpy中一小部分用于通用模拟的程序

    SimPy是一个强大的开源Python仿真库,它为各种复杂的系统提供了基于事件的建模和仿真工具。这个名为"simpy-examples"的项目包含了SimPy库的一些应用实例,可以帮助用户理解和学习如何在实际问题中使用SimPy进行仿真...

    SAMSaaS:Simulation Mashup - 建模和仿真即服务的语义架构

    例如,Python库如NumPy、SciPy、Matplotlib和Pandas等可以用于数值计算、数据可视化和数据分析,而像SimPy这样的库则专门用于过程仿真。 在"压缩包子文件的文件名称列表"中提到的"SAMSaaS-master"很可能是一个Git...

    slicesim:5G网络切片模拟

    方法离散事件模拟使用Python 3.7,Simpy,Matplotlib,KDTree YAML用于读取输入配置异步编程定义: 客户:模拟消费者。 通过给定的分发参数生成消耗请求。 基站片:模拟资源。输入设定值settings : simulation_time ...

    simcpp2:使用协程在C ++ 20中进行离散事件模拟

    它类似于SimPy,旨在易于设置和使用。 进程被定义为接收simcpp2::simulation &作为其第一个参数并返回simcpp2::process函数。 每个过程都作为协程执行。 因此,此框架需要C ++ 20。 要编译模拟,请使用g++ -Wall -...

    pythonsim.pdf

    ## 一、SimPy 概览 ### SimPy简介 SimPy 是一个面向对象的、基于进程的离散事件模拟库,它为Python提供了强大的模拟工具。作为一款开源软件,SimPy在MIT许可下发布,支持Python环境中的模拟编程。SimPy的主要组成...

    使用Simpy的离散事件模拟在制造单元的随机排队系统中运行基于模型和无模型的深度强化学习调度策略___下载.zip

    离散事件模拟(Discrete Event Simulation, DES)是一种强大的工具,常用于研究复杂系统的动态行为,特别是在制造单元的随机排队系统中。Simpy是一个用Python编写的开源离散事件模拟库,它为创建和分析这类系统提供了...

    uia-simjs:SimPy的JavaSciprt端口,基于过程的离散事件模拟框架

    用于JavaScript,DESim4JS的UIA-SIM DESim4JS是SimPy(基于过程的离散事件模拟框架)JavaScript端口。 DESim4JS旨在将SimPy中使用的概念移植到JavaScript世界。例子一个简单的例子: var env = new desim . Env ( ) ...

    使用协程在C ++ 20中进行离散事件模拟-C/C++开发

    进程被定义为接收simcpp20 :: simulation <>和作为其第一个参数并返回simcpp20 :: event <>的函数。 每个过程都作为协程执行。 因此,此框架需要C ++ 20。 一个模拟两个时钟在不同时间间隔内滴答作响的简短...

    simcpp20:使用协程在C ++ 20中进行离散事件模拟

    它类似于SimPy,旨在易于设置和使用。 进程被定义为接收simcpp20::simulation &作为其第一个参数并返回simcpp20::process函数。 每个过程都作为协程执行。 因此,此框架需要C ++ 20。 要编译模拟,请使用g++ -Wall...

    elevator_simulation:模拟办公楼电梯系统的等待时间

    要求Python 3.4+ requirements.txt 中的所有内容(simpy、pandas、ggplot 等)包括什么该项目由许多工具和模块组成,包括: elevator_simulation一个合理记录的 python 包,用于在simpy创建模拟环境的表示脚本生成...

    uia-sim:基于进程的离散事件模拟框架SimPy的Java端口

    DESim4J旨在将SimPy中使用的概念移植到Java世界中。 由于Java中没有yield关键字,因此该框架还在包uia.cor实现了类似于yield的API,以满足某些协程方案。 是一个子项目,可建立制造工厂的抽象模拟器。 包uia.cor ...

    python-machine-simulation:模拟 N 台机器以分析其模块更换策略成本的 Python 应用程序

    在"python-machine-simulation"项目中,每台机器可能被建模为一个独立的SimPy过程。这些过程会模拟机器的运行、故障、维修等行为。例如,机器可能会在运行一定时间后随机故障,然后触发维修过程。维修过程可能包括...

    Traffic-Simulation:我大学的课外项目

    例如,可以使用像是SimPy这样的仿真库来创建交通流模型,或者利用matplotlib和seaborn库进行数据可视化。 在"Traffic-Simulation-main"这个压缩文件中,我们可以期待找到以下内容: 1. **源代码**:包含实现交通...

    simulation

    在IT行业中,模拟(Simulation)是一种非常重要的技术,它通过计算机程序来复制真实世界中的系统、过程或事件,以便预测结果、进行实验分析或者优化设计。在这个特定的案例中,"simulation" 可能指的是一个Python...

    MC_Sports_Simulation:用Markov-Chain Monte Carlo模拟运动

    同时,它还拥有如SimPy这样的仿真库,可以便捷地构建和运行马尔可夫链模型。 在“MC_Sports_Simulation-master”压缩包中,可能包含以下内容: 1. 数据集:包含了历史比赛数据,这些数据被用于训练马尔可夫链模型...

    thesis_figures:COSO TRNG论文数字

    COSO TRNG论文数字这是用于在论文中生成图形的脚本的集合。安装使用软件包管理器安装foobar。 pip install -r requirements.txt用法模拟./simpy_simulation.py 这可能需要几分钟。执照

    Simulation-engineering-problems

    "Simulation-engineering-problems"这个主题可能涵盖了一系列使用Python编程语言解决的仿真工程挑战。Python因其易读性、丰富的库支持以及广泛应用于科学计算和数据分析而成为仿真工程的理想选择。 1. **Python基础...

    Simulacion_Discreta:模拟离散

    1. SimPy:这是一个用于过程建模的Python库,特别适合离散事件模拟。它提供了环境、过程、资源等概念,简化了模型构建。 2. PySim:另一个离散事件模拟库,提供了易于理解的API,支持多种模型组件,如进程、事件、...

    Test-Analysis-Simulation-

    在"Test-Analysis-Simulation-"这个项目中,我们可以推测这可能是一个涉及到测试、分析和模拟的Python项目。让我们深入探讨一下这些领域以及Python如何在它们中发挥作用。 **测试** 在软件开发中,测试是至关重要...

    Modeling-Simulation-Optimization:该项目的重点是解决在伦敦和伯明翰之间的HS2铁路线上运行的火车数量最优化时所面临的实时情况。 利用线性规划方法开发模型以模拟场景,并通过使用蒙特卡洛模拟进行了优化

    编程语言:PythonPython库:simpy,pandas,numpy,matplotlib,scipy.stats,scipy,matplotlib.pyplot,sklearn.linear_model。项目2:回顾用于预测城市发展的模拟技术该报告的这一部分批判性地回顾了用于模拟主要...

Global site tag (gtag.js) - Google Analytics