【发布时间】:2021-05-30 00:26:00
【问题描述】:
我正在使用带有 SimPy 4 的 python 3.7。我有 4 个容量为 5 的 Resources(比如“一级”),每个 Resource 都有一个关联的 Resource(比如“二级”)和一个容量为 1(因此,总共 4 个“一级”资源和 4 个“二级”资源)。当代理到达时,它会从“第一级”的任何Resource 请求一个Resource,当它访问它时,它会请求关联的“第二级”的Resource。
我正在使用AnyOf 选择任何“一级”资源。它有效,但我需要知道哪个代理选择了哪个资源。我该怎么做?
这是我目前所做的一个表示:
from simpy.events import AnyOf, Event
num_FL_Resources = 4
capacity_FL_Resources = 5
FL_Resources = [simpy.Resource(env, capacity = capacity_FL_Resources ) for i in range(num_FL_Resources)]
events = [FirstLevelResource.request() for FirstLevelResource in FL_Resources]
yield Anyof(env, events)
注意1:我没有在“一级”中使用Store或FilterStore,而是随机将代理放到可用的Store之一,因为代理不断出现并且所有Stores 可能正在使用中。他们需要排队。另外,请告诉我这里是否有使用Store 的好方法。
注意 2: Resource.users 给了我<Request() object at 0x...>,所以它没有帮助。
注意 3::我正在为“一级”和“二级”资源使用嵌套字典,如下所示。不过,为方便起见,我没有在此处添加较长的代码。
{'Resource1': {'FirstLevel1': <simpy.resources.resource.Resource at 0x121f45690>,
'SecondLevel1': <simpy.resources.resource.Resource at 0x121f45710>},
'Resource2': {'FirstLevel2': <simpy.resources.resource.Resource at 0x121f457d0>,
'SecondLevel2': <simpy.resources.resource.Resource at 0x121f458d0>},
'Resource3': {'FirstLevel3': <simpy.resources.resource.Resource at 0x121f459d0>,
'SecondLevel3': <simpy.resources.resource.Resource at 0x121f45a90>},
'Resource4': {'FirstLevel4': <simpy.resources.resource.Resource at 0x121f47750>,
'SecondLevel4': <simpy.resources.resource.Resource at 0x121f476d0>}}
【问题讨论】:
标签: python simulation simpy