AnyLogic поддерживает специальный тип функций — табличные функции. Табличная функция — это функция, заданная в табличной форме. Она может быть сделана непрерывной с помощью интерполяции и экстраполяции.
Табличные функции обычно используются для задания сложных нелинейных зависимостей, которые не могут быть описаны с помощью стандартных функций, или для приведения собранных с какой-то периодичностью и заданных в виде таблицы экспериментальных данных к непрерывному виду.
Табличная функция работает следующим образом: пользователь задает функцию путем задания пар значений (аргумент, значение), т.е. определенного количества базовых точек графика XY. Основываясь на этих данных и на выбранном типе интерполяции, AnyLogic строит табличную функцию.
Для того, чтобы получить значение, которое принимает табличная функция для заданного аргумента, вызовите табличную функцию (так же, как и обычную функцию) по ее имени, передав ей в качестве параметра значение аргумента. Если аргумент будет лежать за областью допустимых значений, то функция вернет значение в соответствии с заданным вами поведением (задается в свойстве функции Если аргумент выходит за пределы).
Чтобы задать табличную функцию
- Перетащите элемент Табличная функция из палитры Агент на диаграмму типа агентов (или эксперимента).
- Перейдите в панель Свойства и задайте свойства табличной функции.
- Введите имя функции в поле Имя.
-
Задайте данные табличной функции в секции Табличные данные. Есть три способа:
- Чтобы загрузить табличные данные из существующей базы данных Anylogic, выберите функцию Загружается из базы данных и выберите таблицу БД из раскрывающегося списка Таблица. В пункте свойств Условия выборки укажите условия, определяющие значение, которое будет выбрано из указанного столбца таблицы, если необходимо. Укажите столбцы таблиц базы данных в раскрывающихся списках опций Столбец с аргументами и Столбец значений.
- Если данные табличной функции уже заданы в другом файле или приложении, то вы можете скопировать их в буфер обмена, после чего вставить их в таблицу секции Табличные данные, нажав на кнопку Вставить из буфера. Предварительно необходимо снять флажок с опции Загружается из базы данных.
- Табличные данные можно также ввести вручную в таблицу (которая доступна в секции свойств Табличные данные, если не установлен флажок напротив опции Загружается из базы данных). Каждая пара Аргумент — Значение задается в отдельной строке таблицы. Чтобы задать новую пару значений, перейдите в последнюю строку таблицы и введите значение аргумента в ячейке Аргумент, а соответствующее этому аргументу значение функции — в ячейке Значение. Чтобы удалить пару значений, выберите соответствующий ряд таблицы и нажмите на кнопку Удалить. Вы можете отсортировать данные по аргументу (в возрастающем порядке) с помощью кнопки Сортировать .
- Выберите тип интерполяции функции из выпадающего списка Интерполяция.
- Выберите требуемый тип поведения функции при выходе аргумента за пределы заданного диапазона из выпадающего списка Если аргумент выходит за пределы.
График табличной функции вы можете увидеть в секции предварительного просмотра панели свойств этой функции. Красная область на этом графике обозначает область недопустимых значений функции.
- Основные свойства
-
Имя — Имя табличной функции.
Отображать имя — Если опция выбрана, то имя табличной функции будет отображаться в графическом редакторе.
Исключить — Если опция выбрана, то табличная функция будет исключена из модели.
Видимость — Если опция выбрана, то табличная функция будет отображаться на презентации во время выполнения модели.
Интерполяция — Тип интерполяции табличной функции:
Нет — Интерполяция не используется.
Ступенчатая — Ступенчатая интерполяция. Значение функции на интервале между двумя точками равно значению функции в точке с меньшим аргументом.
Линейная — Линейная интерполяция. Точки соединяются прямыми линиями.
Сплайн — Сплайн-интерполяция 4-го порядка. Точки соединяются полиномом четвертой степени. В каждой точке значения функции, а также первой и второй производных, должны быть равны слева и справа. Вторая производная в крайних точках должна быть равна нулю.
Аппроксимация — Функция будет аппроксимирована полиномом порядка, заданного в поле Порядок, у которого сумма среднеквадратичных погрешностей в точках минимальна.Если аргумент выходит за пределы — определяет, как ведет себя функция, если аргумент выходит за границы заданного диапазона:
Ошибка — Если аргумент будет лежать за пределами допустимой области, то будет показано сообщение об ошибке.
Ближайший — Для всех аргументов слева (справа) от допустимой области функция равна значению, которое она принимает в самой левой (правой) точке допустимой области.
Повторение — Функция делается периодической. Периодом функции будет являться ее диапазон значений.
Другой — Если аргумент будет лежать за пределами допустимой области, то табличная функция будет возвращать значение, заданное в соседнем с этой опцией поле Значение.
Экстраполяция — Функция экстраполируется за пределы области в соответствии с выбранным типом интерполяции. - Табличные данные
-
Загружается из базы данных — Позволяет загрузить данные из существующей базы данных AnyLogic, если опция отмечена.
Таблица — здесь необходимо указать существующую базу данных AnyLogic.
Условия выборки — здесь необходимо указать условие, определяющее значение, которое будет выбрано из указанного столбца таблицы. Вы можете добавить , дублировать , удалить и определить порядок условий ( , ).
Столбец с аргументами — определяет столбец с аргументами базы данных.
Столбец значений — определяет столбец значений базы данных.Таблица - здесь вы можете вручную задать данные табличной функции. Каждая пара Аргумент — Значение задается в отдельной строке таблицы. Вы можете добавить , удалить , определить порядок ( , ) пар значений, вставить их из буфера или скопировать в буфер.
- Предв. просмотр
-
Здесь вы можете увидеть график табличной функции. Красная область на этом графике обозначает область недопустимых значений функции.
- Специфические
-
Статическая — [Параметр доступен только в Режиме разработчика библиотек] Если опция выбрана, то функция будет статической, т.е. будет иметь одно и то же значение во всех имеющихся в модели экземплярах данного класса (например, во всех агентах популяции). Не используйте статические переменные, если вы планируете проводить сложный эксперимент (оптимизационный эксперимент, эксперимент варьирования параметров и т.д.), предусматривающий параллельное выполнение нескольких итераций на разных ядрах процессора (возможность параллельного выполнения итераций задается с помощью опции Разрешить параллельное выполнение итераций в настройках эксперимента)..
Уровень доступа — Уровень доступа к функции. Есть четыре уровня доступа:
private — функция доступна только из этого типа агентов
protected — функция доступна из этого типа агентов и его подклассов
default — функция доступна из любого места модели
public — функция доступна из всех открытых моделей.Единицы измерения (сист. динамика) — Если опция выбрана, то вы можете задать единицы измерения для возвращаемого функцией значения.
Для того, чтобы получить значение, которое принимает табличная функция для заданного аргумента, вызовите табличную функцию (так же, как и обычную функцию) по ее имени, передав ей в качестве параметра значение аргумента. Например, если в вашей модели есть табличная функция, названная lookup1, то для того, чтобы получить значение этой функции, соответствующее аргументу 5, вызовите метод:
lookup1(5);
Или же вы можете воспользоваться методом табличной функции get(double x). Для рассмотренного выше примера вызов функции должен быть следующим:
lookup1.get(5);
Обе эти функции идентичны. Они возвращают значение табличной функции, соответствующее аргументу x, полученное в соответствии с выбранным типом интерполяции и установленным характером обработки значений, выходящих за рамки области допустимых значений.
Если табличная функция поддерживает только дискретные значения, и в ее свойстве Если аргумент выходит за пределы выбрана опция Ошибка, то вызов такой функции с аргументом, не соответствующим ни одной записи в таблице Табличные данные, приведет к возникновению ошибки.
Табличная функция может быть интерполирована. Возможные типы интерполяции перечислены ниже:
Тип интерполяции | Описание и пример |
---|---|
Нет | Интерполяция не используется. |
Ступенчатая | Ступенчатая интерполяция. Значение функции на интервале между двумя точками равно значению функции в точке с меньшим аргументом. |
Линейная | Линейная интерполяция. Точки соединяются прямыми линиями. |
Сплайн | Сплайн-интерполяция 4-го порядка. Точки соединяются полиномом четвертой степени. В каждой точке значения функции, а также первой и второй производных, должны быть равны слева и справа. Вторая производная в крайних точках должна быть равна нулю. |
Аппроксимация | Функция будет аппроксимирована полиномом порядка, заданного в поле Порядок, у которого сумма среднеквадратичных погрешностей в точках минимальна. |
Если вы хотите получить плавную кривую, то лучше всего использовать сплайн-интерполяцию. Но помните, что она требует значительно большего времени на вычисление значений в точках по сравнению с линейной интерполяцией. Поэтому если непрерывность функции не требуется, то лучше пользоваться линейной интерполяцией.
Чтобы изменить тип интерполяции табличной функции
- Выберите табличную функцию в графическом редакторе или в панели Проекты.
- В панели свойств табличной функции выберите требуемый тип интерполяции из выпадающего списка Интерполяция.
Допустимой областью интерполированной табличной функции является диапазон ее аргументов, неинтерполированной — набор заданных аргументов. Вы должны определить, как должна себя вести функция в том случае, если ее аргумент выйдет за пределы допустимой области. Для этого вам будет нужно выбрать в свойстве табличной функции Если аргумент выходит за пределы один из перечисленных ниже вариантов ее поведения:
- Ошибка — Если аргумент будет лежать за пределами допустимой области, то будет показано сообщение об ошибке.
- Ближайший — Для всех аргументов слева (справа) от допустимой области функция равна значению, которое она принимает в самой левой (правой) точке допустимой области.
- Повторение — Функция делается периодической. Периодом функции будет являться ее диапазон значений.
- Другой — Если аргумент будет лежать за пределами допустимой области, то табличная функция будет возвращать значение, заданное в соседнем с этой опцией поле Значение.
- Экстраполяция — Функция экстраполируется за пределы области в соответствии с выбранным типом интерполяции.
Чтобы изменить поведение функции при выходе значения за пределы допустимой области
- Выберите табличную функцию в графическом редакторе или в панели Проекты.
- В панели свойств табличной функции выберите требуемый тип поведения функции из выпадающего списка Если аргумент выходит за пределы.
-
Как мы можем улучшить эту статью?
-