【问题标题】:Simpy - setting resource requests at specific timesSimpy - 在特定时间设置资源请求
【发布时间】:2020-08-25 05:04:26
【问题描述】:

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

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

因此,例如,如果原始进程从 t = 0.5 开始,则会有一堆东西立即排队,然后其他东西在 t = 1.5、2.5、3.5 等处排队。有谁对如何实现第二组请求有什么建议吗?

【问题讨论】:

    标签: python simpy


    【解决方案1】:

    在搜索了我能找到的所有示例后,我找到了一个解决方案。最终,它基于文档的Event Latency 示例中的想法。我认为我对简单语法的理解只需要赶上我想要做的事情。这是一个示例,它每 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
    """
    

    【讨论】:

      猜你喜欢
      • 2018-07-22
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 2014-07-02
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多