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

Генератор случайных чисел

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

Чтобы задать начальное число для генератора случайных чисел

  1. Выберите нужный вам эксперимент в панели Проекты.
  2. Перейдите в секцию Случайность панели Свойства.
  3. Чтобы задать случайное начальное число, выберите опцию Случайное начальное число (уникальные "прогоны").
  4. Чтобы задать фиксированное начальное число, выберите опцию Фиксированное начальное число (воспроизводимые "прогоны") и введите значение начального числа в поле Начальное число.

Если на модель не оказывается никакого внешнего воздействия (пользователь не изменяет динамически значения параметров, данные не считываются из внешних источников данных и т.д.), то поведение модели в двух «прогонах» эксперимента с одним и тем же начальным значением генератора случайных чисел будет абсолютно идентичным. Генератор случайных чисел инициализируется однажды при создании модели. Между отдельными «прогонами» эксперимента повторная инициализация генератора не производится, его начальное число остается тем же, что было задано вначале.

В некоторых случаях модель может выдавать невоспроизводимые результаты даже при выбранной опции Фиксированное начальное число (воспроизводимые "прогоны"). Эти ситуации описаны здесь.

Получение генератора, используемого по умолчанию, с помощью кода

Вы можете получить генератор случайных чисел, который вероятностные распределения используют по умолчании, путем вызова функции java.util.Random getDefaultRandomGenerator(). Генератор случайных чисел по умолчанию используется, если при вызове функции вероятностного распределения явно не указан другой генератор.

Нестандартный генератор случайных чисел

По умолчанию все функции вероятностных распределений в AnyLogic, объекты Библиотеки моделирования процессов, случайно срабатывающие переходы и события, сам исполняющий модуль AnyLogic, и т.д. — одним словом, все источники случайности в AnyLogic используют для своих вычислений принятый в AnyLogic по умолчанию генератор случайных чисел (ГСЧ). Этот ГСЧ является экземпляром Java класса Random.

Если по каким-либо причинам вас не устраивает качество стандартного генератора Random, то вы можете:

  • Заменить используемый в AnyLogic по умолчанию генератор случайных чисел вашим собственным.
  • Создать несколько различных генераторов случайных чисел и явно задавать, какой из них вы хотите использовать, при вызове функций вероятностных распределений.

Чтобы заменить используемый по умолчанию генератор случайных чисел на другой

  1. Создайте ваш собственный генератор случайных чисел (ГСЧ). Это должен быть подкласс Java класса Random, например, MyRandom.
  2. Выберите эксперимент в панели Проекты и перейдите в секцию свойств Случайность.
  3. Выберите опцию Нестандартный генератор (подкласс класса Random) из группы кнопок Генератор случайных чисел и введите выражение, возвращающее экземпляр класса вашего генератора чисел, в расположенном справа поле, например:
    new MyRandom() или
    new MyRandom( 1234 )

Задание нестандартного генератора случайных чисел в качестве заданного по умолчанию ГСЧ

Инициализация выбранного по умолчанию ГСЧ (как поставляемого вместе с AnyLogic, так и вашего собственного) производится во время инициализации эксперимента и затем перед каждым «прогоном» модели.

Вы можете заменить используемый по умолчанию генератор другим, вызвав метод:

setDefaultRandomGenerator( java.util.Random r )

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

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

  1. Создайте и проинициализируйте экземпляр класса вашего ГСЧ. Например, это может быть простая переменная myRNG класса Random или его подкласса.
  2. При вызове функции распределения, передайте ссылку на ваш ГСЧ myRNG в качестве аргумента функции, например:
    uniform( myRNG ) или
    triangular( 5, 10, 25, myRNG )

Если у функции есть несколько различных нотаций с различными наборами параметров, то у некоторых из них может не быть варианта, позволяющего задавать нестандартный ГСЧ. Но такая нотация всегда есть у функции с наиболее полным набором параметров.

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