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

Табличная функция

AnyLogic поддерживает специальный тип функций — табличные функции. Табличная функция — это функция, заданная в табличной форме. Она может быть сделана непрерывной с помощью интерполяции и экстраполяции.

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

Табличная функция работает следующим образом: пользователь задает функцию путем задания пар значений (аргумент, значение), т.е. определенного количества базовых точек графика XY. Основываясь на этих данных и на выбранном типе интерполяции, AnyLogic строит табличную функцию.

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

Чтобы задать табличную функцию

  1. Перетащите элемент Табличная функция  из палитры Агент на диаграмму типа агентов (или эксперимента).
  2. Перейдите в панель Свойства и задайте свойства табличной функции.
  3. Введите имя функции в полеИмя.
  4. Задайте данные табличной функции в секцииТабличные данные. Есть три способа:
    • Чтобы загрузить табличные данные из существующей базы данных Anylogic, выберите функцию Загружается из базы данных и выберите таблицу БД из раскрывающегося списка Таблица. В пункте свойств Условия выборки укажите условия, определяющие значение, которое будет выбрано из указанного столбца таблицы, если необходимо. Укажите столбцы таблиц базы данных в раскрывающихся списках опций Столбец с аргументами и Столбец значений.
    • Если данные табличной функции уже заданы в другом файле или приложении, то вы можете скопировать их в буфер обмена, после чего вставить их в таблицу секции Табличные данные, нажав на кнопку  Вставить из буфера. Предварительно необходимо снять флажок с опции Загружается из базы данных.
    • Табличные данные можно также ввести вручную в таблицу (которая доступна в секции свойств Табличные данные, если не установлен флажок напротив опции Загружается из базы данных). Каждая параАргумент — Значение задается в отдельной строке таблицы. Чтобы задать новую пару значений, перейдите в последнюю строку таблицы и введите значение аргумента в ячейкеАргумент, а соответствующее этому аргументу значение функции - в ячейкеЗначение. Чтобы удалить пару значений, выберите соответствующий ряд таблицы и нажмите на кнопку Удалить. Вы можете отсортировать данные по аргументу (в возрастающем порядке) с помощью кнопкиСортировать .
  5. Выберите тип интерполяции функции из выпадающего спискаИнтерполяция.
  6. Выберите требуемый тип поведения функции при выходе аргумента за пределы заданного диапазона из выпадающего спискаЕсли аргумент выходит за пределы.

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

Свойства

Основные свойства

Имя — Имя табличной функции.

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

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

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

Интерполяция — Тип интерполяции табличной функции:

Нет — Интерполяция не используется.
Ступенчатая — Ступенчатая интерполяция. Значение функции на интервале между двумя точками равно значению функции в точке с меньшим аргументом.
Линейная — Линейная интерполяция. Точки соединяются прямыми линиями.
Сплайн — Сплайн-интерполяция 4-го порядка. Точки соединяются полиномом четвертой степени. В каждой точке значения функции, а также первой и второй производных, должны быть равны слева и справа. Вторая производная в крайних точках должна быть равна нулю.
Аппроксимация — Функция будет аппроксимирована полиномом порядка, заданного в полеПорядок, у которого сумма среднеквадратичных погрешностей в точках минимальна.

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

Ошибка — Если аргумент будет лежать за пределами допустимой области, то будет показано сообщение об ошибке.
Ближайший — Для всех аргументов слева (справа) от допустимой области функция равна значению, которое она принимает в самой левой (правой) точке допустимой области.
Повторение — Функция делается периодической. Периодом функции будет являться ее диапазон значений.
Другой — Если аргумент будет лежать за пределами допустимой области, то табличная функция будет возвращать значение, заданное в соседнем с этой опцией поле Значение.
Экстраполяция — Функция экстраполируется за пределы области в соответствии с выбранным типом интерполяции.
Табличные данные

Загружается из базы данных — Позволяет загрузить данные из существующей базы данных AnyLogic, если опция отмечена.

Таблица — здесь необходимо указать существующую базу данных AnyLogic.
Условия выборки — здесь необходимо указать условие, определяющее значение, которое будет выбрано из указанного столбца таблицы. Вы можете добавить , дублировать , удалить и определить порядок условий ( , ).
Столбец с аргументами — определяет столбец с аргументами базы данных.
Столбец значений — определяет столбец значений базы данных.

Таблица - здесь вы можете вручную задать данные табличной функции. Каждая пара Аргумент — Значение задается в отдельной строке таблицы. Вы можете добавить , удалить , определить порядок ( , ) пар значений, вставить их из буфера или скопировать в буфер.

Предв. просмотр

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

Специфические

Статическая — [Параметр доступен только в Режиме разработчика библиотек] Если опция выбрана, то функция будет статической, т.е. будет иметь одно и то же значение во всех имеющихся в модели экземплярах данного класса (например, во всех агентах популяции). Не используйте статические переменные, если вы планируете проводить сложный эксперимент (оптимизационный эксперимент, эксперимент варьирования параметров и т.д.), предусматривающий параллельное выполнение нескольких итераций на разных ядрах процессора (возможность параллельного выполнения итераций задается с помощью опции Разрешить параллельное выполнение итераций в настройках эксперимента)..

Уровень доступа — Уровень доступа к функции. Есть четыре уровня доступа:

private — функция доступна только из этого типа агентов
protected — функция доступна из этого типа агентов и его подклассов
default — функция доступна из любого места модели
public — функция доступна из всех открытых моделей.

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

Доступ к данным табличной функции

Для того, чтобы получить значение, которое принимает табличная функция для заданного аргумента, вызовите табличную функцию (так же, как и обычную функцию) по ее имени, передав ей в качестве параметра значение аргумента. Например, если в вашей модели есть табличная функция, названная lookup1, то для того, чтобы получить значение этой функции, соответствующее аргументу 5, вызовите метод:

lookup1(5);

Или же вы можете воспользоваться методом табличной функции get(double x). Для рассмотренного выше примера вызов функции должен быть следующим:

lookup1.get(5);

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

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

Интерполяция табличной функции

Табличная функция может быть интерполирована. Возможные типы интерполяции перечислены ниже:

Тип интерполяции Описание и пример
Нет Интерполяция не используется.

Ступенчатая Ступенчатая интерполяция. Значение функции на интервале между двумя точками равно значению функции в точке с меньшим аргументом.

Линейная Линейная интерполяция. Точки соединяются прямыми линиями.

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

Аппроксимация Функция будет аппроксимирована полиномом порядка, заданного в полеПорядок, у которого сумма среднеквадратичных погрешностей в точках минимальна.

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

Чтобы изменить тип интерполяции табличной функции

  1. Выберите табличную функцию в графическом редакторе или в панелиПроекты.
  2. В панели свойств табличной функции выберите требуемый тип интерполяции из выпадающего спискаИнтерполяция.

Поведение функции за пределами допустимой области

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

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

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

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