Содержание к диссертации
Введение
ГЛАВА 1. Исследование задачи разработки интеллектуальной объектно-ориентированной системы поддержки принятия решений 14
1.1. Проблематика организации интеллектуальных систем поддержки принятия решений 14
1.2. Анализ инструментальных средств разработки интеллектуальных информационных систем 16
1.3. Принципы организации, функционирования и разработки объектно-ориентированных информационных систем 22
1.4. Постановка задачи на разработку интеллектуальной объектно-ориентированной системы поддержки принятия решений 49
Выводы по 1 главе 51
ГЛАВА 2. Разработка системы представления знаний в ИООСППР 52
2.1. Анализ моделей представления знаний 52
2.2. Объектная модель представления знаний в ИООСППР 65
2.3. Интеграция технологии реляционных баз данных и аппарата представления знаний 74
2.4. Разработка объектно-продукционной базы знаний 84
Выводы по 2 главе 97
ГЛАВА 3. Представление и решение задач в ИООСППР 98
3.1. Способы представления и методы решения задач 98
3.2. Кооперативное решение задач в ИООСППР 111
3.3. Канонический метод структурного синтеза когнитивного агента 121
Выводы по 3 главе 131
ГЛАВА 4. Разработка и реализация программного обеспечения предметно-ориентированной ИООСППР 132
4.1. Структура и принципы функционирования ИООСППР 132
4.2. Программное и информационное обеспечение прикладной предметно-ориентированной ИООСППР 134
4.4. Результаты практической реализации ИООСППР 143
Выводы по 4 главе 145
Заключение 146
Список литературы
- Принципы организации, функционирования и разработки объектно-ориентированных информационных систем
- Объектная модель представления знаний в ИООСППР
- Кооперативное решение задач в ИООСППР
- Программное и информационное обеспечение прикладной предметно-ориентированной ИООСППР
Принципы организации, функционирования и разработки объектно-ориентированных информационных систем
ИООСГШР относится к классу информационных систем, базирующихся на знаниях. Инструментальные средства разработки систем, основанных на знаниях по степени универсальности можно разделить на следующие категории [32,34,46,53,56,63,70,72,74,77,80]: системы программирования; инструментальные средства и языки инженерии знаний, оболочки экспертных систем общего назначения и проблемно / предметно -ориентированные среды.
В качестве системы программирования, используемой при разработке интеллектуальных информационных систем и инструментальных средств искусственного интеллекта можно использовать процедурные языки программирования. Однако они не определяют ни моделей представления знаний, ни механизмов их обработки и не являются адекватными для разработки прикладных областей искусственного интеллекта. В процедурной парадигме, основанной на алгоритмической декомпозиции, активная роль в организации поведения отводится процедурам, активизируемым посредством вызова. При этом модули (подпрограммы) вызываются по имени, поэтому в ходе составления программы необходимо выявлять все ситуации, возникающие при различных входных данных, и в явном виде определять однозначный переход к очередному модулю. Подобные способы задания поведения удобны только для описания детерминированной последовательности действий одного или нескольких, но строго взаимосвязанных процессов. Для решения неформализованных задач необходимо, чтобы отдельные модули вызывались не по имени, а по описанию ситуации, и способ их взаимосвязи формировался в процессе решения задачи.
Стремление к эффективной программной реализации моделей представления знаний привело к разработке языков, позволяющих описывать сложные типы данных, имеющих встроенные механизмы представления, поиска и обработки информации. К таким языкам относятся языки функционального программирования (Лисп) и логического программирования (Пролог). Именно эти языки обычно использовались при разработке наиболее известных интеллектуальных информационных систем.
Фактически, базируясь на теории Lambda - исчислений Черча, программа на Лиспе представляет собой набор -функций. Благодаря рекурсивной системе обработки информации Лисп позволяет очень компактно описывать функции, сложно реализуемые на процедурных языках программирования. Такие задачи, как автоматическое доказательство теорем, понимание естественного языка, логические исчисления - все, что требует обработки символьной информации, достаточно удачно описывается и программируется на Лиспе. Этот язык является адекватным семиотической концепции искусственного интеллекта, в основе которой лежит предположение, что основой интеллектуальной деятельности является способность обрабатывать символы, преобразовывать их последовательности в сложные структуры, совершать над ними различные операции. Математическая модель Пролога основана на теории исчисления предикатов, в частности на процедурной интерпретации хорновских дизъюнктов (содержащих не более одного заключения). Знания, представленные с помощью логики предикатов, являются либо фактами, либо правилами. Предложение Хорна —PiV—iP2v...v—Pn v Pm записывается на языке Пролог как Рт:- РьРг,- -Рп Логическое представление не является описанием процесса вычислений, а представляет собой совокупность фактов и правил, определяющих понятия и отношения между ними. В программе на Прологе, чтобы задать определенную последовательность действий, приводящих к решению задачи, нужно описать ее содержание в терминах объектов и отношений между ними. Специфика языка состоит в том, что здесь имеется встроенная процедура поиска решений на графе редукции. Алгоритм строится интерпретатором Пролога автоматически на основе исходного описания путем последовательного применения правила резолюции к текущему целевому утверждению и к некоторой логической формуле. При этом цель решения задачи (целевое утверждение), обычно содержащая несколько подцелей, представляется в виде запроса к базе знаний, в которой содержится описание предметной области задачи. Поиск решений состоит в сопоставлении целевого утверждения с фактами и правилами, хранящимися в базе знаний и выполнении возврата при неуспехе. Таким образом, реализован процесс дедукции, направленный на доказательство целевого утверждения. Рекурсия играет в Прологе не меньшую роль, чем в Лиспе, хотя и носит декларативный характер.
Следующую группу составляют средства инженерии знаний, специально разработанные для построения и отладки систем обработки знаний. Языки инженерии знаний представляют собой формализмы представления знаний, погруженные в инструментальную среду их поддержки. Считалось, что при небольших затратах на программирование они позволят обеспечить гибкость при проектировании системы обработки знаний в пределах поддерживаемой модели представления знаний. В зависимости от используемой модели представления знаний, различают языки инженерии знаний, основанные на логике, продукционных правилах, фреймах (HSRL, OPS5, KRL, FRL).
К следующей группе относятся инструментальные среды, представляющие собой средства автоматизированного проектирования интеллектуальных систем, в частности экспертных систем, и поддерживающие как модели представления знаний, так и способы их обработки. Они представляют разработчикам наборы модулей из которых можно монтировать экспертные системы (GURU, ADS, G2, RTworks). Эти средства предназначены для разработчика, от которого также требуются знание программирования и умение интегрировать компоненты в программный комплекс.
Объектная модель представления знаний в ИООСППР
Функционирование интеллектуальных информационных систем связано с использованием знаний, представляющих собой обобщенную и формализованную информацию о свойствах и законах предметной области (ПО) с помощью которой реализуются процессы решения задач, преобразования данных и самих знаний. Форма представления знаний оказывает существенное влияние на характеристики и свойства системы и зависит от специфики решаемой задачи. В системе представления знаний выделяют собственно знания о предметной области и знания о том, как использовать знания о ПО в процессе функционирования системы. Знания о предметной области определяются, как правило, в декларативной форме, в качестве которой могут быть использованы исчисление предикатов, семантические сети, сети фреймов. Семантика декларативного формализма независима от способа использования знаний и не предписывает механизма их обработки. Знания об обработке собственно знаний о ПО (метазнания) определяются в терминах процесса выполнения различных действий по использованию декларативных знаний, описывающих предметную область. Для решения задачи в качестве процедуральных знаний обычно используются продукционные системы или механизм логического вывода, использующий технику вычисления с возвратом. В ИООСППР в качестве системы представления знаний использована гибридная объектно-продукционная модель, реализуемая в соответствии с идеей агентно-ориентированного подхода [66,71], в рамках которой были объединены система продукций (метазнания) и объектная модель (предметные знания). Задача эффективной организации базы предметных знаний решалась путем интеграции аппарата представления знаний и технологии объектно-реляционных баз данных. 1.1.1. Логические модели представления знаний.
Основой логических моделей является понятие формальной системы, которая может быть задана следующим образом [62]: S = B,F,A,R , (2-1) где В - счетное множество базовых символов (алфавит) теории; F -формулы теории (конечные последовательности базовых символов теории); А - выделенное множество априорно истинных формул (аксиом теории); R - конечное множество отношений {rhr2,...rn} между формулами (правил вывода). Правила вывода позволяют расширить множество формул, которые считаются истинными в рамках данной теории. Формальные системы являются синтаксическими и предназначены для получения умозаключений без рассмотрения смысла обрабатываемых заключений. Семантика выражений в формальных системах выявляется в процессе интерпретации. Очевидно, что значения формул могут быть истинными или ложными в зависимости от выбранной интерпретации, общезначимые формулы истинны при любой интерпретации. Наиболее распространенной формальной системой, используемой для представления знаний, является исчисление предикатов первого порядка. В исчислении предикатов утверждение содержит свободные переменные, поэтому их истинность зависит от того, как означены эти переменные. Использование логики предикатов для представления знаний дает возможность перейти от процедурального способа задания информации о предметной области к спецификации отношений между понятиями. Знания, которые могут быть представлены с помощью логики предикатов, являются либо фактами, либо правилами, определяющими понятия и отношения между ними. Такая модель в первую очередь опирается на декларативную семантику и обеспечивает понимание проблем на основе сформулированных взаимосвязей понятий, а не на основе отслеживания динамики выполнения соответствующей программы. Таким образом, в основе логического представления лежит идея концептуального описания ПО в виде некоторого множества утверждений, выраженных в виде логических формул, и получение решения построением вывода в некоторой формальной (дедуктивной) системе.
Основным преимуществом логических представлений считается наличие регулярных методов вывода, в терминах которых можно определять процедуры доказательства, таких как метод резолюций, используемый в качестве формальной процедуры для автоматизации логического вывода в модели исчисления предикатов первого порядка. Принцип резолюции включает принцип силлогизма в исчислении высказываний: [(ауб)л(а vc)]-»(6vc) и принцип отыскания частных случаев в исчислении предикатов, заключающийся в том, что формула f(tj,t2,--- Q, получающаяся из f(x}, х2,..., xj при подстановке вместо хх произвольных термов /І5 является частным случаем f(xj, х2,..., xj. Принцип резолюции предполагает использование регулярной процедуры последовательного сопоставления с образцами (алгоритма унификации) и применим к двум дизъюнктам, один из которых содержит позитивную литеру, а второй -негативную с тем же предикатом и одинаковым количеством аргументов.
Пусть в базе знаний содержатся правило PI: st(x)— opt(x), факт Р2: st(x) и нужно доказать истинность формулы РЗ: opt(x).
Для проверки выводимости формулы Р из множества логических формул Q берется отрицание исходной формулы Р, выбирается некоторая формула из множества Q, содержащая позитивную литеру Р и строится их резольвента, которая аналогичным образом может быть использована для построения следующей резольвенты. Повторяя данную процедуру, можно вывести некоторую формулу F, состоящую из одного предиката, и противоположную формулу -iF, резольвента которых даст пустую формулу. Полученное противоречие будет означать выводимость первоначальной формулы Р из множества формул Q. Таким образом, преобразовав формулу PI в предложение —. st(x)v opt(x) и применив к Р1 и —РЗ правило резолюции получим резольвенту -і st(x), которая является дополнительной к предложению Р2, и поэтому в результате удаления последних имеем пустую резольвенту. Формальная дедуктивная система считается непротиворечивой, если в ней одновременно недоказуемы какое либо утверждение и его отрицание. Фактически принцип резолюции распространяет общепринятое правило вывода modus ponens на дизъюнкты с произвольным числом литер, при этом используется доказательство от противного: если в результате отрицания исходной посылки получают противоречие в теории, значит исходная посылка истинна.
Для сопоставления логических формул, содержащих переменные, используется процедура подстановки (унификации), которая применяется к некоторому логическому выражению и заменяет в нем каждое вхождение переменной Х[ на терм tx. Интерпретатор осуществляет логический вывод путем последовательного применения правила резолюции к текущему целевому утверждению и к некоторой логической формуле, выбираемой из хранящейся в памяти программы. Выполнение сводится к построчному просмотру текста программы и поиску соответствующих подстановок. Если интерпретатору удается прийти к противоречию, то процесс вывода заканчивается и на выходе в качестве результата выдаются те значения переменных, которые были определены подстановками в результате последовательных унификаций
Кооперативное решение задач в ИООСППР
Повторное применение объекта всегда может быть реализовано посредством включения, однако включение не всегда является самым эффективным решением. В цепочке из многих объектов, каждый из которых делегирует вызов другому, чтобы добраться до фактической реализации метода необходимо пройти сквозь несколько объектов, то есть вызов метода может оказаться неэффективным. Агрегирование устраняет эту проблему, позволяя внешнему объекту представлять в качестве собственных интерфейсы, на самом деле реализованные внутренним объектом. Так как внешний объект агрегирует внутренний, а не просто включает его, то интерфейс внутреннего объекта доступен клиенту внешнего объекта непосредственно, то есть методы внутреннего объекта добавляются (агрегируются) к методам внешнего объекта. Агрегирование, как и включение, невидимо для клиента, однако, в отличие от включения требует поддержки со стороны внутреннего объекта. Любой внутренний объект должен делегировать вызовы методов своего интерфейса методам интерфейса внешнего (агрегирующего его) объекта. Следовательно, внешний объект (владелец) должен передать внутреннему указатель на свой интерфейс при создании агрегируемого объекта. Если соответствующий передаваемый параметр NULL, то объект знает, что он не агрегируется, и будет обрабатывать все вызовы методов самостоятельно. В другом случае новый объект будет функционировать как агрегированный внутренний объект некоторого внешнего и вызовы методов его интерфейса будут делегироваться методам интерфейса внешнего объекта. Таким образом, если объект является компонентом, то при его создании кроме класса компонента указывается его владелец (Owner). void fastcall TMyForm :: OnEvent (TObject Sender) { TMyComp ptr = new TMyComp (this ); ptr - Parent = this ; ptr - Caption = " Новый компонент"; } Когда компонент создается динамически в процессе выполнения программы, конструктору компонента передается его владелец в качестве параметра. Чтобы создать компонент, у которого нет владельца, конструктору компонента передается параметр NULL. Владелец ответственен за освобождение памяти тех объектов, которыми владеет, когда сам разрушается. Свойство Owner объявлено в базовом классе TComponent, потомками которого являются все компоненты, и используется VCL для отслеживания компонентов, порожденных отдельной формой или самим компонентом. Это свойство, которое имеет любой компонент содержит ссылку на компонент, который им владеет, а свойство Components типа массив содержит перечень компонентов, которыми владеет сам компонент. В ИООСППР база знаний разбивается на отдельные независимые модули, ориентированные на конкретную задачу и соответствующие компетенции определенного агента. Таким образом, в ИООСППР знания связываются и представляются в виде отдельных компонентов, которые инициируют действия и становятся источником активности системы. Каждый операционный компонент, инкапсулирующий знания о предметной области, реализуется как класс, множество значений членов-данных которого образует множество состояний операционного компонента, сохраняемых в реляционной базе данных. Реализация объектно-реляционной модели предметных знаний ИООСППР осуществляется в виде объектно-ориентированной оболочки над реляционной СУБД, представляющей операционные компоненты в виде реактивных агентов. Это дает возможность строить базы знаний, сочетающие преимущества как навигационной, так и реляционной моделей, а также представить ментальные свойства операционных объектов. ИООСППР оперирует сложно структурированными объектами, для реконструкции которых из плоских таблиц реляционной базы данных приходится выполнять запросы, почти всегда требующие соединения отношений. Для того, чтобы связать объектно-ориентированную схему и реляционную модель приходится сознательно нарушать нормализацию таблиц, внося в них определенную избыточность.
Знания о том, как использовать предметные знания в процессе функционирования системы инкапсулирует когнитивный управляющий агент, содержащий сведения о наиболее перспективных объектах и стратегиях, которые целесообразно использовать в конкретной ситуации. Инкапсулируемая когнитивным агентом система продукций представляет собой метазнания, которые в виде стратегических метаправил координируют работу функционирующих в системе реактивных агентов. Представление базы знаний в виде интеллектуальных агентов гарантирует согласованную интеграцию данных и методов их обработки и дает возможность внедрения в базу знаний поведенческого аспекта.
Доступ к сервисам реляционной СУБД осуществляется через компоненты VCL базы данных, которые определяются в терминах своих интерфейсов и ассоциируются с событиями, возникновение которых приводит к вызову определенных методов управления базой данных. Источник данных, к которому обращаются интерфейсные элементы (data-aware control), моделируется как компонент TDataSource. Компоненты TDataSet (TTable, TQuery), к которым, в свою очередь, обращается TDataSource обеспечивают доступ к таблицам баз данных, осуществляют SQL запрос или другой тип команды для манипулирования данными. Полученная абстракция доступа к данным может быть реализована по-разному для разных механизмов доступа к данным. Если приложение запрашивает атрибут определенного объекта компонент базы данных создает необходимые SQL-предложения для реляционной базы данных, получает требуемые данные и доставляет их клиенту в форме, согласованной с интерфейсом C++.
Кроме статических запросов SQL допускает динамические запросы, использующие параметры. Значения этих параметров передается извне и тем самым, не изменяя текст самого запроса, можно менять возвращаемый им результат. Программный доступ к параметрам во время выполнения приложения осуществляется аналогично доступу к полям набора данных. Ответственными за формирование параметров запроса, как и за формирование самих запросов в интеллектуальной объектно-ориентированной системе будут, взаимодействующие между собой компоненты.
Используя продукции для организации механизмов управления объектно-реляционной базой знаний, описывающей предметную область, можно говорить о системах продукций, координирующих работу компонентов интеллектуальной системы. В этом случае текущее состояние членов-данных координирующего компонента (категории классов) и произошедшие события определяют сложившуюся ситуацию, исходя из которой, реализуется ряд действий, переводящих систему в новое состояние.
Программное и информационное обеспечение прикладной предметно-ориентированной ИООСППР
Предметная область не пребывает в одном состоянии, с течением времени меняются признаки понятий, их состав и взаимосвязи. Для полного описания предметной области недостаточно представления статических связей между сущностями, понятиями и ситуациями, необходимо иметь соответствующие средства и для описания динамических процессов, которые в ней происходят. В то время как классические подходы концентрируют внимание на элементах предметной области, объектно-ориентированный анализ сосредотачивается на динамическом поведении как на первоисточнике объектов и классов.
Состояние объекта определяется перечнем (обычно статическим) всех свойств (атрибутов) данного объекта и текущими (динамическими) значениями каждого из этих свойств. Значения свойств могут быть простыми количественными характеристиками или ссылками на другие объекты, что приводит к описанию состояния объекта в терминах других объектов. Таким образом, состояние определяется совокупностью текущих значений атрибутов и связей объекта. Можно обобщить понятие состояния так, чтобы оно было применимо и к объекту, и к классу, так как все объекты одного класса принадлежат одному пространству состояний. Это пространство может представлять собой неопределенное, хотя конечное множество возможных состояний.
Во время работы системы составляющие ее объекты взаимодействуют друг с другом, в результате чего изменяются их состояния. Любое изменение состояния предметной области связывается с некоторым событием. Событием называется любое происшествие, которое может стать причиной изменения состояния системы. Каждое событие может приводить не только к смене состояния одного или нескольких объектов системы, но и к возникновению новых событий, связанных с действиями реагирующих на событие объектов. Событие становится основным понятием, которое используется для моделирования динамических процессов, происходящих в предметной области объектно-ориентированной системы. Идентификация событий позволяет определить границы поведения системы и распределить обязанности по осуществлению этого поведения между отдельными классами. Каждый класс с поведением, управляемым событиями, должен распознавать эти события и выполнять соответствующие действия. Событие может быть представлено символическим именем, классом или именем некоторой операции.
Так как внутреннее состояние определяет реакцию объекта на поступающее в него событие, следовательно поведение объекта зависит не только от событий, но и от времени. Наличие внутреннего состояния объекта означает, что порядок выполнения операций имеет существенное значение, следовательно наилучшим способом его формального описания будет конечный автомат. Конечный автомат может быть использован как один из методов высокоуровневого управления логикой, с помощью которого передаются команды подсистеме нижележащего уровня, составляющей среду, функционирование которой, в свою очередь, влияет на состояния автомата. Объект сохраняет свое состояние в течение времени между двумя последовательными событиями, которые он принимает. События передают информацию с одного объекта на другой, но представляя моменты времени, не имеют продолжительности (занимают пренебрежимо малое время). Состояния имеют продолжительность обычно равную отрезку времени между двумя последовательными событиями, принимаемыми объектом. Формально вести логический вывод можно на последовательности относительно упорядоченных событий. Если события не имеют причинной связи (логически независимы), они называются независимыми (concurrent), такие события не влияют друг на друга и могут происходить в произвольном порядке. Для событий, упорядоченных во времени нелинейно, необходим выбор.
Объектно-ориентированная декомпозиция основана на объектах, а не на алгоритмах, и концентрирует внимание не на порядке происходящих событий, а на упорядоченной совокупности агентов, которые в процессе взаимодействия друг с другом определяют поведение системы. Существует две причины возникновения событий в ИООСПГТР, наступающих в результате работы агентов: воздействие пользователя на компонент и изменение состояния компонента. События в результате воздействия пользователя почти всегда вызываются сообщениями Windows, указывающими, что на это воздействие может потребоваться некоторая реакция. События в результате изменения состояния компонента могут также соотноситься с сообщениями Windows, хотя чаще они являются следствием изменения свойств. Если с каждым фактом посылки сообщения связать некоторое событие, то функционирование системы заключается в последовательности возникновения событий, каждое из которых служит запуском некоторого сообщения и реакцией на него некоторого объекта. Существуют классы осведомительных событий Z, которые просто сигнализируют о том, что что-то произошло или происходит. В результате событий Z когнитивный агент А генерирует управляющие сообщения W, указывающие определенным реактивным объектам, что делать (но не как делать).
В том, что у сообщения имеется вполне конкретный получатель и в том, что интерпретация сообщения (вызываемый метод) зависит от получателя заключается главное отличие пересылки сообщений от вызова процедуры. После обработки сообщения, когда объект перестает быть активным, его состояние сохраняется, и он может принимать новые сообщения, что также отличает метод объекта от обычной функции, значение которой теряется после того, как оно использовано. Обычно конкретный получатель неизвестен вплоть до выполнения программы, то есть имеет место позднее (динамическое) связывание между именем функции и фрагментом кода (методом), что противопоставляется раннему (статическому) связыванию на этапе компилирования и компоновки программы при традиционных вызовах процедур. Позднее связывание позволяет ассоциировать сообщение с методом во время выполнения программы. В C++ позднее связывание охватывает ряд функций-членов (методов), называемых виртуальными функциями. Виртуальная функция объявляется в базовом или производном классе и, затем, переопределяется в наследуемых классах. Совокупность классов (подклассов), в которых определяется и переопределяется виртуальная функция, называют полиморфическим кластером, ассоциированным с некоторой виртуальной функцией. В пределах полиморфического кластера сообщение связывается с конкретной виртуальной функцией-членом во время выполнения программы. В C++Builder добавлены средства для распознавания динамического класса объекта. Они образуют систему идентификации типа во время выполнения - RTTI (Runime Type Identification). В системе RTTI каждый класс имеет связанную с ним структуру типа typeinfo, которая кодирует различную информацию о классе. Указатель на void можно рассматривать как указатель на объект любого типа. Но разыменование такого указателя требует применения явного приведения типов, поскольку компилятор не знает на объект какого типа в действительности ссылается указатель: ((TClass ) Ptr) - Caption. Можно создавать ссылку на объект с помощью