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
Локальные переменные: ped - пешеход
                     ServiceUnit service - точка сервиса
Задержка на восстановление [динамический]
Время восстановления сервиса после обслуживания пешехода, в течение которого он остается недоступным.
Тип значения: double
Локальные переменные: ped - пешеход
                     ServiceUnit service - точка сервиса
Проходить в обратном направлении [динамический]
Если опция выбрана (true), то пешеход будет проходить через этот сервис в обратном направлении.
Тип значения: boolean
Локальная переменная: ped - пешеход.
Действия
При входе [код]
Код, который выполняется, когда пешеход поступает в объект.
Локальная переменная: ped - пешеход. 
При вставании в очередь [код]
Код, выполняемый, когда пешеход встает в очередь, и начинает свое ожидание в ней.
Локальные переменные: ped - пешеход, QueueUnit queue - очередь.
Перед окончанием ожидания в очереди [код]
Код, выполняемый, когда пешеход заканчивает свое ожидание в очереди и готов ее покинуть.
Локальные переменные: ped - пешеход, QueueUnit queue - очередь.
При выходе из очереди [код]
Код, выполняемый, когда пешеход заканчивает свое ожидание в очереди, и покидает ее.
Локальные переменные: ped - пешеход, QueueUnit queue - очередь.
При начале обслуживания [код]
Код, выполняемый, когда начинается обслуживание пешехода.
Локальные переменные: ped - пешеход, ServiceUnit service - фигура сервиса
При окончании обслуживания [код]
Код, выполняемый, когда заканчивается обслуживание пешехода, и он готов покинуть сервис.
Локальные переменные: ped - пешеход, ServiceUnit service - фигура сервиса
При выходе [код]
Код, который выполняется, когда пешеход покидает объект через порт out port (правильным способом).
Локальная переменная: ped - пешеход. 
При отмене [код]
Код, который выполняется, когда пешеход покидает объект через порт ccl (экстренным/аварийным способом).
Локальная переменная: ped - пешеход. 

Функции

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

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).