Python SimPy: Обмен ресурсами между агентами - PullRequest
0 голосов
/ 05 мая 2020

Есть ли в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...