Научная статья на тему 'Реализация библиотеки АК-объектов'

Реализация библиотеки АК-объектов Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
188
100
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
АЛГЕБРА КОРТЕЖЕЙ / ЛОГИКО-СЕМАНТИЧЕСКИЙ АНАЛИЗ / БИБЛИОТЕКА АК-ОБЪЕКТОВ / N-TUPLE ALGEBRA / LOGICAL-SEMANTIC ANALYSIS / NTA-OBJECTS LIBRARY

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Зуенко Александр Анатольевич, Баженов Сергей Владиславович

В работе рассмотрена программная реализация базовых операций АК, а также приведены примеры работы пользовательского интерфейса созданной библиотеки.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Зуенко Александр Анатольевич, Баженов Сергей Владиславович

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

IMPLEMENTATION OF N-TUPLE ALGEBRA LIBRARY

In this paper implementation of n-tuple algebra library is considered and examples of its work are given.

Текст научной работы на тему «Реализация библиотеки АК-объектов»

УДК 004.94

А.А. Зуенко1,2, С.В. Баженов2

1 Институт информатики и математического моделирования Кольского НЦ РАН,

Кольский филиал ПетрГУ

2 Кольский филиал ПетрГУ

РЕАЛИЗАЦИЯ БИБЛИОТЕКИ АК-ОБЪЕКТОВ*

Аннотация

В работе рассмотрена программная реализация базовых операций АК, а также приведены примеры работы пользовательского интерфейса созданной библиотеки.

Ключевые слова:

алгебра кортежей, логико-семантический анализ, библиотека АК-объектов.

A.A. Zouenko, S.V. Bazhenov

IMPLEMENTATION OF N-TUPLE ALGEBRA LIBRARY

Abstract

In this paper implementation of n-tuple algebra library is considered and examples of its work are given.

Keywords:

n-tuple algebra, logical-semantic analysis, NTA-objects library.

Введение

Алгебра кортежей (АК) - алгебраическая система, предназначенная для моделирования и анализа многоместных отношений. Носителем АК является совокупность многоместных отношений, выраженных в матрицеподобных структурах (С-системах, С-кортежах, .D-системах, D-кортежах), которые называются АК-объектами. В логике С-кортежу (D-кортежу) соответствует конъюнкция (дизъюнкция) одноместных предикатов, а С-системе (D-системе) - дизъюнктивная (конъюнктивная) нормальная форма. В отличие от матриц и реляционных таблиц, компонентами АК-объектов служат не отдельные элементы, а их множества. Все операции в АК выполняются без разложения АК-объектов в набор элементарных кортежей, поскольку законы АК основываются на известных свойствах декартовых произведений [1]. В АК операции алгебры множеств обобщены на случай, когда многоместные отношения сформированы в различных схемах (декартовых произведениях).

Матрицеподобная структура АК-объектов дает возможность ясной интерпретации многих логических операций и методов рассуждений в терминах проекций декартовых произведений. Использование в АК обобщенных операций и отношений, аналогичных по смыслу соответствующим операциям и отношениям алгебры множеств, расширяет аналитические возможности АК по сравнению с реляционной алгеброй и теорией бинарных отношений, а также дает возможность реализовывать не только известные в логике методы, но и создает предпосылки для разработки новых методов логико-семантического анализа [2, 3].

* Работа выполнена при поддержке РФФИ (проекты № 12-07-006689-a и № 12-07-000550-a), Президиума РАН (проект 4.3 Программы № 15), ОНИТ РАН (проект 2.3 в рамках текущей Программы фундаментальных научных исследований).

В настоящей статье представлена программная реализация различных видов АК-объектов, а также базовых операций, определенных на них. Описывается оконный пользовательский интерфейс данной библиотеки, обеспечивающий реализацию вычислений в стиле АК. Возможности разработанной библиотеки и интерфейса продемонстрированы на примере задачи выполнимости конъюнктивной нормальной формы (КНФ). К этой задаче сводятся методы проверки логического следования в системах дедуктивных рассуждений. В АК решение задачи выполнимости КНФ осуществляется путем преобразования .D-системы в С-систему, при этом применяются специальные методы ускорения вычислительных процедур, основанные на матричных свойствах АК-объектов [1, 4, 5].

