Simpy - 在特定时间设置资源请求

Simpy - setting resource requests at specific times

我正在尝试对一个系统建模,在该系统中,在定义了一个进程之后,有两组资源请求。在最初接收原始进程之后,立即请求一组新的资源请求。这很简单,可以使用 with resource.request() as req: yield req 类型的指令轻松完成。

我完全卡住的地方是第二组请求,需要定期安排,例如在流程实例化后的以下 10 个时间单位中的每一个。

因此,例如,如果原始进程在 t = 0.5 时开始,则会有一堆东西立即排队,但其他东西会在 t = 1.5、2.5、3.5 等时排队。有没有人对如何实施第二组请求有任何建议?

在搜索了我能找到的所有示例后,我找到了解决方案。最终,它基于文档 Event Latency 示例中的想法。我认为我对简单语法的理解只需要赶上我想做的事情。这是一个运行 returns 的示例,每 7 个时间步执行一次操作,同时还逐步执行另一个随机序列:

import simpy
import numpy as np
import random
random.seed(123)

env = simpy.Environment()

def roundup(x, b):
  """Round up x in base b""" 
  return b * np.ceil(x/b)

def stalling(env, base):
    """Something needs to get tasked repeatedly."""
    while True:
      yield env.timeout(max(0.01, roundup(env.now, base)-env.now))
      if env.now >= base:
        print("%.1f: New process called here" % env.now)
      yield(env.timeout(0.01))

def parent(env, base):
  env.process(stalling(env, base))
  while True:
    x = random.randint(1,10)
    print("%.1f: Wait for %i" % (env.now, x))
    yield(env.timeout(x))

env.process(parent(env, 7))
env.run(until = 50)
"""
0.0: Wait for 1
1.0: Wait for 5
6.0: Wait for 2
7.0: New process called here
8.0: Wait for 7
14.0: New process called here
15.0: Wait for 5
20.0: Wait for 2
21.0: New process called here
22.0: Wait for 1
23.0: Wait for 7
28.0: New process called here
30.0: Wait for 9
35.0: New process called here
39.0: Wait for 9
42.0: New process called here
48.0: Wait for 6
49.0: New process called here
"""