AnyLogic 5 Discussion

Из объектов Enterprise Library создал такую цепочку: (Sourse - BatchQ - SelectOutput) - Lane - (Queue - Unbatch - Delay ) - Sink. Во время выполнения модели происходит следующее: заявки генерируются, собираются в партию, разделяются по условию, перемещаются, а на этапе извлечения из партии происходит остановка работы предыдущих блоков, затем извлечение и обработка заявок (включаются таймеры для каждой заявки) и лишь затем блоки (Sourse - BatchQ - SelectOutput) - Lane продолжают свою работу. Подскажите пожалуйста, каким образом сделать так, чтобы процессы генерации, сбора заявок в партию, их разделения по условию и транспортировка происходили одновременно с извлечением заявок из партии и т.д.?
Артем, поясните, что значит "происходит остановка работы"? Вы сами определяете процесс таким образом, чтобы работа останавливалась, или именно это вам и мешает?
Все дело в блоке Unbatch, ведь в процессе выполнения модели, когда начинается извлечение заявок из партии, останавливаются процессы генерации, сбора заявок в партию, их разделения по условию и транспортировки. Не могу понять, как сделать так чтобы все происходило одновременно? Ведь транспортировка останавливается, соответственно, и на анимации! А идея модели проста: на первом этапе происходит генерация заявок (вагонов), сбор их в партии (маршрутные поезда) и разделение на 2 направления, на втором этапе собранные партии (маршрутные поезда) перемещаются в другое место, на третьем - партии разделяются опять на отдельные заявки и обрабатываются.
Кстати, на этапе, когда заявки извлекаются из партии, происходит в прямом смысле остановка: время модели останавливается, происходят лишь изменения по шагам...
и еще вопрос: можно ли размер партии, генерируемой BatchQ сделать динамическим и подчинить, например, нормальному распределению?
Скорее всего, причина в обработке заявок в коде 'onEnter' и 'onExit' блока 'unbatch'. До тех пор пока она не завершится, модель не продолжит работу, так как выполнения кода "onExit" - это один модельный step. Если у Вас много заявок в партии, и обработка сложна (занимает заметное время), то это вполне может быть причиной описанного поведения. Размер партии, генерируемой блоком 'batchQ', возможно сделать динамическим. Для этого необходимо в поле 'onEnter' записать, например, следующий код: 'batchQ.set_size(uniform_discr(x,y));', где uniform_discr(x,y) - равномерное распределение, x и y - минимальное и максимальное значения размера партии соответственно. Также, вы можете использовать любое другое распределение, но при этом необходимо контролировать, чтобы размер партии был больше единицы.
Павел, спасибо за Ваши ответы! Код, динамически меняющий размер партии работает отлично! Но по блоку 'unbatch' вопрос так и остается. 'onEnter' и 'onExit' не содержат никакого кода, т.е., в принципе, там нечему выполняться. Но в момент, когда партия заявок поступает в этот блок, работа предыдущих блоков останавливается (как видно в окне отображения структуры, последовательно включаются таймеры) и, пока все заявки из партии не извлекутся, их состояние так и остается неизменным. В итоге же хочется получить, чтобы процессы формирования, доставки партий и расформирования их происходили одновременно!
Артем! Блок Unbatch последовательно разделяет заявку на несколько заявок и в соответствующем порядке выпускает их через порт к следующему блоку. Каждый выход заявки из блока - событие. С точки зрения моделирования процессы разделения и доставки партии происходят одновременно, потому как разделение партии занимает нулевое модельное время и в вашем случае, пожалуй, последовательность событий не так важна. Что касается торможения модели в момент разделения партии, то здесь, скорее всего, дело в большом количестве заявок внутри партии. Также, возможно, у вас включена опция "Обновлять окна автоматически" (Auto Refresh Views).
Виктор, спасибо за ответы! Формируемая партия состоит из, порядка, 40-50 заявок. Действительно, операция извлечения заявок из партии занимает нулевое модельное время, но т.к. в реальном времени на это уходит несколько секунд, то информативность анимации сильно страдает. Вот и хочу разобраться, может есть какой-то выход? С опцией "Обновлять окна автоматически" поэкспериментировал, все равно происходит остановка работы блоков, расположенных перед блоком Unbatch, на время извлечения заявок из партии.
Артем! Опция "Обновлять окна автоматически" необходима для того, чтобы включить/выключить постоянное обновление анимации и данных на структурных диаграммах модели. Обычно отключение этой опции решает подобные проблемы, однако, видимо, не в вашем случае. Я так понимаю, что под остановкой блоков понимается то, что заявки из партии извлекаются разом и между извлечением отдельных заявок не может происходить других событий. Такова реализация библиотеки. Впрочем, если вас беспокоит не этот факт, а то, что происходит замедление модели, я советую отправить модель в службу поддержки XJ.
Виктор! Большое спасибо за Ваши пояснения, постараюсь отправить модель в службу поддержки, как только она примет какие-то очертания законченности!