Что нового в AnyLogic 7.2? Встроенная база данных и её преимущества.

Здравствуйте!

Многие уже знают, что с выходом версии 7.2 модели AnyLogic обзавелись новым объектом — базой данных. Какие возможности это открывает разработчикам? Об этом и поговорим в сегодняшнем посте.

Встроенная БД будет полезна при работе с большим количеством внешних данных, которые используются для инициализации модели и параметризации различных характеристик. Можно выделить четыре основных преимущества:
  1. Встроенная база данных позволяет получать данные без промежуточных решений, таких как соединение с внешней базой или Excel-файлом. Все версии AnyLogic поддерживают работу со встроенной БД, включая бесплатную AnyLogic Personal Learning Edition.
  2. База данных позволяет визуализировать информационную структуру модели, представляя в табличном виде информацию о типах агентов и их зависимостях.
  3. База данных инкапсулирует все данные в одном месте, позволяя значительно облегчить конструкцию алгоритмов и эффективнее параметризовать модель.
  4. Наконец, база данных может хранить выходные данные модели, облегчая их экспорт и дальнейшую обработку.



Каждое из этих преимуществ имеет множество вариантов применения в моделях. Давайте рассмотрим каждое из них подробно. В конце мы посмотрим, как эффективно работать с графическим интерфейсом базы данных и её API, и как в дальнейшем мы планируем улучшать базу данных.

Как заполнять базу данных

Заполнение базы данных из Excel-файла или внешней БД — простая задача, которая выполняется в несколько кликов. Нужно выделить базу данных в дереве модели и кликнуть «Создать или импортировать таблицу…» в свойствах БД или в контекстном меню. Мастер импорта предложит выбрать файл и выведет список таблиц для импорта. Также можно создать пустую таблицу и скопировать данные из Excel привычным способом «Копировать-Вставить».



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

Прежде чем начать исследовать возможности базы данных, давайте посмотрим на способы взаимодействия с базой данных из модели. Доступ осуществляется при помощи запросов SQL или его реализации на Java (т.н. Query DSL). В большинстве случаев AnyLogic предлагает графический интерфейс для получения данных, и пользователю не приходится писать ни строчки кода. Например, если нужно заполнить популяцию, используя записи из таблицы БД, или задать прибытие агентов согласно таблице прибытий, то нужно лишь выбрать таблицу в свойствах объекта.



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



Начать изучение базы данных стоит с моделей-примеров: Справка – Примеры — Обучающие модели — Работа с базами данных.

Преимущества БД как источника данных для инициализации

Прежнее соединение с файлом Excel требовало написания Java-кода с указанием адреса ячейки на листе Excel. Например, если пользователь хотел заполнить популяцию агентами по таблице из Excel, то приходилось писать цикл с количеством строчек кода, равным числу параметров. Зачастую в моделях имелись целые плеяды функций, вызываемых на старте модели, исключительно с целью инициализации агентов.

Встроенная база данных позволяет полностью отказаться от такого подхода, освобождая пользователя от нужды писать рутинный код.



Теперь популяция заполняется в несколько кликов: нужно выбрать таблицу из базы данных и задать соответствие между именами параметров агента и именами колонок из таблицы. Одна колонка может быть использована для задания не только параметров, но и местоположения на ГИС-карте — нужно лишь передать в параметр “Расположение” название города. При инициализации популяции агенты автоматически появятся в соответствующем городе.

Создание типов агентов с помощью таблиц

Разработка агентных моделей зачастую начинается с определения свойств агентов и структуры их взаимодействия. База данных позволяет визуализировать этот процесс, поскольку каждая таблица может отображать тип агента. Как только таблица создана, нажмите на неё правой кнопкой мыши и выберите «Тип агента» — откроется соответствующий мастер, который учтёт тип и имена колонок в качестве параметров нового типа агента, а имя таблицы будет предложено в качестве имени самого типа агента.



Параметризация любых объектов

Большая часть объектов поддерживает инициализацию из базы данных — от параметров до событий. Щёлкните на синий знак равенства, чтобы перейти в режим запроса к базе данных: выберите таблицу, колонку со значениями и впишите условие, по которому будет выбрано значение из колонки.



Таким образом очень удобно заполнять коллекции, которым нужно лишь указать таблицу и колонку.



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



