Есть ли в Pythons SimPy функциональность, позволяющая агентам обмениваться общими ресурсами?
В настоящее время я создаю модуль моделирования, содержащий несколько агентов и несколько ресурсов, и каждый агент может использовать ресурс. Агент также может запросить другой ресурс, но не освободит свой существующий ресурс, если сначала он не получит следующий.
Однако будут ситуации, когда все ресурсы используются, и единственный способ, которым агент может получить другой ресурс, будет для обмена с другим агентом, то есть агенту A требуется ресурс агента B, а агенту B требуется ресурс агента A. Кажется, я не могу найти никаких руководств / кода в SimPy, который поддерживает это.
Я добавлен пример кода ниже, чтобы проиллюстрировать это -> последний оператор печати никогда не достигается!
import simpy
def resource_user(env, user_id, res_1, res_2):
request_1 = res_1.request()
yield request_1
print(user_id, 'obtained access to first resource')
yield env.timeout(5)
# request res_2 and only release res_1 once we have access to res_2
request_2 = res_2.request()
yield request_2
yield res_1.release(request_1)
print(user_id, 'obtained access to second resource') ## This statement is never reached
env = simpy.Environment()
res_A = simpy.Resource(env, capacity=1)
res_B = simpy.Resource(env, capacity=1)
user = env.process(resource_user(env, 'user_1', res_A, res_B))
user = env.process(resource_user(env, 'user_2', res_B, res_A))
env.run(until=20)