[ PROMPT_NODE_27414 ]
simpy
[ SKILL_DOCUMENTATION ]
# SimPy - 离散事件模拟
## 概述
SimPy 是一个基于标准 Python 的流程驱动离散事件模拟框架。使用 SimPy 可以对实体(客户、车辆、数据包等)随时间相互交互并竞争共享资源(服务器、机器、带宽等)的系统进行建模。
**核心能力:**
- 使用 Python 生成器函数进行流程建模
- 共享资源管理(服务器、容器、存储)
- 事件驱动的调度与同步
- 与挂钟时间同步的实时模拟
- 全面的监控与数据收集
## 何时使用此技能
在以下情况使用 SimPy 技能:
1. **离散事件系统建模** - 事件以不规则间隔发生的系统
2. **资源竞争** - 实体竞争有限资源(服务器、机器、员工)
3. **队列分析** - 研究等待线、服务时间和吞吐量
4. **流程优化** - 分析制造、物流或服务流程
5. **网络模拟** - 数据包路由、带宽分配、延迟分析
6. **容量规划** - 为期望的性能确定最佳资源水平
7. **系统验证** - 在实施前测试系统行为
**不适用于:**
- 具有固定时间步长的连续模拟(请考虑 SciPy ODE 求解器)
- 无资源共享的独立流程
- 纯数学优化(请考虑 SciPy optimize)
## 快速入门
### 基本模拟结构
python
import simpy
def process(env, name):
"""一个简单的等待并打印的流程。"""
print(f'{name} starting at {env.now}')
yield env.timeout(5)
print(f'{name} finishing at {env.now}')
# 创建环境
env = simpy.Environment()
# 启动流程
env.process(process(env, 'Process 1'))
env.process(process(env, 'Process 2'))
# 运行模拟
env.run(until=10)
### 资源使用模式
python
import simpy
def customer(env, name, resource):
"""客户请求资源,使用它,然后释放。"""
with resource.request() as req:
yield req # 等待资源
print(f'{name} got resource at {env.now}')
yield env.timeout(3) # 使用资源
print(f'{name} released resource at {env.now}')
env = simpy.Environment()
server = simpy.Resource(env, capacity=1)
env.process(customer(env, 'Customer 1', server))
env.process(customer(env, 'Customer 2', server))
env.run()
## 核心概念
### 1. 环境