问题描述
我正在尝试对一个系统进行建模,在该系统中定义了一个流程之后,会有两组资源请求。在最初引入原始过程之后,立即请求一组新的资源请求。这很简单,并且可以通过with resource.request() as req: yield req
类型的指令轻松完成。
我完全陷入困境的是第二组请求,这些请求需要定期进行计划,例如,在实例化流程之后的以下10个时间单位中的每个时间。
因此,例如,如果原始过程在t = 0.5处开始,则会有一堆东西立即排队,但其他东西在t = 1.5、2.5、3.5等处排队。有人吗?对于如何实施第二组请求有什么建议?
解决方法
在搜寻所有可以找到的示例之后,我找到了解决方案。最终,它基于文档的Event Latency示例中找到的想法。我认为我对simpy语法的理解只需要赶上我想做的事情即可。这是一个示例,该示例每隔7个时间步长运行一次return,同时逐步执行另一个随机序列:
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
"""