Anylogic: Как заставить агента ждать в очереди, пока он не изменит состояние? (Блок-схема дискретных событий) - PullRequest
0 голосов
/ 30 октября 2019

Я начинаю использовать Anylogic для класса моделирования, и для этого мне нужно смоделировать следующее поведение: есть поток агентов, которые входят в очередь FIFO, а затем входят в сервер (который я смоделировал с задержкой). блок), по одному за раз. У агентов есть два состояния (назовите их A и B), и если агент достигает конца очереди в состоянии A, он должен ждать, пока не вернется в состояние B, чтобы войти в службу.

Iдумаю, что блок ожидания с емкостью для одного агента между очередью и блоком задержки может потенциально разрешить эту ситуацию. Но я не знаю, как заставить блок ожидания освободить агента, как только он изменит состояние.

Другие методы приветствуются. Мне просто нужно, чтобы агент был сохранен до блока задержки, пока он находится в состоянии A, но не дольше. Заранее спасибо.

1 Ответ

0 голосов
/ 30 октября 2019

Да ... блок ожидания с емкостью 1 после вашего блока очереди - это то, что я бы сделал.

Теперь, когда ваш агент входит в состояние, при действии ввода этого состоянияB вы делаете следующее:

if(currentBlock().equals(main.waitBlock) && main.service.size()==0){
    main.waitBlock.free(this); 
}

Вам также нужно будет сделать это во «вводе» блока ожидания:

if(agent.inState(agent.stateB) && service.size()==0){
    self.free(agent);
}

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

...