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

Выбор агента из популяции

AnyLogic предоставляет функции для выбора агента из заданной популяции.

Agent top(популяция, значение) — Возвращает агента с максимальным значением в заданной популяции.

Пример:

Person person = top(people, p -> p.age);

В этом примере мы получаем самого старого агента из популяции people. Если популяция не содержит агентов, функция вернет null.

List filter(популяция, условие) — Возвращает подмножество из указанной популяции: новый список агентов, удовлетворяющих заданному условию.

Примеры:

List women = filter(people, p -> p.gender == FEMALE);
List idleTrucks = filter(trucks, t -> t.inState(Idle));

List findAll(популяция, условие) — Функция, идентичная следующей: filter(популяция, условие)

Agent findFirst(популяция, условие)  — Возвращает первого агента из указанной популяции, для которого результат вычисления заданного условия равен true. Возвращает null, если такого элемента нет или коллекция пуста.

Пример:

Person person = findFirst(people, p -> p.age > 20);

Чтобы выбрать случайного агента из популяции

AnyLogic предоставляет функции для выбора случайного агента из заданной популяции. Эти функции определены в классе UtilitiesCollection и являются глобальными (доступными из любой части модельного кода). Любую функцию из списка ниже можно вызвать, просто напечатав ее имя, без префикса с именем популяции: randomWhere(people, p -> p.income > 10000);

Agent randomWhere(популяция, условие) — Возвращает одного случайно выбранного агента в заданной популяции, который удовлетворяет заданному условию. Если популяция пуста, или нет агента, удовлетворяющего заданному условию, функция вернет null.

Примеры:
Person wealthyPerson = randomWhere(people, p -> p.income > 10000);
Person wealthyMan = randomWhere(people, p -> p.income > 10000 && p.sex == MALE );

В этом примере мы проверяем два условия (используем логический оператор AND &&, чтобы указать AnyLogic, что результаты вычислений обоих заданных условий должны быть равны true). Функция возвращает случайно выбранного агента, удовлетворяющего обоим условиям.

Person wealthyYoungMan = randomWhere(people, p -> p.income > 10000 && p.sex == MALE && p.age < 21);

Также доступна другая функция, позволяющая использовать нестандартный генератор случайных чисел вместо используемого по умолчанию:

Agent randomWhere(популяция, условие, java.util.Random r) — Подобна randomWhere(популяция, условие). Использует указанный нестандартный генератор случайных чисел для выбора агента.

Как мы можем улучшить эту статью?