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

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

Подсчет элементов, удовлетворяющих конкретному условию

int count( коллекция, условие ) - Подсчитывает число элементов заданной коллекции, удовлетворяющих заданному условию.

Примеры:  count( people, p -> p.income > 10000 );

В этом примере мы ведем подсчет элементов коллекции people, доход income которых превышает 10000. В качестве первого аргумента функции мы указываем имя коллекции, относительно которой будем выполнять итерацию. В качестве второго аргумента, мы указываем условие, которое будет проверяться для каждого элемента. В условии мы сначала указываем локальную переменную (в нашем случае она называется p, но может называться как угодно), которую можем использовать для обращения к элементу, проверяемому в данный момент. После этого мы вставляем Java оператор ARROW -> (он состоит из двух символов) и определяем условие (содержащее локальную переменную p): p.income>10000. Функция count() выполняет итерацию по каждому элементу коллекции people и проверяет доход income для каждого элемента. Если уровень дохода отдельно взятого элемента превышает 10000 (результат вычисления заданного условия условие равен true), мы считаем этот элемент.

count( people, p -> p.sex == MALE && p.age >= 18);

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

Чтобы получить общее количество элементов, находящихся в данный момент в коллекции, необходимо вызвать функцию коллекции size(). Эта функция принадлежит коллекции people, поэтому вызывать ее нужно следующим образом: people.size();

Получение среднего значения (атрибуты элементов и т.д.) в коллекции

double average( коллекция, value ) - Возвращает среднее значение в коллекции.

Пример:  average( people, p -> p.income );

Здесь мы вычисляем средний доход income в коллекции people.

double averageWhere( коллекция, value, условие ) - Возвращает среднее арифметическое значений среди элементов коллекции, удовлетворяющих заданному условию.

Пример:  average( people, p -> p.income, p -> p.age > 18 );

Здесь мы вычисляем средний доход income у элементов старше 18 лет. Первый аргумент функции задает коллекцию people, второй определяет значение value (мы будет считать среднее значение value для всех элементов коллекции people), а третьим аргументом является условие: мы будем вычислять среднее значение только для тех элементов коллекции, которые этому условию удовлетворяют. Обратите внимание, что мы снова задаем локальную переменную p до того, как описать условие.

Получение минимального (максимального) значения в рамках коллекции

double max( коллекция, value ) - Возвращает максимальное значение в заданной коллекции.

double maxWhere( коллекция, value, условие ) - Возвращает максимальное значение в среди элементов коллекции, которые удовлетворяют заданному условию.

double min( коллекция, value ) - Возвращает минимальное значение среди элементов коллекции.

double minWhere( коллекция, value, условие ) - Возвращает минимальное значение среди элементов коллекции, которые удовлетворяют заданному условию.

Примеры:  maxWhere( people, p -> p.income );   В этом примере мы получаем максимальный доход income всех элементов коллекции.

maxWhere( people, p -> p.income, p -> p.sex == FEMALE );   В этом примере мы получаем максимальный доход income всех элементов женского пола в коллекции people.

Вычисление суммы значений элементов

double sum( коллекция, value ) - Возвращает сумму значений в заданной коллекции.

Пример:  sum( people, p -> p.income );   В этом примере мы вычисляем общий доход income всех элементов коллекции people.

double sumWhere( коллекция, value, условие ) - Возвращает сумму значений в элементов заданной коллекции, которые удовлетворяют заданному условию.

Пример:  sumWhere( people, p -> p.income, p -> p.age > 18 );   В этом примере мы вычисляем общий доход income взрослых (элементов старше 18 лет).