"Weighting"用于进程的 SimPy 资源量



我想向SimPy中的资源发送订单,其中指定该资源将生产的产品数量。

我的问题是,当我发送100个数量的订单时,资源只用于1个订单,而不是用于100个数量。有没有办法在SimPy中建模?

我了解如何使用容器和商店而不是资源Resource,但对于我的大型应用程序,我希望这是一个资源,因为不同的产品库存水平将存储在Container水平。此资源将在多个产品之间共享。

这是我上面问题的模拟简单示例。谢谢!如果我可以添加plan_for_hour_x作为processing_capacity.request(plan_for_hour_x)的参数,那将解决我的问题,但这似乎是不可能的。

import simpy
env = simpy.Environment()
processing_capacity_per_hour = simpy.Resource(env, capacity=1000)
DEMAND_IN_HOUR_1 = 100
def production_plan(env, processing_capacity, plan_for_hour_x): 
yield env.timeout(1)
print(f'The current time is {env.now}')
with processing_capacity.request() as req:
yield req
print(f'Resources in use 1: {processing_capacity.count}')
yield env.timeout(1)

env.process(production_plan(env, 
processing_capacity_per_hour, 
DEMAND_IN_HOUR_1))
env.run(until=5)
print(f'The ending time is {env.now}')
>>> The current time is 1
>>> Resources in use 1: 1
>>> The ending time is 5

如果您想一次抓取100个资源,那么请执行以下操作

import simpy
from simpy.events import AllOf
env = simpy.Environment()
processing_capacity_per_hour = simpy.Resource(env, capacity=1000)
DEMAND_IN_HOUR_1 = 100
def production_plan(env, processing_capacity, plan_for_hour_x): 
yield env.timeout(1)
print(f'The current time is {env.now}')
req_list = [processing_capacity.request() for _ in range(plan_for_hour_x)]

yield AllOf(env, req_list)
print(f'Resources in use: {processing_capacity.count}')
yield env.timeout(1)
for req in req_list:
processing_capacity.release(req)
print(f'Resources in use: {processing_capacity.count}')

env.process(production_plan(env, 
processing_capacity_per_hour, 
DEMAND_IN_HOUR_1))
env.run(until=5)
print(f'The ending time is {env.now}')

这将打印

The current time is 1
Resources in use: 100
Resources in use: 0
The ending time is 5

,但听起来容器可能比资源

更好

最新更新