跳到主要内容
哒哒星球DADA PLANET

Skill · 已公开版本

simpy · 用 SimPy 模拟排队与资源调度

把流程建模为离散事件,比较不同资源配置下的等待时间、吞吐量和拥堵情况。

先看看示例

作者提供的示例,实际效果取决于你的输入和使用工具。

输入

两人同在0分钟到达;一个窗口;每人服务3分钟;仿真到7分钟。

输出

编辑示例 · 未运行

import simpy
env = simpy.Environment()
server = simpy.Resource(env, capacity=1)
waits = []
def visit():
    arrived = env.now
    with server.request() as request:
        yield request
        waits.append(env.now - arrived)
        yield env.timeout(3)
for _ in range(2):
    env.process(visit())
env.run(until=7)

手算核对目标:等待时间应为 [0, 3]

方法说明

把流程建模为离散事件,比较不同资源配置下的等待时间、吞吐量和拥堵情况。

具体任务

模拟窗口排队:用到达、服务与资源约束观察等待形成的过程。

比较资源配置:在同一假设下比较窗口数量,并记录未完成顾客和重复实验。

必需材料

到达与服务规则、时间单位

资源容量和终止时刻

可选材料

实测分布

随机种子与精度目标

使用门槛

了解离散事件和 Python 生成器;能解释模型省略了什么。

这个 Skill 额外提供的方法

把排队规则显式写进模型,便于检查资源竞争而不靠平均值猜测。

编辑示例(未运行)

两个顾客使用一个窗口

任务:编写一个有停止边界的最小排队模型

输入:
两人同在0分钟到达;一个窗口;每人服务3分钟;仿真到7分钟。

结果片段:
```python
import simpy
env = simpy.Environment()
server = simpy.Resource(env, capacity=1)
waits = []
def visit():
    arrived = env.now
    with server.request() as request:
        yield request
        waits.append(env.now - arrived)
        yield env.timeout(3)
for _ in range(2):
    env.process(visit())
env.run(until=7)
```

手算核对目标:等待时间应为 [0, 3]

以下为官方编辑构造的示例,未运行上游 Skill。代码为编辑样例未执行;确定性小模型便于先验证排队顺序,再增加随机性。

首次任务

任务:模拟窗口排队。
任务重点:用到达、服务与资源约束观察等待形成的过程。

必需材料:
- 到达与服务规则、时间单位:[填写或粘贴我的材料;未具备则说明]
- 资源容量和终止时刻:[填写或粘贴我的材料;未具备则说明]

可选补充:
- 实测分布:[可填写,未提供不应假定存在]
- 随机种子与精度目标:[可填写,未提供不应假定存在]

请交付适配现有环境的代码或配置、必要说明及验证办法。仅依据这些材料处理;缺少决定结果的信息时先说明缺口,不补造事实。未执行的检查、修改或外部操作明确标为未执行。

使用前提:了解离散事件和 Python 生成器;能解释模型省略了什么。
处理边界:仿真不能替代真实业务验证;必须限制时间、实体数与重复次数,统计推断需独立重复实验

验收要求:
1. 时间单位和终止边界明确。
2. 完成数与未完成数能对账。
3. 重复实验与种子可复现。

验收方法

时间单位和终止边界明确

完成数与未完成数能对账

重复实验与种子可复现

依赖与准备

Python 与 SimPy;固定源说明的配套 CLI 还要求 Python 3.10+、uv 和指定 SimPy 版本。

使用边界

仿真不能替代真实业务验证

必须限制时间、实体数与重复次数,统计推断需独立重复实验

排错

程序一直运行:检查无限到达循环并设实体数和运行时限。

均值看起来过于稳定:避免把同一轮相关顾客当成独立实验。

固定来源

https://github.com/K-Dense-AI/scientific-agent-skills/blob/065b734670d7d990627dbc06a05b5a99be33f1f1/skills/simpy/SKILL.md