Пользователи AnyLogic могут не только использовать любое из поддерживаемых распределений вероятности, но и задать эмпирические (нестандартные) распределения вероятности, основываясь на имеющейся у вас выборке (выборочной совокупности).
Получать случайные значения согласно заданному в модели эмпирическому распределению можно, вызвав функцию с тем же именем, что и это распределение, например: myDistribution().
Чтобы задать эмпирическое распределение
-
Перетащите элемент
Эмпирическое распределение из палитры Агент на графическую диаграмму агента.
- Перейдите в свойства элемента, чтобы ввести данные и таким образом построить распределение.
- Сначала выберите Тип распределения из доступных: Непрерывное, Дискретное или Значение. Под Типом подразумевается тип значений, возвращаемых распределением. Тип Значение подразумевает задание вероятностей для каждой альтернативной опции выбранного Списка вариантов.
- Задайте данные эмпирического распределения в секции Данные одним из способов:
Чтобы загрузить данные из существующей базы данных Anylogic, выберите опцию Загружается из базы данных и выберите таблицу БД из раскрывающегося списка Таблица. Если необходимо, укажите в пункте свойств Условия выборки условия, определяющие значения, которые будут выбраны из указанного столбца таблицы. В расположенных ниже свойствах задайте столбцы таблицы БД, содержащие требуемые данные (в соответствии с типом распределения, см. ниже).
Если данные уже заданы в другом файле или приложении, то вы можете скопировать их в буфер обмена, после чего вставить их в таблицу секции Данные, нажав на кнопкуВставить из буфера. Предварительно необходимо снять флажок с опции Загружается из базы данных.
Табличные данные можно также ввести вручную в таблицу (которая доступна в секции свойств Данные, если не установлен флажок напротив опции Загружается из базы данных). Чтобы удалить запись, выберите соответствующий ряд таблицы и нажмите на кнопкуУдалить. Используйте кнопки
и
, чтобы изменить порядок данных в таблице (эти кнопки доступны, если в опции Режим задания выбран вариант Частотная таблица или Набор наблюдений). Данные для различных типов эмпирического распределения задаются различными способами. Мы описали эти способы в следующих разделах:
- Общие свойства
-
Имя — Имя эмпирического распределения. Имя используется для идентификации распределения. Вы можете вызывать распределение как функцию, например: myDistribution().
Отображать имя — Если опция выбрана, то имя распределения будет отображаться в графическом редакторе.
Исключить — Если опция выбрана, то распределение будет исключено из модели.
Видимость — Здесь вы можете указать, будет ли распределение видно на анимации во время выполнения модели. Используя элемент управления, выберите да или нет.
Тип — Тип значений, возвращаемых распределением:
Непрерывное — Распределение возвращает данные непрерывного типа.
Дискретное — Распределение возвращает данные дискретного типа.
Значения — Позволяет задавать вероятности для каждой альтернативной опции выбранного Списка вариантов.Режим задания — [Параметр виден, если для параметра Тип выбрана опция Непрерывное или Дискретное] Укажите, каким образом будет задаваться распределение:
Интервалы — Распределение задается с помощью интервалов.
Частотная таблица — [Опция доступна, если в параметре Тип выбрана опция Непрерывное]. Распределение задается с помощью частотной таблицы.
Набор наблюдений — Вы загружаете наблюдаемые значения как они есть.
Список вариантов — [Параметр виден, если для параметра Тип выбрана опция Значение] Здесь вы можете выбрать список вариантов для эмпирического распределения. Распределение будет задавать вероятности для каждой опции данного списка. - Данные
-
Здесь вы можете задать данные для эмпирического распределения. Данные могут задаваться в таблице (см. инструкции ниже) или загружаться из базы данных AnyLogic.
Загружается из базы данных - Если выбрана эта опция, данные можно загружать из существующей базы данных AnyLogic, заданной пользователем.
Таблица — Здесь вы можете выбрать таблицу с необходимыми данными из базы данных AnyLogic.
Условия выборки — Здесь вы можете задать одно или несколько условий, с помощью которых из заданных табличных столбцов будут выбираться конкретные значения. Вы можете добавлять
, копировать
, удалять
и менять местами условия (
,
).
Столбец значений — [Опция доступна, если для параметра Режим задания выбрана опция Частотная таблица или Набор наблюдений] Столбец таблицы БД, который содержит значения.
Столбец весов — [Опция доступна, если для параметра Режим задания выбрана опция Частотная таблица] Вероятности для соответствующих значений в Столбце значений.
Начальный столбец — [Опция доступна, если для параметра Режим задания выбрана опция Интервалы] Столбец таблицы БД, содержащий значения, с которых начинаются интервалы данных.
Конечный столбец — [Опция доступна, если для параметра Режим задания выбрана опция Интервалы] Столбец таблицы БД, содержащий значения, которыми завершаются интервалы данных.
Столбец с вариантами — [Опция доступна, если для параметра Тип выбрана опция Значение] Столбец таблицы БД, содержащий варианты Списка вариантов. Типом данного столбца должен быть тот же список вариантов, который вы задали в параметре Список вариантов этого эмпирического распределения.
Столбец с кол-вом измерений — [Опция доступна, если для параметра Режим задания выбрана опция Интервалы или для параметра Тип выбрана опция Значение] Столбец таблицы БД, содержащий данные (количество наблюдаемых значений для соответствующих интервалов или для вариантов из списка вариантов). Этот столбец должен содержать только численные величины.
- Предв. просмотр
-
Здесь отображается предварительная версия вашего эмпирического распределения.
- Специфические
-
Статический — [Параметр доступен только в Режиме разработчика библиотек] Если эта опция выбрана, эмпирическое распределение становится статическим. Статическое распределение инициализируется один раз и содержит одни и те же данные для всех экземпляров данного типа агента. Это очень удобно при работе с агентными моделями, если для ваших агентов заданы какие-то распределения. Объявив эмпирическое распределение статическим, мы избегаем потерь времени, которое тратилось бы исполняющим модулем AnyLogic на многократную инициализацию распределения для многих агентов.
Не используйте статическое эмпирическое распределение, если вы собираетесь параллельно выполнять итерации сложных экспериментов (оптимизация, варьирование параметров и т.д.) на разных ядрах процессора (это задается параметром Разрешить параллельное выполнение итераций в разделе свойств эксперимента Специфические).Данные статического эмпирического распределения не сохраняются в файл состояния модели при сохранении / восстановлении состояния выполняемой модели. Если вы не меняете данные статического эмпирического распределения в вашей модели, состояние восстановленной модели будет идентично тому состоянию, которое вы сохранили в файл состояния модели. При этом, если вы как-то изменили данные статического эмпирического распределения (например, в коде При запуске, заданном в свойствах агента), измененные данные не сохранятся в файл состояния модели и состояние восстановленной модели будет отличаться от состояния модели, которое вы сохранили до этого.
Существует два способа задания данных для дискретного типа распределения. Выбрать способ можно в параметре Режим задания в панели Свойства эмпирического распределения.
Интервалы. Вы задаете интервалы и вероятности (вес) для этих интервалов.
Дискретный тип распределения, заданный с помощью Интервалов
Набор наблюдений. Этот способ позволяет загрузить данные наблюдений, как они есть. Частотность каждого конкретного значения зависит от того, сколько раз данное значение встречается в таблице (т.е. сколько раз данное значение наблюдалось). Используйте этот способ, если у вас есть таблица с данными наблюдений. Проще всего загрузить данные в модель следующим образом: скопируйте их в буфер обмена из исходного файла или программы с данными, а затем вставьте в AnyLogic, нажав на кнопку Вставить из буфера обмена, расположенную под таблицей в секции свойств Данные.
Откройте секцию свойств Предв. просмотр, чтобы увидеть предварительную версию распределения, построенного на основе данных, которые вы загрузили.
Дискретный тип распределения, где данные заданы с помощью Набора наблюдений.
Секции Данные и Предв. просмотр.
Существует три способа задать данные для непрерывного типа распределения:
Интервалы. Вы задаете интервалы и вероятности (веса) для этих интервалов. Интервалы должны следовать друг за другом.
Частотная таблица. Здесь вы задаете значения в первом столбце таблицы и соответствующие веса во втором столбце.
Есть три типа Интерполяции: Нет, Линейный, Шаг.
Если выбрана опция Нет, вы задаете отдельные взвешенные значения.
Если выбрана опция Шаг, вы задаете данные по тому же принципу, что и в режиме Интервалы.
Если выбрана опция Линейный, вы задаете интервалы со спадом.
Непрерывный тип распределения, где данные заданы с помощью Частотной таблицы с Линейным типом Интерполяции.
В секции Предв. просмотр вы можете увидеть интервалы со спадом.
Набор наблюдений. Этот способ позволяет загрузить данные наблюдений как они есть. Частотность каждого конкретного значения зависит от того, сколько раз данное значение встречается в таблице (т.е. сколько раз данное значение наблюдалось). Используйте этот способ, если у вас есть таблица с данными наблюдений. Проще всего загрузить данные в модель следующим образом: скопируйте их в буфер обмена из исходного файла или программы с данными, а затем вставьте в AnyLogic, нажав на кнопку Вставить из буфера обмена, расположенную под таблицей в секции свойств Данные.
Используйте опцию Значения, чтобы задать вероятности для альтернативных вариантов из выбранного Списка вариантов.
На рисунке ниже представлен пример распределения, задающего вероятности для вариантов Мужской и Женский из списка вариантов Пол.
AnyLogic предлагает три конструктора для создания эмпирических распределений (класс CustomDistribution):
- CustomDistribution(double[] observations) — создает эмпирическое распределение вероятности на основании полученных в результате наблюдений данных (набор измерений - вещественных чисел observations).
- CustomDistribution(int[] observations) — то же самое для случая целочисленных измерений.
- CustomDistribution(double[] intervalstarts, int[] nobservations) — создает эмпирическое распределение вероятности по заданной гистограмме. Гистограмма должна задаваться в форме двух массивов: точки начал интервалов, последним значением задана конечная точка последнего интервала (intervalstarts), и количество наблюдений в каждом таком интервале (nobservations). Второй массив должен хранить на один элемент меньше, чем первый, или содержать 0 в качестве значения последнего элемента.
-
Как мы можем улучшить эту статью?
-