Особенности реализации

Библиотека АК-объектов реализована с помощью RAD (rapid application development) среды программирования, а именно C++ Builder 6. Для хранения данных широко применяются контейнерные классы из STL (standard template library): list, vector, map, basic_string. Для создания пользовательского интерфейса использовались компоненты из VCL (visual control library).

Был задействован набор библиотек Boost версии 1.33, что обеспечило элегантное решение следующих задач:

• разбор регулярных выражений для вычисления сложных выражений, вводимых пользователем (использована библиотека boost::regex);

• создание класса, представляющего компоненту АК-объекта (задействована библиотека boost::dynamic_bitset).

Для удобства пользователя реализован класс akDomain, позволяющий работать с доменами, основанными на разных типах данных: строковом, целочисленном и десятичном. Для строкового типа за основу был взят класс WideString, для целочисленного - int, а для десятичного - double.

Разработан класс атрибута (akAttribute), одно из полей которого содержит его имя, а второе указывает на соответствующий атрибуту домен.

Класс схемы АК-объекта akScheme нужен для поддержки хранения АК-объектов в разработанном формате, а также для приведения двух систем к одной схеме отношения. Схема отношения является упорядоченным набором атрибутов, для хранения и обработки которого использовался контейнер list.

Создан класс для представления компоненты (класс akComponent). Данные хранятся в виде набора битов. Количество битов в наборе совпадает с мощностью соответствующего домена. Каждый бит указывает, включен ли соответствующий ему элемент домена, в данную компоненту. Для хранения набора битов используется класс boost::dynamic_bitset. В отличие от bitset, входящего в STL, класс boost::dynamic_bitset позволяет задавать конкретный размер множества в процессе выполнения программы, а не при ее написании. Были созданы “обертки” для задействованных методов упомянутого класса, а также добавлен новый метод, возвращающий true, если все элементы множества установлены в true. Другими словами, класс akComponent “перепредставляет” некоторые методы boost::dynamic_bitset, дополняя их собственной функциональностью.

Компоненты, объединяясь в списки, образуют столбцы. Поскольку основой для хранения компонент в системе являются столбцы, класса для представления кортежа создано не было. Вместо этого, кортежи хранятся и передаются в виде массива итераторов, как элементы соответствующих столбцов.

Данные в С-системах и .D-системах представляются одними и теми же элементами и даже имеют одну и ту же структуру, поэтому целесообразным решением было создание чисто абстрактного класса akISystem, организующего хранение содержимого системы и служащего интерфейсом для классов akCSystem и akDSystem. Также akISystem содержит реализацию методов, общих для С-систем и D-систем. Данные в классе akISystem хранятся в виде упорядоченного набора столбцов (контейнер list).

В программных классах akCSystem и akDSystem реализованы базовые операции, предусмотренные для С-систем и D-систем: пересечение, объединение, дополнение. Имеются операции нахождения всех возможных способов слияния кортежей с одной различной компонентой и удаления заведомо лишних кортежей (содержащих пустые компоненты в случае С-систем и полные компоненты в случае D-систем, а также входящих в какой-либо другой кортеж системы). Если же требуется вычислить выражение, содержащее С- и D-объекты одновременно, то нужно применить специально предусмотренные методы преобразования в альтернативные классы.

Операция преобразования D-системы в С-систему используется, в частности, при решении задачи выполнимости КНФ, причем для ускорения вычислений применяется ортогонализация промежуточных С-систем. В основе ортогонализации лежат процедуры преобразования D-кортежа в С-систему и нахождения пересечения полученных С-систем.

Далее опишем принципы организации пользовательского программного интерфейса, использующего представленную библиотеку. Данный интерфейс позволяет в режиме оконного диалога осуществлять ввод и редактирование АК-объектов, а также задавать в виде строки программу вычислений сложных выражений с АК-объектами. Для хранения исходных данных и результатов вычислений используется формат XML. Структура XML-файлов представлена ниже. В ней, прежде всего, отражены элементы, которые предназначены для управления (хранения на диске, обработки, удаления) экземплярами классов библиотеки АК-объектов.

Организация хранения данных в XML

