УДК 519.8
ИНТЕГРАЦИЯ В СУБД POSTGRESQL БИБЛИОТЕКИ LP_SOLVE
ДЛЯ РЕШЕНИЯ ЗАДАЧИ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ
А. Ю. Постойко Научный руководитель - Е. П. Моргунов
Сибирский государственный университет науки и технологий имени академика М. Ф. Решетнева Российская Федерация, 660037, г. Красноярск, просп. им. газ. «Красноярский рабочий», 31
E-mail: postoiko.anastasya@yandex.ru
Реализована интеграция в СУБД PostgreSQL свободной библиотеки lpsolve, предназначенной для решения задачи линейного программирования. Это расширит возможности данной СУБД и позволит в дальнейшем интегрировать в нее метод DataEnvelopmentAnalysis (DEA), предназначенный для оценки эффективности систем.
Ключевые слова: метод DEA, СУБД PostgreSQL, библиотека lpsolve, линейное программирование, эффективность систем.
INTEGRATION OF LINEAR PROGRAMMING LIBRARY LP_SOLVE
INTO POSTGRESQL
A. Y. Postoyko Scientific Supervisor - E. P. Morgunov
Reshetnev Siberian State University of Science and Technology 31, Krasnoyarsky Rabochy Av., Krasnoyarsk, 660037, Russian Federation E-mail: postoiko.anastasya@yandex.ru
Integration of Open-Source Linear Programming Solver lpsolve is implemented into PostgreSQL. It will expand the capabilities of this Database Management System and will allow subsequently to integrateData Envelopment Analysis (DEA) method, designed to assess the efficiency of systems.
Keywords: Method DEA, PostgreSQL, lpsolve, Linear Programming Solver, efficiency of systems.
В настоящее время метод DEA, предназначенный для оценки эффективности систем, широко используется, поэтому его интеграция в СУБД PostgreSQL представляется целесообразной. Данный метод является эффективным инструментом, который может быть использован в области информационных технологий. В основе метода DEA лежит решение задачи линейного программирования. Данный метод предоставляет информацию компактно, не упуская важных деталей [1].
На начальном этапе разработкиDEA-расширения программисты могут использовать готовые библиотеки, служащие для решения задачи линейного программирования. Поэтому в качестве первого шага осуществлена интеграция в СУБД PostgreSQL свободной библиотеки lp_solve.
Библиотека lp_solve - открытое программное обеспечение (лицензия GNULGPL - Lesser General Public License) для решения задачи линейного программирования. Библиотека lp_solve имеет IDE (Integrated Development Environment), собственный CAPI (Application Programming Interface) и множество других программных интерфейсов [2].
lp_solve - это библиотека, которую можно вызвать из программы, написанной практически на любом языке программирования, для решения проблем MILP (MixedIntegerLinearProgramming).
Существует несколько способов передачи данных в библиотеку:
- через API;
Актуальные проблемы авиации и космонавтики - 2019. Том 2
- через входные файлы;
- спомощью средыГОЕ.
В данном случаеиспользуется передача данных черезАР1.
Продемонстрируем технологию создания расширения PostgreSQL на примере библиотеки функций для вычисления параметров круга. Сначала выполняется компиляцияисходных модулей, создается разделяемая библиотека, которая копируется в системный каталог PostgreSQL. Затем с помощью команды CREATEFUNCTION создаются функции, встроенные в СУБД[3].
Для использования встроенных функций необходимо выполнить запрос SELECT. Запрос и результат его работы представлены на рис. 1.
test=# select radius, circle_area( circles ) from circles
radius I circle_area
--------+------------------
1 I 3.14159274101257
2 I 12.5663709640503
3 I 28.2743339538574 (3 строки)
test=# select radius, circle_len( radius ) from circles;
radius I circle_len
--------+------------------
1 I 6.28318548202515
2 I 12.5663709640503
3 I 18.8495559692383 (3 строки)
test=# select circle_len( 5 ); circle len
31.4159259796143 (1 строка)
Рис. 2. Запрос и результат его работы
На данном этапе целевая функция и ограничения помещаются в таблицы базы данных. Для формирования структуры данных в формате, требуемом библиотеке lp_solve, используются функции, входящие в состав ее API.
Для интеграции библиотеки (в данном случае liblpsolve55.so) в PostgreSQL, ее необходимо поместить в системный каталог и выполнить команду ldconfig. Данная утилита включит имя liblpsolve55.so в список библиотек, доступных для загрузки.
Для вызова функции используется команда SELECT. Результат решения сохраняется в базе данных.
На рис. 2 представлен результат работы функции lp, решающей задачу максимизации целевой функции, с двумя ограничениями.
test=# Select lp();
ИНФОРМАЦИЯ: LP: opt_type: max, num_vars: 3, num_constrs: 2, description: H. Taha,
8th ed. P. 111, Problem set 3.4B, task 5
ИНФОРМАЦИЯ 1 = 1, J = 1, aij = 2 000000
ИНФОРМАЦИЯ 1 = 1, j = 2, ai j =1 000000
ИНФОРМАЦИЯ 1 = 1, j = 3, aij =1 000000
ИНФОРМАЦИЯ 1 = 2, J = 1, aij = 3 000000
ИНФОРМАЦИЯ 1 = 2, j = 2, aij = 4 000000
ИНФОРМАЦИЯ 1 - 2, J = Э, aij - 2 000000
ИНФОРМАЦИЯ j = 1, CJ = 2 000000
ИНФОРМАЦИЯ J = 2, CJ = 2 000000
ИНФОРМАЦИЯ j - 3, CJ = 4 000000
ИНФОРМАЦИЯ 1 = 1, bi = 2 000000, constr_ .type
ИНФОРМАЦИЯ 1 = 2, bl = В BBBBOO, constr_ _type
ИНФОРМАЦИЯ 3HaL 9HIJ e цепе ой функции: 4.000000
ИНФОРМАЦИЯ Va г 1 = 0.000000
ИНФОРМАЦИЯ Va г 2 = 2.000000
ИНФОРМАЦИЯ Va г 3 = 0.000000
lp
2
Cl строка)
test=# Select :4: from г tsst-# ; ] I val
0 | 4
1 I 0
2 I 2
3 | 0
Рис. 3. Результат работы функции интегрированной библиотеки
Таким образом, выполненная интеграция библиотеки lp_solveдополняет возможности СУБД PostgreSQL, а в дальнейшем послужит основой для реализации метода DEA в виде расширения этой СУБД.
Библиографические ссылки
1. Cooper W. W., Seiford L. M., Tone K. Data Envelopment Analysis : A comprehensive text with models, applications, references, and DEASolver software. 2nd ed. New York: Springer, 2007. - 490 p.
2. Introductiontolp solve 5.5.2.5 [Электронный ресурс]. URL: http://lpsolve.sourceforge.net (дата обращения: 31.03.2019).
3. Моргунов Е.П., Моргунова О. Н. Технологии разработки программ в среде операционных систем Linux и FreeBSD. Вводный курс: учеб. пособие. Красноярск, 2018. -207с.
© Постойко А. Ю., 2019