PedService

Направляет поток пешеходов на обслуживание (выполнение заданных операций) в сервисе - это может быть покупка билета в кассе, прохождение через турникет, компостировка билета, прохождение паспортного контроля, и т.д. - любые операции, требующие единовременного доступа к определенному ресурсу, который в пешеходном моделировании называется сервисом.

Сервис задает группу одинаковых физических объектов обслуживания (например, несколько турникетов или автоматов по продаже билетов). Блок позволяет задавать очереди и сервисы в любой комбинации и задавать правила выбора сервисов – какую очередь выбрать, какой сервис выбрать, к какой очереди должен обращаться сервис, может ли сервис обслуживать несколько очередей и т.д.).

Существует два типа элементов разметки, которые вы можете использовать, чтобы задавать сервисы в пешеходных моделях:

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

Существует два типа сервисов:

Демо модель: Service With Lines

Обслуживание групп пешеходов

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

Первый случай - в очереди стоят все члены группы, все они и обслуживаются индивидуально, каждый покупая билет для себя.

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

Третий пример - билетная касса музея, к которой прибывает группа туристов. Зачастую у группы имеется гид, который для удобства и покупает билеты для всей группы, после чего распределяет билеты между своими экскурсантами. В этом случае туристическая группа обычно дожидается своего гида где-то в стороне от очереди. После получения билетов гид подходит к группе. После этого экскурсанты могут войти в музей.

Вы можете выбрать тот или иной тип поведения группы с помощью параметров Поведение группы задается - Поведение группы в сервисе (это возможно только для точечных сервисов, поскольку протяженные сервисы обычно подразумевают, что через них должны пройти все члены группы без исключения). Это можно сделать в том блоке, который создает эту группу - PedSource, PedEnter или PedGroupAssemble.

Более того, поведение одной и той же группы может меняться в зависимости от типа сервиса. Те же туристы, которые просто ждали в стороне от очереди в музей, пока их гид не приобретет для них билеты, при прохождении через турникет будут проходить его каждый отдельно. Поэтому в AnyLogic реализован гибкий способ задания режимов прохождения сервисов группами. Вы можете как выбрать режим при создании группы в блоке PedSource, PedEnter или PedGroupAssemble, так и выбирать, как группа проходит через сервис индивидуально в каждом блоке PedServices, моделирующем точку обслуживания пешеходов.

Демо модель: Group Behavior in Services

Параметры

Сервисы
Здесь нужно выбрать фигуру, задающую сервис. Это может быть как Сервис с очередями, так и Сервис с областью.
Синтаксис: ServiceBase services
Выбирается очередь
Правило выбора очереди – задает, должен ли пешеход выбрать Самую короткую очередь, Ближайшую, или Другую (в последнем случае очередь определяется индивидуально для каждого пешехода с помощью выражения, заданного в расположенном ниже поле Очередь).
Синтаксис: int queueChoicePolicy
Очередь [динамический]
[Виден, если параметр Выбирается очередь: Другая] Здесь вы можете задать выражение, которое будет возвращать ту очередь к сервису, которую данный пешеход выберет (возможно, в зависимости от своих свойств).
Тип значения: QueueUnit
Локальная переменная: ped - пешеход.
Время задержки [динамический]
Время обслуживания. Время, которое пешеход проводит в начальной точке протяженного сервиса, или в любой точке точечного сервиса.
Тип значения: double
Локальные переменные:
Задержка на восстановление [динамический]
Время восстановления сервиса после обслуживания пешехода, в течение которого он остается недоступным.
Тип значения: double
Локальные переменные:
Проходить в обратном направлении [динамический]
Если опция выбрана (true), то пешеход будет проходить через этот сервис в обратном направлении.
Тип значения: boolean
Локальная переменная: ped - пешеход.
Действия
При входе [код]
Код, который выполняется, когда пешеход поступает в блок.
Локальная переменная: ped - пешеход.
При вставании в очередь [код]
Код, выполняемый, когда пешеход встает в очередь и начинает свое ожидание в ней.
Локальные переменные:
Перед окончанием ожидания в очереди [код]
Код, выполняемый, когда пешеход заканчивает свое ожидание в очереди и готов ее покинуть.
Локальные переменные:
При выходе из очереди [код]
Код, выполняемый, когда пешеход заканчивает свое ожидание в очереди, и покидает ее.
Локальные переменные:
При начале обслуживания [код]
Код, выполняемый, когда начинается обслуживание пешехода.
Локальные переменные: ped
При окончании обслуживания [код]
Код, выполняемый, когда заканчивается обслуживание пешехода, и он готов покинуть сервис.
Локальные переменные:
При выходе [код]
Код, который выполняется, когда пешеход покидает блок через порт out (правильным способом).
Локальная переменная: ped - пешеход.
При отмене [код]
Код, который выполняется, когда пешеход покидает блок через порт ccl (экстренным/аварийным способом).
Локальная переменная: ped - пешеход.

Функции

long countPeds() - Возвращает количество всех прошедших через блок пешеходов.

int size() - Возвращает количество пешеходов, находящихся в этом блоке.

void cancel(Agent ped) - Заставляет заданного пешехода немедленно покинуть блок через порт ccl. Для пешехода выполняется код параметра Действие при отмене.

void cancelAll() - Заставляет всех пешеходов немедленно покинуть блок через порт ccl. Для каждого пешехода выполняется код параметра Действие при отмене.

int queueSize(QueueUnit queueUnit) - Возвращает количество пешеходов в очередях данного блока.

boolean contains(Agent ped) - Возвращает true, если заданный пешеход находится в данный момент внутри блока, иначе возвращает false.

Set<Agent>getPeds() - Возвращает нередактируемую коллекцию, которая содержит пешеходов, находящихся в этом блоке.

Порты

in
Входной порт.
out
Выходной порт, через который пешеходы покидают блок в случае успешного завершения команды.
ccl
Выходной порт, через который пешеходы покидают блок в случае события "отмены", которое возникло в результате вызова функции cancel() или функции cancelAll().