AnyLogic
Развернуть
Размер шрифта

PedService

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

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

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

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

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

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

  • Протяженный — этот сервис задается линией, вдоль которой должны передвигаться пешеходы. Пешеход начинает процедуру обслуживания в начальной точке линии и затем продвигается к ее конечной точке, из которой покидает сервис. Когда пешеход направляется к конкретному сервису, этот сервис назначается этому пешеходу и становится недоступным (занятым) для остальных пешеходов. Пешеход перемещается в начальную точку линии и начинается ожидать там в течение заданного времени обслуживания. Затем пешеход перемещается в конечную точку линии. Фаза восстановления сервиса начинается, когда пешеход заканчивает процедуру обслуживания (если ожидание выхода пешехода из сервиса отключено) или проходит конечную точку линии (если ожидание выхода пешехода из сервиса включено). Продолжительность фазы восстановления зависит от задержки восстановления. После восстановления сервис становится свободным и готов принимать новых пешеходов.
  • Точечный — этот сервис также задается линией, на которой должен находиться пешеход в течение времени обслуживания. Когда пешеход направляется к сервису, этот сервис назначается этому пешеходу и становится недоступным (занятым) для остальных пешеходов. Пешеход перемещается в случайно выбранную точку линии и начинает ожидать там в течение заданного времени обслуживания. Фаза восстановления сервиса начинается, когда пешеход заканчивает процедуру обслуживания. Продолжительность фазы восстановления зависит от задержки восстановления. После восстановления сервис становится свободным и готов принимать новых пешеходов.

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

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

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

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

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

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

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

Демо-модель: Service With Lines Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.

Параметры

Сервисы
Здесь нужно выбрать фигуру, задающую сервис. Это может быть как Сервис с очередями, так и Сервис с областью.
Синтаксис: 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 (правильным способом).
Локальная переменная: ped — пешеход
При отмене
Код, который выполняется, когда пешеход покидает блок через порт ccl (экстренным/аварийным способом).
Локальная переменная: ped — пешеход

Функции

Функция Описание
int queueSize(QueueUnit queueUnit) Возвращает количество пешеходов в указанной очереди.

queueUnit — очередь. Это может быть линия (класс очереди QueuePath), змейка (QueueSerpentine) или многоугольный узел (QueueArea), если она принадлежит сервису с областью.
Очередь должна принадлежать фигуре сервиса, указанной в параметре Сервисы этого блока PedService.
Или же вы можете узнать количество пешеходов в очереди другим способом, вызвав функцию size() нужной вам очереди, входящей в состав фигуры сервиса, например: queueLine.size()
long countPeds() Возвращает количество всех прошедших через блок пешеходов.
void cancel(Agent ped) Заставляет заданного пешехода немедленно покинуть блок через порт ccl. Для пешехода выполняется код параметра Действие при отмене.
void cancelAll() Заставляет всех пешеходов немедленно покинуть блок через порт ccl. Для каждого пешехода выполняется код параметра Действие при отмене.
boolean contains(Agent ped) Возвращает true, если заданный пешеход находится в данный момент внутри блока, иначе возвращает false.
Set<Agent> getPeds() Возвращает нередактируемую коллекцию, которая содержит пешеходов, находящихся в этом блоке.
int size() Возвращает количество пешеходов, находящихся в этом блоке.

Порты

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