Набор данных

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-значение нового измерения, которое будет добавлено в набор данных.

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

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

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

Обновлять данные автоматически после каждого "прогона"/итерации - [Видно, если элемент находится на диаграмме эксперимента] - Если опция выбрана, то новые значения будут добавляться в набор данных после каждого "прогона"/итерации модели.

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

void add(double x, double y) - Добавляет новую пару значений в набор данных.

void add(double y) - Добавляет новое значение в набор данных. Метод поддерживается только теми наборами данных, у которых выбрана опция Использовать время (номер "прогона") в качестве значения по оси X. При вызове данного метода для других наборов данных во время выполнения модели будет выдано сообщение об ошибке.

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.

void fillFrom(DataSet ds) - Заполняет набор данных данными из набора ds.

void fillFrom(TableFunction tf) - Удаляет все данные из набора данных, задает вместимость равной количеству записей в заданной табличной функции tf и заполняет набор данных данными из этой функции.

int getCapacity() - Возвращает вместимость набора данных.

double getX(int i) - Возвращает x-значение элемента с заданным индексом i (индекс должен находиться в интервале 0..size()-1).

double getXMax() - Возвращает максимальное из всех хранимых в наборе данных значений x, или Double.NEGATIVE_INFINITY, если набор не хранит ни одного значения.

double getXMin() - Возвращает минимальное из всех хранимых в наборе данных значений x, или Double.POSITIVE_INFINITY, если набор не хранит ни одного значения.

double getY(int i) - Возвращает y-значение элемента с заданным индексом i (индекс должен находиться в интервале 0..size()-1).

double getYMax() - Возвращает максимальное из всех хранимых в наборе данных значений y, или Double.NEGATIVE_INFINITY, если набор не хранит ни одного значения.

double getYMin() - Возвращает минимальное из всех хранимых в наборе данных значений y, или Double.POSITIVE_INFINITY, если набор не хранит ни одного значения.

void reset() - Удаляет все хранимые в наборе данных данные, а также хранимые значения минимумов и максимумов.

void setCapacity(int newcapacity) - Задает для набора данных новую вместимость (newCapacity).

int size() - Возвращает количество элементов, хранимых в наборе данных.

String toString()- Возвращает табулированное многострочное текстовое представление набора данных, содержащее не больше чем 1000 пар значений.


См. также

 Обновление наборов данных

 Справочник классов: Класс DataSet