База данных может быть изменена во время выполнения модели с помощью запросов INSERT и UPDATE. С помощью таких запросов пользователь может организовать свои таблицы с выходными данными или обновлять текущие данные.

Автоматический сбор данных, гибкое логирование и автоматический экспорт

При включённом логировании база данных записывает в лог практически каждое действие в модели: отправление сообщений, пройдённое расстояние, использование ресурсов, переходы в диаграммах состояний и многое другое. Лог состоит из двух частей — таблиц с необработанными данными и их представлений (table view). Вы можете перенести представления лога в основную часть базы данных, нажав на кнопку «Создать редактируемую копию этого представления» в свойствах представления.

Представление — это удобная для анализа сводная таблица из одной или нескольких таблиц. Представление составляется при помощи SQL-запроса, который может быть изменен пользователем в поле «Задание представления».



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

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

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



Интерфейс таблиц и базы данных

Таблицы базы данных, аналогично таблицам Excel, поддерживают следующие операции:
  • Сортировка и фильтрация. Кликните на иконку стрелки под заголовком колонки, чтобы выбрать тип сортировки и настройки фильтра.
  • Таблицы можно группировать, структурируя дерево базы данных (таблицы с входными данными, таблицы с выходными данными и т.д.).
  • Колонки таблицы автоматически форматируются по ширине данных/заголовка, если дважды кликнуть на правую границу колонки.
  • Все ячейки таблицы можно выбрать, нажав Ctrl+A. Копирование и вставка осуществляются как через контекстное меню, так и по нажатию сочетания Ctrl+C / Ctrl+V.
  • Таблица поддерживает одновременное редактирование нескольких ячеек одной колонки: выделите нужные ячейки (зажав клавишу Shift или Ctrl) и нажмите F2.
  • Ячейки колонки, которой в качестве внешнего ключа указана колонка другой таблицы, позволяют выбрать значения из выпадающего списка (по двойному клику). Внешний ключ означает, что эта таблица связана с указанной таблицей, а соответствующая колонка обязана принимать значения из указанной колонки связанной таблицы. Ключевая колонка должна иметь только уникальные значения.
  • Две и более связанных таблиц позволяют создавать итоговые сводные таблицы в виде представления.



Типы данных, поддерживаемые базой данных, и продвинутое использование БД

База данных может хранить строки (String), целые/дробные числа (int, double), дату (Date), список вариантов (OptionList), логический тип (boolean) и специальный тип для хранения кода (Code). Данные, хранимые в таком типе, будут выполнены как обычной код. Это позволяет хранить в ячейке выражение для вычисления задержки в блоке Delay. Каждый раз для поступающей заявки будет вычисляться значение выражения triangular(3, 5, 7), uniform(5,10) или triangular(2, 4, 5), в зависимости от типа заявки.



Иногда нужно не только выполнить какое-либо выражение, но и прочитать некий объект, агента или параметр из базы данных (например, цвет какой-либо фигуры). В таком случае можно воспользоваться функцией executeExpression(Class<T> returnType, String code). Эта функция принимает в качестве аргумента строку и пытается выполнить эту строку как код, вернув значение указанного типа. То есть, если в ячейке таблицы задана строка «blue», то эта функция превратит строку в ссылку на соответствующий цвет.

База данных хранится в папке «database», которая находится в папке с файлом модели (файл .alp). Если вы делитесь с кем-то исходным кодом модели, которая инициализируется из базы данных, то не забудьте отправить эту папку.

База данных может быть открыта из других программ, например, из Microsoft SQL Server. Ссылку соединения можно получить, кликнув правой кнопкой мыши на иконку базы данных в дереве модели и выбрав соответствующую опцию.



Мы постоянно работаем над улучшением базы данных, её функциональности и удобства в использовании. Грядущее обновление AnyLogic будет поддерживать операции отмены/повторения изменений (undo-redo), автоматическое форматирование таблицы по ширине данных/заголовка. Также база будет быстрее и стабильнее работать с большими объёмами данных.

Надеюсь, этот пост окажется полезным для ваших проектов в AnyLogic. Буду рад получить вопросы и комментарии через форму обратной связи или на англоязычном форуме в LinkedIn.

В качестве наглядной демонстрации применения базы данных рекомендую посмотреть вебинар, посвящённый релизу AnyLogic 7.2.

Приятного моделирования!