[ PROMPT_NODE_27422 ]
real-time
[ SKILL_DOCUMENTATION ]
# SimPy 实时模拟
本指南涵盖了 SimPy 中的实时模拟功能,其中模拟时间与挂钟时间同步。
## 概述
实时模拟将模拟时间与实际挂钟时间同步。这对于以下场景非常有用:
- **硬件在环 (HIL)** 测试
- 模拟中的**人机交互**
- 实时约束下的**算法行为分析**
- **系统集成**测试
- **演示**目的
## RealtimeEnvironment
使用 `simpy.rt.RealtimeEnvironment` 替换标准的 `Environment` 以启用实时同步。
### 基本用法
python
import simpy.rt
def process(env):
while True:
print(f'Tick at {env.now}')
yield env.timeout(1)
# 具有 1:1 时间映射的实时环境
env = simpy.rt.RealtimeEnvironment(factor=1.0)
env.process(process(env))
env.run(until=5)
### 构造函数参数
python
simpy.rt.RealtimeEnvironment(
initial_time=0, # 起始模拟时间
factor=1.0, # 每个模拟时间单位对应的实际时间
strict=True # 在时间违规时引发错误
)
## 使用因子进行时间缩放
`factor` 参数控制模拟时间如何映射到实际时间。
### 因子示例
python
import simpy.rt
import time
def timed_process(env, label):
start = time.time()
print(f'{label}: Starting at {env.now}')
yield env.timeout(2)
elapsed = time.time() - start
print(f'{label}: Completed at {env.now} (real time: {elapsed:.2f}s)')
# Factor = 1.0: 1 模拟时间单位 = 1 秒
print('Factor = 1.0 (2 sim units = 2 seconds)')
env = simpy.rt.RealtimeEnvironment(factor=1.0)
env.process(timed_process(env, 'Normal speed'))
env.run()
# Factor = 0.5: 1 模拟时间单位 = 0.5 秒
print('nFactor = 0.5 (2 sim units = 1 second)')
env = simpy.rt.RealtimeEnvironment(factor=0.5)
env.process(timed_process(env, 'Double speed'))
env.run()
# Factor = 2.0: 1 模拟时间单位 = 2 秒
print('nFactor = 2.0 (2 sim units = 4 seconds)')
env = simpy.rt.RealtimeEnvironment(factor=2.0)
env.process(timed_process(env, 'Half speed'))
env.run()
**因子解释:**
- `factor=1.0` → 1 个模拟时间单位耗时 1 个实际秒
- `factor=0.1` → 1 个模拟时间单位耗时 0.1 个实际秒(快 10 倍)
- `factor=60` → 1 个模拟时间单位耗时 60 个实际秒(1 分钟)
## 严格模式
### strict=True (默认)
如果计算超过分配的实际时间,则引发 `RuntimeError`