用于 Python 的事件离散、基于过程的模拟。
项目描述
模拟
SimPy 是一个基于标准 Python 的基于过程的离散事件仿真框架。SimPy 中的流程由 Python生成器函数定义,例如,可用于对客户、车辆或代理等活动组件进行建模。SimPy 还提供各种类型的共享资源来模拟有限容量的拥塞点(如服务器、结账柜台和隧道)。
可以“尽可能快地”实时(挂钟时间)或通过手动逐步执行事件来执行模拟。
尽管理论上可以使用 SimPy 进行连续模拟,但它没有任何功能可以帮助您。此外,对于具有固定步长且您的流程不相互交互或不与共享资源交互的模拟,SimPy 并不是真正需要的。
该文档包含一个教程、几个解释关键概念的指南、一些示例和API 参考。
SimPy 在 MIT 许可下发布。鼓励仿真模型开发人员与 SimPy 社区分享他们的 SimPy 建模技术。请在SimPy 邮件列表中发布消息。
有一个介绍性演讲解释了 SimPy 的概念并提供了一些示例:观看视频或获取幻灯片。
一个简单的例子
SimPy 的主要目标之一是易于使用。下面是一个简单的 SimPy 模拟示例:在每一步打印当前模拟时间的时钟进程:
>>> import simpy
>>>
>>> def clock(env, name, tick):
... while True:
... print(name, env.now)
... yield env.timeout(tick)
...
>>> env = simpy.Environment()
>>> env.process(clock(env, 'fast', 0.5))
<Process(clock) object at 0x...>
>>> env.process(clock(env, 'slow', 1))
<Process(clock) object at 0x...>
>>> env.run(until=2)
fast 0
slow 0
fast 0.5
slow 1
fast 1.0
fast 1.5
安装
SimPy 需要 Python >= 3.6,已知 CPython 和 PyPy3 都可以工作。
您可以通过pip轻松安装 SimPy :
$ pip install -U simpy
您也可以手动下载并安装 SimPy:
$ cd where/you/put/simpy/
$ python setup.py install
要在您的安装上运行 SimPy 的测试套件,请执行:
$ py.test --pyargs simpy
入门
如果您以前从未使用过 SimPy,那么SimPy 教程对您来说是一个很好的起点。您还可以试用SimPy 附带的一些示例。
文档和帮助
您可以在我们的在线文档中找到教程、示例、主题指南和API 参考,以及有关SimPy 及其历史的一些信息。如需更多帮助,请联系SimPy 邮件列表。SimPy 用户非常有帮助。当然,您也可以挖掘源代码。
如果您发现任何错误,请将它们发布在我们的问题跟踪器上。
享受 SimPy 中的模拟编程吧!
端口和类似的库
SimPy 和类似于 SimPy 的库的重新实现有以下语言版本:
SimPy 的变更日志
4.0.0 - 2020-04-06
[BREAKING] Python 3.6 是最低支持版本
[BREAKING] BaseEnvironment被消除。改为继承环境。
[BREAKING] Environment.exit()被消除。改用return。
[新] 文档中的“从 SimPy 3 移植到 4”主题指南
[新] SimPy 现在是完全类型注释的 (PEP-483, PEP-484)
[新] PEP-517/PEP-518 兼容构建系统
3.0.13 - 2020-04-05
[FIX] 修复文档中的几个小错别字
[修复] Process._resume() 中可能出现的 AttributeError
[更改] 在分发版本中使用 setuptools_scm
3.0.12 - 2020-03-12
[FIX] 修复 GitLab.com 的 URL 并重新发布
3.0.11 - 2018-07-13
[FIX] 修复 Environment.exit() 以支持 PEP-479 和 Python 3.7。
[FIX] 修复抢占中错误的usage_since计算
[新] 在文档中添加“时间和计划”部分
[CHANGE] 将中断从事件移至异常
[FIX] 各种小的文档改进
3.0.10 – 2016-08-26
[FIX] 条件不再泄漏事件回调(感谢 Peter Grayson)。
3.0.9 – 2016-06-12
[新] PriorityStore 资源和性能基准测试由 Peter Grayson 实施。
[修复] Cristian Klein 添加了对识别嵌套抢占的支持。
3.0.8 – 2015-06-23
[新] 在文档中添加了监控指南。
[修复] 改进的包装(感谢 Larissa Reis)。
[FIX] 修复和改进了各种测试用例。
3.0.7 – 2015-03-01
3.0.6 - 2015-01-30
3.0.5 – 2014-05-14
3.0.4 – 2014-04-07
[新] 经验证,SimPy 可在 Python 3.4 上运行。
[新] SimPy 活动指南
[更改] 条件事件(AllOF / &和 AnyOf / |)的结果字典现在是一个OrderedDict,其排序方式与原始事件列表相同。
[CHANGE] 条件事件现在也处理的事件除外。
[FIX] Resource.release()之后直接Resource.request()不再成功。该过程现在必须按预期等待。
[FIX] Event.fail()现在接受从 BaseException派生的所有异常,而不仅仅是Exception。
3.0.3 – 2014-03-06
[新] SimPy 基础指南。
[新] SimPy 环境指南。
[修复] Windows 上实时模拟的计时问题(问题 #46)。
[修复] 由于 Unicode 错误(问题 #41)在 Windows 上的安装问题。
[修复] 小的文档问题。
3.0.2 – 2013-10-24
[修复] Container和FilterStore的默认容量现在也是 inf。
3.0.1 – 2013-10-24
[修复] Store的文档和默认参数不匹配。它的默认容量现在是inf。
3.0 – 2013-10-11
SimPy 3 已从头开始完全重写。我们的主要目标是简化 API 和代码库,并使 SimPy 更加灵活和可扩展。一些最重要的变化是:
更加关注事件。进程产生事件实例并暂停,直到事件被触发。事件的一个示例是超时 (以前称为保持),但即使进程现在也是事件(您可以等到进程终止)。
事件可以与& (and) 和|结合使用 (或)创建 条件事件。
流程现在可以由任何生成器函数定义。您不必再对Process进行子类化。
没有更多的全局模拟状态。每个模拟都将其状态存储在 与旧模拟类相当的环境中。
改进了资源系统,新增了资源类型。
删除了绘图和 GUI 功能。Pyside和matplotlib在这方面要好得多。
大大改进的测试套件。它更干净,测试更短,数量更多。
彻底检查文档。
有一个从 SimPy 2 移植到 SimPy 3 的指南。如果您想暂时坚持使用 SimPy 2,请将您的要求更改为'SimPy>=2.3,<3'。
总而言之,SimPy 已经成为一个基于协程的异步编程框架。它为异步编程世界带来了在事件离散模拟领域十多年的经验和科学知识,因此应该成为基于事件循环的一切的坚实基础。
您可以在历史记录页面上找到有关旧版本的信息
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。