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

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

Сборка групп

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

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

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

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

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

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

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

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

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

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

Демо модель: Pedestrian Groups

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

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

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

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

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

Методы для работы с группами

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

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

for (Ped ped : group) { }

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

int size() - Возвращает количество пешеходов в данной группе.

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

add( Agent ped ) - Добавляет заданного пешехода (ped) в эту группу.

remove( Agent ped ) - Удаляет заданного пешехода (ped) из этой группы.

Agent get( int index ) - Возвращает пешехода, который хранится в группе под заданным индексом index. Нумерация пешеходов в группе начинается с нуля 0; индекс лидера группы равен 0.

Agent getLeader()- Возвращает лидера группы. Обратите внимание, что лидер группы может поменяться в любой момент движения группы, поэтому пользователь не должен полностью полагаться на значение, возвращаемое этим методом. Примеры использования этого метода:
- действие, которое нужно произвести единожды для группы, например, когда объект PedGroupAssemble покидает пешеход, являющийся лидером группы: ped.getGroup().getLeader() == ped
- выбор группы путем выбора ее лидера: pedConfiguration.select(group.getLeader()

setFormation( GroupFormation formation ) - Задает новую форму для группы.

int getId() - Возвращает уникальный идентификатор группы.