如何解决Simpy-在特定时间设置资源请求
我正在尝试对一个系统进行建模,在该系统中定义了一个流程之后,会有两组资源请求。在最初引入原始过程之后,立即请求一组新的资源请求。这很简单,并且可以通过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
"""
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。