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

SimPy: Introduction

阅读更多

        SimPy是一个基于Python的离散事件系统。它采用并行技术处理各种活动组件,如消息、顾客、卡车、飞机等等。它为程序员提供了一系列工具,包括Processes(进程),三种资源工具(ResourcesLevelsStores),以及记录结果用的MonitorsTallys

        SimPy中最基本的活动元素是进程(即Process类的实例),它们可以延迟一会,这个时间可以是固定或随机的,为了得到资源而排队,可以和其他进程或组件互动,或者被中断。比如在一个加油站的模拟系统,汽车(进程)将会为了等候可以使用的油泵而排队。

        SimPy脚本中可以包含一个或多个进程和进程的创建者,每个进程执行它们的进程处理方法(以后简称为PEM(Process Execution Method)),该方法决定了进程的行为。所有PEM并行运行,并且可能其他进程的PEM进行交互。

        资源工具有三种:ResourcesLevelsStores,每种类型都可以来模拟拥堵点,这时进程为了获得资源而必须排队等候。

        Resources拥有多个可供进程使用的资源个体。如:一辆汽车在加油站等候一个可供使用的油泵,我们可以把汽车看作一个进程,加油站看作一个拥有多个油泵的资源。SimPy会自动把所有等候的汽车放在一个队列中,直到有可用的油泵。SimPy允许每辆汽车在加油的过程中独占油泵,其他车辆只有在它加完油后才能使用该油泵。

        Levels用来模拟生产和消费过程中非常相似的物料。因此,一个物料的实时数量完全可以用一个标量来表述,可以是整形或浮点型。进程可以通过Level工具来对物料的实时数量来进行增减操作,如:加油站把汽油储存在大型的储油罐中,油轮将增加加油站储油量,而来加油的汽车则减少储油量。相对于Resource个体,进程不需要把物料归还给Level。

        Stores用来模拟生成和消费中的个体项目。进程可以中可以项目列表中增加或删除项目。如:在医院或门诊部,外科手术过程(可以视作进程)需要一个特殊的人员和设备列表,该列表中的东西可以作为Store中的项目。这些想做可以用Python中的任何类型保存在Store中。特别地,它们可以是进程,在雇主/员工的模拟关系中处于被剥削的境况。

        进程在下列两种情况下将会排队,Resource不能得到立即满足,或者当Level或Store已经满了,还需往里面加入物料时。队列,对Resource的请求或者对Level和Store的存取,都有SimPy自动控制。这些同样可以用了模拟当超时或有其他事情发生时的状况。

        MonitorsTallys用于实现统计的功能,如等候的时间和队列的长度。统计报表有简单的平均值、变量、按时间加权平均值或柱状图组成。它们可以从和Resources, Levels及Stores交互的队列中得到。如:我们可以收集在加油站等候的车辆的平均数量,以及车辆等候时间的分布情况。Tallys更新当前的统计作为模拟过程,但是不能保存完全的按时间连续的记录。Monitors可以保存完全的按时间连续的记录,作为日后模拟分析的依据。

        在尝试是用SimPy直线,你必须会写Python代码。事实上,你不许懂得如何定义和使用类以及它们的实例。Python是免费的,并且在大多数平台上可用。这里不再赘述。你可以从Python的网站(www.python.org)获得更多的信息。SimPy需要Python 2.3或更新的版本。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics