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

Группы пешеходов

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

Сборка групп

Группы могут формироваться блоками диаграммы процесса PedSource, PedEnter и PedGroupAssemble.

PedSource создает пешеходов, а также может использоваться и для сборки групп.

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

PedGroupAssemble формирует группы из последовательно поступающих во входной порт блока пешеходов. Также этот блок используется для повторной сборки групп, которые были разъединены блоками, не поддерживающими работу с группами пешеходов (например, PedService): в таком случае пешеходы ждут в заданной области и по прибытии всех членов группы вновь собираются в первоначальную группу.

Вы можете выбрать, хотите ли вы, чтобы группа собиралась:

  • по достижению заданного размера группы;
  • по истечению заданного времени создания группы;
  • по истечению максимально допустимого времени прихода пешеходов.

Изменение форм групп

Группа пешеходов может иметь одну из следующих форм: толпа, шеренга, цепочка.

Форма группы задается при формировании группы и может быть изменена впоследствии с помощью блока PedGroupChangeFormation. Этот блок изменяет форму группы на другую, заданную этим блоком. Форма группы будет изменена при прохождении через блок лидера этой группы.

Расформирование групп

Расформирование групп производится блоком диаграммы процесса PedGroupDisassemble. Группа будет расформирована при поступлении в блок ее лидера. При этом пешеходы станут независимыми и смогут двигаться каждый в свою сторону.

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

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

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

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

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

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

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

Социальная дистанция

Пешеходы внутри группы не соблюдают социальную дистанцию во время движения и ожидания в очередях или областях ожидания.

Группы и узлы с ограничением доступа

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

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

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

Функции для работы с группами

Группы пешеходов являются экземплярами класса Group. Вы можете программно работать с группами и их содержимым с помощью методов этого класса.

Чтобы итеративно пройти в цикле по всем пешеходам группы (и произвести над ними определенные действия), используйте цикл наподобие следующего:

for(Ped ped : group) { }

Также есть ряд функций для работы с содержимым группы пешеходов:

Доступ к группе и ее элементам
Функция Описание
Agent get(int index) Возвращает пешехода, который хранится в группе под заданным индексом index. Нумерация пешеходов в группе начинается с нуля 0; индекс лидера группы равен 0.
Agent getLeader() Возвращает лидера группы. Обратите внимание, что лидер группы может поменяться в любой момент движения группы, поэтому пользователь не должен полностью полагаться на значение, возвращаемое этим методом. Примеры использования этого метода:
  • действие, которое нужно произвести единожды для группы, например, когда блок PedGroupAssemble покидает пешеход, являющийся лидером группы: ped.getGroup().getLeader() == ped
  • выбор группы путем выбора ее лидера: pedConfiguration.select(group.getLeader()
int getId() Возвращает уникальный идентификатор группы.
Управление группами
Функция Описание
void setFormation(GroupFormation formation) Задает новую форму для группы.
void disassemble() Производит расформирование группы, удаляет всех пешеходов из группы, при этом пешеходы станут независимыми и смогут двигаться каждый в свою сторону. Группа уничтожается.
void add(Agent ped) Добавляет заданного пешехода (ped) в эту группу.
void remove(Agent ped) Удаляет заданного пешехода (ped) из этой группы.
Статистика
Функция Описание
int size() Возвращает количество пешеходов в данной группе.
Как мы можем улучшить эту статью?