ИНТЕГРАЦИЯ СИСТЕМЫ ANYLOGIC С ВНЕШНИМИ СИСТЕМАМИ

Интеграция системы AnyLogic с хранилищем данных

Для интеграции системы AnyLogic с многомерным информационным хранилищем можно использовать подход, описанный в книге [9], основанный на использовании технологии JDBC. В результате можно напрямую использовать 5(Я.-запросы в динамических переменных и функциях.

Например, следующий код на языке Java:

Y= Double.valueOf(database.getValue(“select KPI from tbll where ID_TIME=”+Double.toString(t) )).doubleValue(); t = Math.round(time());

выполняет инициализацию значений динамической переменной У значениями из столбца KPI таблицы tbll базы данных с внешним ключом ID TIME, значение которого совпадает со значением модельного времени t (табл. 9.1)

Таблица 9.1

Пример типовой таблицы исходных данных для модели, реализованной в системе AnyLogic

ID_TIME (модельное время t)

KPI (значения показателя модели)

1

11

2

21

3

16

т

18

Здесь функция Math.round(timeQ) возвращает значение модельного времени, округленное до ближайшего целого, функции Double.valueOf и .doubleValue() обеспечивают приведение результатов запроса к типу Double.

В то же время система AnyLogic имеет ряд элементов, облегчающих процедуру интеграции имитационной модели с внешними системами. Такие элементы доступны на вкладке Внешние данные и включают, в частности, следующие компоненты: База данных, Запрос {Query), Ключ-Значение, Вставка {Insert), Обновление {Update), Текстовый файл.

Среди данных компонентов важнейшим является компонент База данных. Он обеспечивает возможность интеграции системы AnyLogic с различными базами данных через технологию JDBC. Для работы компонента необходим драйвер JDBC.

В качестве такого драйвера можно использовать драйвер sun. jdbc.odbc.JdbcOdbcDriver при интеграции системы AnyLogic с произвольной базой данных через мост JDBC-ODBC или драйвер сот. microsoft.sqlsewer.jdbc.SQLSewerDnver при интеграции с MS SQL Sewer, а также другие jdhc- драй вера при их наличии.

На рис. 9.1 представлен пример настроек свойств компонента База данных для интеграции системы AnyLogic с MS SQL Sewer.

Настройка свойств компонента База данных для MS SQL Server

Рис. 9.1. Настройка свойств компонента База данных для MS SQL Server

Отметим, что для работы у’бйс-драйвера необходимо добавить данный драйвер непосредственно к проекту системы AnyLogic (исключение составляет интеграция с MS Excel/Access). Для этого нужно перейти к свойству «Зависимости» модели и добавить jar- файл к yar-файлам и папкам классов, требуемых для построения модели. В случае интеграции с MS SQL Sewer это файл sqljdbc4- 2.0.jar (или аналогичный).

Соединение с базой данных выполняется непосредственно при запуске модели (меню системы AnyLogic, Модель — Запустить), и в случае успеха выводится соответствующая информация либо сообщение об ошибке соединения.

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

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

void

myFunction(Database database, double t, z HyperArray) { int N = 2; //Длина размерности продукты for(int i=l; i<=N; i++)

{

z.set(Double.valueOf(database.getValue( “select KPI from tbll where ID_TIME=”+

Double.toString(t) + “ AND ID_PR=”+ Integer.toString(i))). doubleValue(), i);

}

}

Действие для циклического события Event myFunction{database, t,z).

Здесь t = Math.round(time()) — модельное время; database — имя объекта База данных; z — параметр модели, являющийся массивом типа HyperArray с размерностью Products типа «диапазон 1—2» (т.е. с двумя элементами); set {data, index) — функция, устанавливающая значение data для элемента index соответствующего параметра.

Структура таблицы фактов tb имеет следующий вид (табл. 9.2).

Таблица 9.2

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

ID_TIME

(модельное время t)

IDPR

(измерение «Продукты»)

KPI

(значение показателя)

0

1

21

1

1

45

2

1

56

3

1

56

0

2

22

1

2

35

2

2

61

3

2

456

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

void

myFunction2(Database database, double t, у HyperArray) { int N = 2; //Длина размерности продукты for(int i=l; i<=N; i++)

{

database.modify(

“insert into tbl2(ID_TIME, ID_PR, KPI) values(“+

Double.toString(t) + + Integer.toString(i)+”,“+ Double.toString(y.

get(i»+”)”);

}

}

Действие для однократно срабатывающего события Event 1: database.modify(«delete from tbl2»).

Действие для циклического события Event2: mvFunction2(t/«ta/w.ve, t> У)-

Здесь у = 2zProducts} — эндогенная переменная (также массив), значение которой нужно сохранить в хранилище данных; database.modify(5,(2Z.) — функция, обеспечивающего выполнение 5(Я.-запросов на модификацию (вставку, удаление, обновление) данных в базу данных; tbl'2 — вторая таблица фактов, используемая для хранения значений результатов моделирования.

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ     След >