微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。