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

Выбор случайного элемента

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

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

Функция Описание
Agent randomWhere( population, condition ) Возвращает одного случайно выбранного агента в заданной популяции, который удовлетворяет заданному условию. Если популяция пуста, или нет агента, удовлетворяющего заданному условию, функция вернет 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( population, condition, java.util.Random r ) Подобна randomWhere( population, condition ). Использует указанный нестандартный генератор случайных чисел для выбора агента.

Выбор случайного элемента из коллекции

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

randomWhere( people, p -> p.income > 10000 );
Функция Описание
randomWhere( collection, condition ) Возвращает один случайно выбранный элемент из заданной коллекции, который удовлетворяет заданному условию. Если коллекция пуста, или отсутствует элемент, удовлетворяющий заданному условию, функция вернет 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 );
randomWhere( collection, condition, java.util.Random r ) Подобна randomWhere( коллекция, условие ). Использует указанный нестандартный генератор случайных чисел для выбора элемента.

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

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

Функция Описание
T randomFrom( T[] array) Возвращает один случайно выбранный элемент массива (или null, если массив пустой). Вызов этого метода эквивалентен вызову следующей функции:
array[ uniform_discr( array.length - 1 ) ]
T randomFrom( T[] array, java.util.Random r) Подобна randomFrom( T[] array). Использует нестандартный генератор случайных чисел для выбора элемента.
T randomWhere( T[] array, condition ) Возвращает один случайно выбранный элемент из заданного массива, который удовлетворяет заданному условию. Если массив пуст, или отсутствует элемент, удовлетворяющий заданному(-ым) условию(-ям), функция вернет null.
T randomWhere( T[] array, condition, java.util.Random r ) Подобна randomWhere( T[] array, condition). Использует нестандартный генератор случайных чисел для выбора элемента.

Выбор случайного варианта из списка вариантов

Допустим, в вашей модели используется список вариантов Gender. Чтобы случайным образом выбрать один вариант из этого списка, используйте одну из следующих функций:

  • randomFrom( Gender.class );
  • Gender.random( this );

Создание случайного объекта из заданного списка объектов

AnyLogic предоставляет функции для создания случайного объекта из заданного списка объектов. Эти функции определены в классе UtilitiesCollection и являются глобальными (доступными из любой части модельного кода). Любую функцию из списка ниже можно вызвать, просто напечатав ее имя, без префикса с именем списка объектов.

Функция Описание
T randomlyCreate(java.util.function.Supplier<? extends T>... constructors) Возвращает случайный объект, созданный с помощью одного из предоставленных конструкторов, или null, если не предоставлено ни одного конструктора.

constructors — конструкторы или другие функции/лямбда-выражения, возвращающие объекты.
Пример: randomlyCreate( OpenCar::new, BoxCar::new, HopperCar::new );
T randomlyCreate(java.util.Random r, java.util.function.Supplier<? extends T>... constructors) Возвращает случайный объект, созданный с помощью одного из предоставленных конструкторов, или null, если не предоставлено ни одного конструктора. Использует нестандартный генератор случайных чисел для выбора конструктора.

r — нестандартный генератор случайных чисел;
constructors — конструкторы или другие функции/лямбда-выражения, возвращающие объекты.
Пример: randomlyCreate( myRandom, OpenCar::new, BoxCar::new, HopperCar::new );
T randomlyCreate(java.lang.Class<? extends T>... classes) Возвращает случайный объект одного из предоставленных классов, или null, если не предоставлено ни одного класса.

classes — классы объектов.
Пример: randomlyCreate( OpenCar.class, BoxCar.class, HopperCar.class );
T randomlyCreate(java.util.Random r, java.lang.Class<? extends T>... classes) Возвращает случайный объект одного из предоставленных классов, или null, если не предоставлено ни одного класса. Использует нестандартный генератор случайных чисел для выбора класса.

r — нестандартный генератор случайных чисел;
classes — классы объектов.

Пример: randomlyCreate( OpenCar.class, BoxCar.class, HopperCar.class );
Как мы можем улучшить эту статью?