SimPy: Simulation with SimPy

        所有离散事件程序自动以软件时钟的方式保持当前模拟时间。在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  

 

你可能感兴趣的:(Go)