Освободить ресурс, когда агент не может выйти - PullRequest
0 голосов
/ 27 мая 2018

Я использую блок сборки для моделирования процесса сборки продукта.Этот сборочный блок помещает собранные продукты в очередь размером 1. Иногда случается, что эта очередь заполнена, когда сборочный блок завершает свой процесс, поэтому сборка ожидает, пока очередь не освободится.В течение этого времени ресурс все еще захватывается сборочным блоком и отображается как занятый.

Я хочу отобразить время простоя ресурсов, поэтому я хочу, чтобы сборочный блок завершил сборку, оставьте продукт на своем месте.и освободить ресурс, который не начнет другую сборку, пока его рабочее место снова не освободится.

Есть ли способ получить такое поведение?

1 Ответ

0 голосов
/ 28 мая 2018

Вот способ использования следующей структуры, где у вас есть блок ожидания перед входом каждого из типов деталей, которые будут составлять ваши продукты ... у вас также есть вспомогательная очередь после ассемблера и перед очередью, которую выупомянуто, что имеет размер 1 ... Я буду предполагать, что у вас есть только 1 ресурс, доступный, потому что иначе я думаю, что было бы бессмысленно иметь очередь размера 1, но вы можете расширить ее для использования большего количества ресурсов, если вам нужно,Блоки ожидания и блоки вспомогательной очереди имеют максимальную емкость:

model structure

Теперь создайте функцию startAssembly, которая будет выполнять следующие действия:

if(auxiliaryQueue.size()==0 && wait.size()>=assembler.quantity1 && wait1.size()>=assembler.quantity2 && resourcePool.idle()>0){
    for(int i=0;i<assembler.quantity1;i++)
        wait.free(wait.get(i));
    for(int i=0;i<assembler.quantity2;i++)
        wait1.free(wait1.get(i));
}

Эта функция запускает процесс сборки только в том случае, если ресурс свободен, если в очереди размера 1 нет продуктов и если частей достаточно для сборки продукта.

Вы будете называть этофункция в 3 разных местах с использованием startAssembly();

  1. при входе блока ассемблера
  2. при входе блока ожидания
  3. при входе вводаблока wait1
...