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

Набор данных

AnyLogic позволяет сохранять данные по ходу работы модели с помощью специального элемента модели — набора данных. Набор данных представляет собой двумерный массив измерений (конечного размера). Каждое измерение, внесенное в набор данных, имеет два значения: x и y (типа double). Значение y обычно является значением наблюдаемой переменной модели.

В качестве X-значений набора данных вы можете использовать модельное время, т.e. связывать наблюдаемое значение с моментом времени, в который оно было измерено. Примерами таких величин могут быть длина очереди, координата машины, уровень жидкости и т.д. Такой набор данных называется временным.

Или же вы можете использовать в качестве X-значений набора данных другую наблюдаемую переменную, сохраняя таким образом данные о зависимости одного значения от другого — такие наборы данных называются фазовыми.

Обратите внимание, что добавление нового измерения в переполненный набор данных (который уже хранит максимально допустимое количество измерений) вызовет потерю самого старого измерения, хранимого в этом наборе данных, и если это значение было минимальным или максимальным, то вызовет заново процедуру поиска нового минимального/максимального значения, что может занять значительное время в случае наборов данных с большим количеством хранимых измерений. Поэтому в случае таких наборов данных рекомендуется задавать максимально допустимое количество измерений больше, чем фактическое количество измерений, которое будет добавлено в этот набор данных.

Набор данных не предоставляет средств для сбора статистической информации по собираемым данным (кроме как возможность узнать минимальное и максимальное из хранимых в данный момент значений (отдельно x- и y-значений)). Для этих целей используется объект Статистика.

Чтобы создать набор данных

  1. Перетащите элемент Набор данных из палитры Статистика в то место графического редактора, где вы хотите поместить набор данных.
  2. Перейдите в панель Свойства.
  3. Чтобы сделать набор данных временным, установите флажок Использовать время в качестве значения по оси X. Введите выражение, которое будет динамически вычисляться во время выполнения модели, чтобы получить новое значение набора данных, в поле Значение по оси Y.
  4. Чтобы сделать набор данных фазовым, сбросьте этот флажок и задайте выражения, вычисляющие как X-, так и Y-значения, в полях Значение по оси X и Значение по оси Y соответственно.
  5. Наборы данных могут иметь ограничение на максимальное количество последних измерений, которое будет храниться в наборе данных. Введите размер "хвоста" набора данных в поле Хранить до ... последних измерений.
Свойства

Имя — Имя набора данных. По этому имени набор данных будет доступен из кода.

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

Исключить — Если опция выбрана, то набор данных будет исключен из модели.

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

Использовать время в качестве значения по оси X — Если опция выбрана, то набор данных будет временным, т.e. при добавлении новых измерений в набор данных Y-значение будет вычисляться согласно заданному выражению Значение по оси Y, в то время, как X-значение этого измерения будет принимать текущее значение модельного времени. В противном случае (если эта опция не выбрана) набор данных будет фазовым, т.e. как X-, так и Y- значения будут вычисляться согласно заданным выражениям (Значение по оси X и Значение по оси Y соответственно).

Значение по оси X — [Виден, если сброшен флажок Использовать время в качестве значения по оси X] Выражение, которое будет динамически вычисляться во время выполнения модели, чтобы получить X-значение нового измерения, которое будет добавлено в фазовый набор данных.

Значение по оси Y — Выражение, которое будет динамически вычисляться во время выполнения модели, чтобы получить Y-значение нового измерения, которое будет добавлено в набор данных.

Хранить до ... последних измерений — Длина "хвоста" этого набора данных. Задает максимальное количество последних измерений, которое будет храниться в наборе данных.

Обновлять данные автоматически — Если опция выбрана, то новые значения будут добавляться в набор данных автоматически с периодичностью, указанной в поле Период. Так же здесь вы можете выбрать, хотите ли вы Использовать модельное время, чтобы задать Время первого обновления, или вы хотите Использовать календарные даты, чтобы задать Дату обновления.

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

Вести журнал в базе данных — Если опция выбрана, данные, собранные этим элементом, будут добавлены в журнал выполнения модели datasets_log (если в свойствах базы данных выбрана опция вести журналы).

Методы для работы с набором данных

Заполнение набора данных
Функция Описание
void add(double x, double y) Добавляет новую пару значений в набор данных.
void add(double y) Добавляет новое значение в набор данных. Метод поддерживается только теми наборами данных, у которых выбрана опция Использовать время (номер "прогона") в качестве значения по оси X. При вызове данного метода для других наборов данных во время выполнения модели будет выдано сообщение об ошибке.
void fillFrom(DataSet ds) Заполняет набор данных данными из набора ds.
void fillFrom(TableFunction tf) Удаляет все данные из набора данных, задает вместимость равной количеству записей в заданной табличной функции tf и заполняет набор данных данными из этой функции.
Извлечение данных
Функция Описание
double getXMin() Возвращает минимальное из всех хранимых в наборе данных значений x, или Double.POSITIVE_INFINITY, если набор не хранит ни одного значения.
double getXMax() Возвращает максимальное из всех хранимых в наборе данных значений x, или Double.NEGATIVE_INFINITY, если набор не хранит ни одного значения.
double getYMax() Возвращает максимальное из всех хранимых в наборе данных значений y, или Double.NEGATIVE_INFINITY, если набор не хранит ни одного значения.
double getYMin() Возвращает минимальное из всех хранимых в наборе данных значений y, или Double.POSITIVE_INFINITY, если набор не хранит ни одного значения.
double getX(int i) Возвращает x-значение элемента с заданным индексом i (индекс должен находиться в интервале 0..size()-1).
double getY(int i) Возвращает y-значение элемента с заданным индексом i (индекс должен находиться в интервале 0..size()-1).
int size() Возвращает количество элементов, хранимых в наборе данных.
Сброс данных
Функция Описание
void reset() Удаляет все хранимые в наборе данных данные, а также хранимые значения минимумов и максимумов.
Вместимость
Функция Описание
int getCapacity() Возвращает вместимость набора данных.
void setCapacity(int newcapacity) Задает для набора данных новую вместимость (newCapacity).
Дублирование значений
Функция Описание
void allowDuplicateX(boolean yes) Задает способ обработки двух последовательных вызовов метода add() с идентичными значениями X.

yes — если true, то в наборе данных будут создаваться две записи, иначе последующая запись будет перезаписывать предыдущую.
void allowDuplicateY(boolean yes) Задает способ обработки двух последовательных вызовов метода add() с идентичными значениями Y.

yes — если true, то в наборе данных будут создаваться две записи, иначе последующая запись будет перезаписывать предыдущую.
boolean duplicateXAllowed() Проверяет, допускается ли наличие в наборе данных элементов с одинаковыми значениями X. Если да, то возвращает true, если нет — то false.
boolean duplicateYAllowed() Проверяет, допускается ли наличие в наборе данных элементов с одинаковыми значениями Y. Если да, то возвращает true, если нет — то false.
Текстовое отображение
Функция Описание
String toString() Возвращает табулированное многострочное текстовое представление набора данных, содержащее не больше чем 1000 пар значений.
Как мы можем улучшить эту статью?