Предусмотрена возможность работы с XML-файлами, для чего был задействован юнит XMLDoc. С помощью XML data binding wizard на основе XSD-схемы был сгенерирован код, облегчающий доступ к элементам XML-дерева. При чтении данных из файла выполняется обход дерева, создаются и заполняются соответствующие объекты. При записи в файл выполняется обход всех имеющихся объектов, заполняется и сохраняется в файл полученное дерево. Важной особенностью приложения в целом является поддержка Unicode для имен объектов, а также для элементов доменов.

Корневой элемент XML-документа - ntDoc - содержит элементы для хранения доменов, атрибутов, схем отношений и систем.

Элемент для хранения доменов ntDomain содержит два атрибута. Атрибут name служит для обозначения имени домена, а атрибут type указывает тип данных домена и может принимать следующие значения: “string” для строкового типа данных, “int” - для целочисленного, “float” - для числа с плавающей запятой. Внутри ntDomain содержатся элементы element, которые содержат значения, принадлежащие домену.

Элемент ntAttribute содержит лишь два атрибута: имя атрибута name и имя соответствующего ему домена domain.

Элемент ntScheme имеет атрибут name для обозначения имени схемы и содержит элементы element, в каждом из которых указывается атрибут, входящий в схему.

Элемент ntSystem имеет более сложную структуру. Атрибут name указывает имя системы. Scheme содержит имя схемы для описываемой системы. Type может принимать значение “c” для С-систем или “d” для D-систем. Каждая система состоит из элементов nt, служащих для представления кортежей. Каждый элемент nt содержит элементы component, обозначающие компоненты. Каждая компонента содержит элементы element, указывающие, какие элементы домена входят в данную компоненту.

Особенности пользовательского интерфейса

Программа оснащена интуитивным оконным пользовательским интерфейсом на основе VCL, позволяющим редактировать АК-объекты и производить операции с ними. Имеется базовая форма и несколько дополнительных. На базовой форме расположены меню, панель инструментов и панель вкладок, содержащая четыре вкладки, на которых находятся все остальные элементы. Предполагается, что пользователь для конкретной решаемой задачи один раз введет исходные данные, используя все вкладки по очереди, чтобы все остальное время работать с последней вкладкой. Возврат на другие вкладки понадобится только для изменения исходных данных.

Одна из особенностей разработанного интерфейса - хранение в таких визуальных компонентах, как TComboBox, TList, TStringGrid пар «Строка -указатель на объект». Иными словами, каждая строка в каждом визуальном компоненте ассоциирована с объектом, который она представляет. Названные визуальные компоненты в паре со строкой могут хранить только указатель на объект типа TObject (и его наследников). Были созданы специальные классы, агрегирующие классы из библиотеки АК-объектов и классы, агрегирующие итераторы, указывающие на объекты классов из библиотеки АК-объектов. Все указанные специальные классы являются наследниками TObject и потому могут ассоциироваться со строками в упомянутых визуальных компонентах.

Разбор выражений

С помощью boost::regex реализован разбор сложных выражений следующего вида:

• <Имя системы>;

• <Выражение><знак бинарной операции><Выражение>;

• <3нак унарной операции><Выражение>;

• (<Выражение>);

Введенное выражение разбирается на объекты типа акТокеп, представляющие лексемы. В случае успешного разбиения (то есть, если были найдены только знаки операций, скобки и имена существующих систем) последовательность акТокеп переводится из инфиксной формы в постфиксную, а именно в инверсную польскую запись (ПО ЛИЗ).

В случае успешного перевода в ПОЛИЗ строится дерево объектов типа акОрегайоп, представляющих выражения. В случае успешного построения дерева проводится проверка корректности с точки зрения АК. В случае корректности построенного дерева производится вычисление результата.

Объекты класса акТокеп содержат указатель на объект типа акОрегайоп и поле, обозначающее тип конкретной лексемы (скобка, конкретный оператор, система). Как и акТокеп, класс акОрегайоп был введен для разбора и вычисления выражений и служит для их представления. Выражением может быть и система сама по себе. Из этого вытекает очевидное решение: создать абстрактный класс, наследниками которого будут классы систем (акКу81еш) и классы других операций (рис. 1). В акОрегайоп имеются виртуальные методы для вычисления (или возвращения) результата, получения типа результата без его вычисления и проверки корректности поддерева. Кроме акКу81еш, от класса операции унаследованы классы унарной и бинарной операции, которые, в свою очередь, стали родителями для классов конкретных операций.

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

