Simpy Запрос конкретного ресурса - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть ресурс с емкостью = 2, и оба слота имеют начальное значение в качестве атрибутов.Допустим, начальное значение установлено в 1 для обоих слотов.Теперь процессы запрашивают ресурс, и процессы могут иметь значение 1, 2, 3 или 4. Это значение процесса также является чем-то вроде атрибута.Теперь я хочу смоделировать то, что когда процесс запрашивает ресурс, он сначала сравнивает свое значение со значением двух слотов.Приоритет слота с тем же значением.Если ни один из слотов не имеет одинаковое значение, он выбирает случайным образом.После того, как процесс освобождает слот, значение слота изменяется, чтобы быть равным значению процесса.Моя идея состояла в том, чтобы использовать FilterStore и поместить Resource как элементы в хранилище.Но как мне установить атрибут для элементов и как я могу изменить атрибуты, как описано выше?Я надеюсь, что я описал мою проблему сообразно.Спасибо за любой вклад.

1 Ответ

0 голосов
/ 17 сентября 2018

Хорошо, вот небольшой код, который я использовал для своей проблемы. Сначала я определил свои ресурсы в классе, но затем изменил их и поместил ресурсы непосредственно в FilterStore.

import simpy

#class Pre_Assem:
#    def __init__(self, env, name, value):
#        self.nodes = simpy.Resource(env, capacity = 1) 
#        self.name = name
#        self.value = value

class Job:
    def __init__(self, env, name, release, value):
        self.env = env
        self.name = name
        self.release = release
        self.value = value


def Process(env, job, pre_assem):
    print('initial slot values: ', pre_assem.items)
    yield env.timeout(job.release)

    print('available slots before: ', pre_assem.capacity)
    request = yield pre_assem.get(lambda request: request['value'] == job.value) | pre_assem.get()
    print('available slots after: ', pre_assem.capacity)
    print('slot requested: ' , request)        

    print('slot is beeing used')
    yield env.timeout(10)
    print('slots after use: ', pre_assem.items)
    yield pre_assem.put({'value': job.value})
    print('new slots values: ', pre_assem.items)




env = simpy.Environment()
pre_assem = simpy.FilterStore(env, 2)

#preassem1 = Pre_Assem(env, 1, 1)
#preassem2 = Pre_Assem(env, 2, 1)
#pre_assem.items = [preassem1, preassem2]

pre_assem.put({'name':1, 'value':1})
pre_assem.put({'name':2, 'value':1})

jobs = [Job(env, 1, 0, 1),
        Job(env, 2, 0, 2), 
        Job(env, 3, 60, 3)]

for job in jobs:
    env.process(Process(env, job, pre_assem))
env.run()

Это работает, но не делает именно то, что я хочу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...