Демонстрация работы программы на примерах

Пример 1.

Докажем справедливость одного из правил вывода натурального исчисления, которое называется правилом дилеммы [1]:

А^>С,В ^>C,AvВ С

что можно записать как

AvC^BvC^Av В

C

Подразумевается, что из формул над чертой выводится формула под чертой. Можно считать, что верхние формулы представляют собой посылки, а нижняя - следствие из них. Преобразуем конъюнкцию посылок в АК-объект F, а предполагаемое следствие - в G:

1(0} 0 {1}Г

F =

0

{1}

{0} {1} {1} 0

G[XaXbXc] =

— * *

{1}

Введем АК-объекты F и G в программу:

Щ ДК - F:\DOCS\AK_cpp\D¡ploma\EXAMPLES\FlpMMep 4.1лт|

, 1151 Імамі'

□Mol

Домены | Атрибуты | Схемы Системы |

Имеющиеся С-сисгемы: Содержимое системы:

G

Добавить Удалить 1

Имеющиеся D-системы:

Добавить Удалить

Новая операция

Добавить строки | Удалить строку с выделенной ячейкой [ Сократить

в с

{0} 8 {1}

# {0} {1}

m m й

Символ на рис. 2 обозначает фиктивную компоненту "0”.

Чтобы решить задачу, достаточно проверить Р п О = 0. Для этого введем в программу соответствующее выражение:

Рис. 3. Ввод выражения

Здесь символ “~” означает преобразование в альтернативный класс, «*» -пересечение, «!» - дополнение. Введенная строка разбивается на лексемы:

(Солдагеюг? я ИеЛВтске1

(Зуйет

Мегеесйоп V ¡Сотр1етеМ Ж £)5(ет Ж ¡РОдЬВгаМ

/ 1 (01 0 (11

1 0 (0) (Ц | ^ | 1 | ^ ^ (1}|

1 1 (У 0) 0 | |'| | /

Рис. 4. Внутреннее представление распознанной строки Затем выражение преобразуется в польскую инверсную запись:

1Э>«6эт (Зуйет ¡Сотр1етвп1 ИпШвесйоп Южегзюп

(01 0 (11 О (01 (11 (11 (11 0 * * {1} ! *

Производится построение дерева:

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Т1Г

Рис. 6. Дерево операций

Далее вызывается метод result элемента на вершине дерева, который производит вычисление результата. В данном случае результат пуст, а значит, правильность логического следствия доказана.

Пример 2.

Проверить правильность логического вывода для следующего рассуждения: «Если Джонс не встречал этой ночью Смита, то либо Смит был убийцей, либо Джонс лжет. Если Смит не был убийцей, то Джонс не встречал Смита этой ночью, и убийство имело место после полуночи. Если убийство имело место после полуночи, то либо Смит был убийцей, либо Джонс лжет. Следовательно, Смит был убийцей».

Выразим данное рассуждение на языке исчисления высказываний [1]. Введем обозначения:

А - Джонс встречал этой ночью Смита;

В - Смит был убийцей;

С - Джонс лжет;

В - Убийство имело место после полуночи.

Тогда заданное рассуждение можно сформулировать так:

• первое предложение: —Л з (В ® С);

• второе предложение: —■ В и (-тА л В);

• третье предложение: В г> (В © С);

• следствие: В.

Преобразуем первые три предложения для того, чтобы избавиться от импликации и строгой дизъюнкции. Получаем:

1) -пА => (В © С) =А V (В л -,С) V (-,£ л С);

2) —\В и (—А л ГУ) = В V (—А л £>);

3) £> => (В © С) = -,£> V (В л -,С) V (~,В л С).

Для представления этих формул АК-объектами используем универсум Х!хХ2хХзхХ4 = {ОД}4, где А =В = С = И= 1 и -А = -В = -,С = -,£> = 0. Тогда посылки, которые являются ДНФ, выражаются С-системами:

д =

"{1} * * * " * {1} * * ' * * {1}_ * * * {0}"

* {1} {0} * ;Р2 = .{0} ;рз = * {1} {0} *

* {0} {1} * .* {0} {1} *

а следствие - С-кортежем Б\Хг\ = [{1}]. Введем АК-объекты Р\, Рг, Рз и S в программу:

Рис. 7. Окно программы с введенными АК-объектами

Для решения задачи определим пустоту АК-объекта Р\ гл Рг ^ Рз ^ Я • Введем в программу соответствующее выражение:

Рис. 8. Ввод выражения

Здесь символ «*» используется для обозначения операции пересечения, «!» - дополнения, «~» - преобразования в альтернативный класс. Программа разбирает выражение, строит дерево операций и вычисляет результат. После сокращения получаем:

Рис. 9. Результат

Как видим, получилась система [{0}{0}{ 1}{1}] Ф 0, т.е. вывод неверный.

Заключение

Разработан ряд классов, отражающих сущности АК. Библиотека реализует не только операции, необходимые для решения задачи выполнимости КНФ, но и другие базовые операции над АК-объектами, имеет большой потенциал для расширения и может служить основой для продолжения работ в заданном направлении. Был применен один из методов ускорения вычислительных процедур, а именно ортогонализация.

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

ЛИТЕРАТУРА

1. Кулик, Б.А., Зуенко, А.А., Фридман, А.Я. Алгебраический подход к интеллектуальной обработке данных и знаний / Б.А. Кулик, А.А. Зуенко, А.Я. Фридман. - СПб.: Изд-во Политехн. ун-та, 2010. - 235 с.

2. Kulik, B., Fridman, A., Zuenko, A. Logical Analysis of Intelligence Systems by Algebraic Method / B. Kulik, A. Fridman, A. Zuenko // Cybernetics and Systems 2010: Proceedings of Twentieth European Meeting on Cybernetics and Systems Research (EMCSR 2010) Vienna, Austria, 2010. - pp.198-203.

3. Зуенко, А.А. Реализация комбинированных методов логико-семантического анализа с использованием алгебры кортежей / А.А. Зуенко, Б.А. Кулик, А.Я. Фридман // Тринадцатая национальная конференция по искусственному интеллекту с международным участием, 16-20 октября 2012г., г. Белгород: труды конференции. - Белгород: Изд-во БГТУ, 2012. -Т.2. - С.67-75.

4. Кулик, Б.А. Математическое отношение как основная структура логики / Б.А. Кулик // Труды междунар. научной школы «Моделирование и анализ безопасности и риска в сложных системах - 2008» СПб., ГУАП, 2008. - С.190-192.

5. Зуенко, А.А. Унификация обработки данных и знаний на основе общей теории многоместных отношений / А.А. Зуенко, Б.А. Кулик, А.Я. Фридман // Искусственный интеллект и принятие решений, 2010. - Вып. 3. - С.52-62.

6. Kulik, B. Logical Analysis of Intelligence Systems by Algebraic Method /B. Kulik, A. Fridman, A. Zuenko // Cybernetics and Systems 2010: Proceedings of Twentieth European Meeting on Cybernetics and Systems Research (EMCSR 2010) Vienna, Austria, 2010. - pp.198-203.

7. Зуенко, А.А. Булевы алгебры как средство интеллектуального анализа систем рассуждений / А.А. Зуенко, А.Я. Фридман, Б.А. Кулик // XII Международная научная конф. имени Т.А. Таран «Интеллектуальный анализ информации ИАИ-2012», г. Киев, 16-18 мая 2012 г.: сб. тр. / гл. ред. С.В. Сирота. - К.: Просвгта, 2012. - C.70-78.

Сведения об авторах

Зуенко Александр Анатольевич - к.т.н, научный сотрудник,

е-mail: zuenko @iimm.kolasc .net.ru

Alexander A. Zouenko - Ph.D. (Tech. Sci.), researcher

Баженов Сергей Владиславович - студент, e-mail: bazhenov@arcticsu.ru Sergey V. Bazhenov - student

i Надоели баннеры? Вы всегда можете отключить рекламу.