Содержание
Введение
1. Задача унификации
2. Преобразование выражения в префиксную форму
3. Определение классов для реализации алгоритма
4. Операции класса Lisp
_
item
4.1 Операция выполнения унификации (unifikacia
)
4.2 Операция проверки применимости продукций(Primen
_
prod
)
4.3 Операция замены свободных переменных (zamena
)
5. Операции класса podst
5.1 Операция проверки применимости (primenima
)
6. Операции класса trojka
6.1 Операция проверки применимости (primenima
)
Выводы
Литература
Введение
Тема курсовой работы по дисциплине "Проектирование интеллектуальных систем" - "Унификация алгебраических выражений".
Целью изучения дисциплины является подготовка специалистов в области автоматизации сложноформализуемых задач. Задачей изучения дисциплины является приобретение знаний о фундаментальных алгоритмах, применяемых при построении систем искусственного интеллекта, а также методов разработки программных приложений, реализующих эти системы.
Принципиальное отличие интеллектуальных систем от любых других систем автоматизации заключается в наличии базы знаний о предметной среде, в которой решается задача. Неинтеллектуальная система при отсутствии каких-либо входных данных прекращает решение задачи, интеллектуальная же система недостающие данные извлекает из базы знаний и решение выполняет.
По А. Н. Колмогорову, любая материальная система, с которой можно достаточно долго обсуждать проблемы науки, литературы и искусства, обладает интеллектом. Такое определение показывает, что данная дисциплина находится во взаимосвязи практически со всеми учебными дисциплинами. Тем не менее, следует подчеркнуть связи со следующими дисциплинами: "Программирование", "Математический анализ", "Линейная алгебра и аналитическая геометрия", "Дискретная математика", "Логическое программирование", "Экспертные системы", "Интерфейсы интеллектуальных систем".
1. Задача унификации
Формально задача записывается следующим образом: для данной теоремы Т в форме продукции вида
Н Þ С,
где Н – гипотеза;
С – заключение, и некоторого выражения Е необходимо проверить, можно ли сделать Н и Е полностью идентичными путем последовательных подстановок свободных переменных в Е. Если выражение Е с помощью подстановок свободных переменных удается привести к виду Н, то Е можно заменить выражением С. После этого в выражении С свободные переменные заменяют соответствующими им фрагментами из выражения Е.
Например, для продукции (теоремы) (
a
+
b
)2
=
a
2
+ 2
ab
+
b
2
исходное выражение x
2
+ (
y
+ √3)2
с помощью свободных переменных a
=
y
и b
= √3
можно преобразовать к виду x
2
+ (
a
+
b
)2
. Фрагмент выражения (
a
+
b
)2
полностью совпадает с левой частью продукции, следовательно вместо него можно подставить правую часть продукции. В результате будет получено выражение x
2
+
a
2
+ 2
ab
+
b
2
.
Для завершения преобразования необходимо свободные переменные a
и b
заменить соответствующими им фрагментами выражения Е. окончательно будет получено: x
2
+
y
2
+ 2
y
√3 + (√3)2
.
Фундаментальная идея алгоритма связана с процедурой просмотра выражения: вначале делается попытка применить какую-либо продукцию ко всему выражению; если не удается применить ни одну продукцию, выбирается фрагмент выражения и проверяется применимость продукций к этому фрагменту и т.д.. Выполнение процедуры унификации прекращается, когда уже никакая продукция не может быть применена ни к какому подвыражению. Для изучения или разработки алгоритма унификации удобно представлять выражение и продукции в виде деревьев. Для приведенного выше примера деревья продукций и выражения будут иметь вид:
Рисунок
1 -Представление продукции и выражения в виде дерева ( -символ операции возведения в степень)
На рисунке одинаковыми цветными прямоугольниками выделены совпадающие фрагменты деревьев продукции и выражения; штрихпунктирными линиями – соответствие между свободными переменными и фрагментами дерева выражения.
Алгоритм унификации выполняет обход дерева выражения, начиная с корня дерева. Для очередного узла дерева выполняются следующие действия:
- выполняется проверка на совпадение операции из узла дерева выражения Е с операцией в корне левой части очередной продукции Т. Если совпадают, то выполняется переход к следующему шагу. В противном случае, по окончании просмотра всех продукций, выполняется переход к следующему узлу дерева выражения Е;
- если в левой части продукции операндами операции являются переменные, то им сопоставляются ветви дерева выражения Е, отходящие от узла с совпавшей операцией (так, как показано на рисунке);
- фрагмент дерева выражения Е, соответствующий левой части продукции, заменяется деревом из правой части продукции (см. рисунок 2);
Рисунок 2
-Выражение Е после замены фрагмента на правую часть выражения
- в полученном дереве выражения Е выполняется замена свободных переменных сопоставленными фрагментами исходного дерева (см. рисунок 3).
Рисунок
3 -Выражение Е после замены свободных переменных соответствующими фрагментами
Таким образом, выполнение унификации предполагает построение дерева выражения. В наибольшей степени заданию выражения в форме дерева соответствует префиксная форма записи. Например, рассмотренные выше продукция и выражение в префиксной форме будут иметь следующий вид:
(
(+
a
b
) 2) => (+ (
a
2) (+ (* 2 (*
a
b
)) (
b
2)) );
(+ (
x
2) (
(+
y
(√ 3)) 2)).
В каждой скобке присутствуют два или три элемента: знак операции или имя функции и один или два операнда. Операции соответствуют узлам дерева, а операнды – ветвям дерева. Такая фиксированная структура упрощает построение алгоритма унификации, но требует введения алгоритма преобразования выражения, заданного в инфиксной записи, в префиксную форму записи.
2.Преобразование выражения в префиксную форму
Это преобразование является частным случаем задачи трансляции выражений. Неформальное определение алгоритма заключается в следующем.
Алгоритмом используется два стека: стек операндов и стек операций. Строка с выражением сканируется слева направо. Если очередным элементом выражения является операнд – константа или переменная, - то он безусловно заносится в стек операндов. Если очередной элемент выражения открывающая скобка, то она безусловно заносится в стек операций. Закрывающая скобка вызывает действия, задаваемые в третьей строке таблицы.
Если очередной элемент выражения операция или скобка, то действия определяются в зависимости от соотношения приоритетов данной операции и операции на вершине стека операций (таблица 1). Обозначения: Op(E) – очередная операция из выражения Е; Op(stack) – операция на вершине стека операций. Значения приоритетов и количество операндов в операциях определяются с помощью справочника операций. Соблюдаются следующие соглашения о приоритетах:
- приоритет открывающей скобки из выражения выше приоритета любой операции на вершине стека;
- приоритет любой операции из выражения выше приоритета открывающей скобки на вершине стека операций;
- приоритет любой операции на вершине стека выше приоритета закрывающей скобки из выражения.
Таблица 1 - Связь между соотношением приоритетов операций и действиями алгоритма
Op(E) Ä Op(stack) | Описание действий |
> | 1)Op(E) занести в стек операций; 2)перейти к следующему элементу выражения Е |
= | 1)сформировать тройку: - операция - с вершины стека операций; - один или два операнда - с вершины стека операндов; 2)ссылку на тройку поместить на вершину стека операндов; 3)Op(E) занести в стек операций; 4)перейти к следующему элементу выражения Е |
< | 1)сформировать тройку: - операция - с вершины стека операций; - один или два операнда - с вершины стека операндов; 2)ссылку на тройку поместить на вершину стека операндов; 3)снова провести сравнение приоритетов и выбрать действие в соответствии с таблицей. |
Если очередной символ в выражении закрывающая скобка, а на вершине стека операций открывающая скобка, то удалить открывающую скобку из стека и перейти к следующему символу в выражении.
Работа алгоритма заканчивается, если при очередном обращении стек операций оказывается пустым. На вершине стека операндов будет находиться ссылка на выражение в префиксной форме.
Действия алгоритма иллюстрируются таблицей, в которой отображаются состояния стеков и другая информация после выполнения алгоритмом очередного шага для выражения a
+
b
+
c
/(
m
-
d
)
. Символ $
используется как признак конца(дна) стека или входной строки.
Таблица 2
- Состояния основных структур алгоритма
Стек операций | Стек операндов | Символ входной строки | Соотно-шение приори-тетов | Описание |
$ | $ | a | ||
$ | $a | + | > | |
$+ | $a | b | ||
$+ | $ab | + | = | Выделение тройки: (+ a b) |
$+ | $(+ a b) | c | ||
$+ | $(+ a b)c | / | > | |
$+/ | $(+ a b)c | ( | > | |
$+/( | $(+ a b)c | m | ||
$+/( | $(+ a b)cm | - | > | |
$+/(- | $(+ a b)cm | d | ||
$+/(- | $(+ a b)cmd | ) | < | Выделение тройки: (- m d) |
$+/( | $(+ a b)c(- m d) | ) | Удаление скобки | |
$+/ | $(+ a b)c(- m d) | $ | < | Выделение тройки: (/ c (- md)) |
$+ | $(+ a b) (/ c (- md)) | $ | < | Выделение тройки: (+ (+ ab) (/ c (- md))) |
$ | $(+ (+ a b)(/ c (- md))) | $ | Конец работы |
3. Опреде
На рисунке 4 приведена диаграмма классов для реализации алгоритма унификации, на которой показана структура вызовов операций классов. Цифры над линиями указывают возможную последовательность вызовов. В рассматриваемой реализации алгоритма предполагается, что выражение представлено в префиксной форме. Описываться будут только те структуры данных и операции, которые связаны с принципом работы алгоритма унификации.
Рисунок 4
- Диаграмма классов для алгоритма унификации
В рассматриваемом примере реализации алгоритма унификации основную структурную единицу задает класс Lisp_item. Имя класса указывает на то, что проводится аналогия с понятием символа языка LISP. Суть заключается в том, что в LISP символ может обозначать константу, переменную, список, функцию или выражение, которое можно обрабатывать. Чтобы конкретизировать, что задает экземпляр класса Lisp
_
item
, в его состав вводится атрибут typ
. Атрибут itm
будет задавать ссылку на объект (константу, переменную или тройку – выражение, состоящее из операции и двух операндов). Причем, любой из операндов может быть экземпляром класса Lisp
_
item
.
Таблица 3
- Назначение операций класса Lisp
_
item
Имя операции | Описание |
unifikacia(ArrayList sp, ref ArrayList SV,TextBox tbox) |
Выполняет унификацию данного экземпляра Lisp_item, где sp – список продукций (подстановок); SV – формируемый список свободных переменных; tbox – компонента для вывода текстовых сообщений. |
Primen_prod(ArrayList sp, ref ArrayList SV, TextBox tbox) |
Проверяет применимость к данному экземпляру класса Lisp_item продукций из заданного списка SV. Назначение остальных параметров то же, что и в предыдущем случае. |
zamena(ArrayList SV) | Выполняет замену свободных переменных в результирующем выражении на соответствующие им фрагменты исходного выражения. SV – список свободных переменных |
Для задания продукций (подстановок), используемых для унификации выражений, применяется класс podst
. В соответствии с определением продукции атрибутами класса являются left
_
part
и right
_
part
.
При этом и левая, и правая части могут представлять произвольные выражения и задаются как объекты класса Lisp
_
item
.
Таблица 4
- Назначение операций класса podst
Имя операции | Описание |
primenima(Lisp_item E, ref ArrayList SV) | Определяет применимость левой части продукции к заданному выражению. Е – унифицируемое выражение; SV – формируемый список свободных переменных. |
zamena(ArrayListSV) | Выполняет замену свободных переменных в правой части удачно примененной продукции. |
Для работы с выражением в префиксной форме предназначен класс trojka
. Атрибуты этого класса предназначены для определения основных элементов и признаков выражения в префиксной форме: operation
– символ операции; priority
– приоритет операции; is
_
func
– операция является функцией; op
1
, op
2
– операнды.
Таблица 5
- Назначение операций класса trojka
Имя операции | Описание |
primenima(Lisp_item E, ref ArrayList SV) |
Определяет применимость тройки из левой части продукции к тройке заданного выражения. Е – унифицируемое выражение; SV – формируемый список свободных переменных. |
4. Операции класса Lisp
_
item
4.1 Операция выполнения унификации (unifikacia
)
Действия данной операции определяются схемой на рисунке 5 и складываются из следующего. Вначале проверяется применимость продукций ко всему выражению.
Если удается удачно применить какую-либо продукцию из заданного списка, то выполняется выход. В противном случае, операция унификации (unifikacia
) вызывается для каждого из операндов выражения.
4.2 Операция проверки применимости продукций(
Primen
_
prod
)
Действия данной операции определяются схемой на рисунке 6 и складываются из следующего. Организуется цикл просмотра списка продукций.
Для очередной продукции из списка (rpod
) вызывается операция проверки применимости продукции (Primenima
). Если операция возвращает истинное значение, то вызывается операция замены свободных переменных в правой части продукции.
Если же ни одной продукции применить не удалось, то возвращается ложное значение.
4.3 Операция замены свободных переменных (
zamena
)
Действия данной операции определяются схемой на рисунке 7 и складываются из следующего. Состав выполняемых действий зависит от типа обрабатываемого элемента выражения.
В случае константы никаких действий не выполняется.
В случае простой переменной выполняется ее поиск в списке свободных переменных, после чего она заменяется соответствующим фрагментом выражения. Если обрабатываемый элемент является тройкой (операция и два операнда), то данная операция замены (zamena
) свободных переменных выполняется для каждого из операндов тройки.
5. Операции класса podst
5.1 Операция проверки применимости (primenima
)
Действия данной операции определяются схемой на рисунке 8 и складываются из следующего. Вначале выполняется проверка соответствия типов левой части продукции и унифицируемого выражения. При несовпадении выполняется выход с возвратом значения false
. При совпадении типов дальнейшие действия определяются типом левой части продукции.
Если левая часть – константа, то выполняется сравнение значений констант из левой части продукции и заданного выражения. Результат сравнения возвращается как результат выполнения операции.
Если левая часть продукции – переменная, то формируется элемент списка свободных переменных и помещается в список. Для задания элементов списка свободных переменных используется класс sv
_
perem
, атрибутами которых являются:
nm
_
sv
– имя свободной переменной;
fragment
- фрагмент выражения, соответствующий переменной (тип Lisp_item).
Если левая часть – тройка, то выполняется выделение выражений тройки из левой части продукции и унифицируемого выражения, после чего вызывается операция класса trojka
для проверки применимости тройки из продукции к тройке из выражения (primenima
).
Рисунок5 -СхемаалгоритмаоперацииLisp_item.unifikacia
Рисунок
6 - Схема алгоритма операции Lisp
_
item
.
Primen
_
prod
Рисунок
7 - Схема алгоритма операции Lisp
_
item
.
zamena
Рисунок
8 - Схема алгоритма операции podst
.
primenima
6. Операции класса
trojka
6.1 Операция проверки применимости (primenima
)
Действия данной операции определяются схемой на рисунке 9 и складываются из следующего. Тройка из продукции будет считаться удачно примененной к тройке из унифицируемого выражения, если, во-первых, совпадают операции троек; во-вторых, правила применимости выполняются для первых и вторых операндов троек.
При совпадении операций троек, анализируется тип первого операнда.
В случае константы выполняется сравнение значений констант, стоящих на месте первого операнда в сравниваемых тройках. При несовпадении – выполняется выход.
Если первый операнд переменная, то ей сопоставляется первый операнд из тройки унифицируемого выражения и заносится в список свободных переменных.
Если первый операнд тройка, то для этого объекта вызывается описываемая операция primenima
.
При неудачном завершении этой операции выполняется выход из операции со значением false
.
Поскольку в тройке может отсутствовать второй операнд (например, функции с одним аргументом, или одноместные операции типа (not
x
)), то если это подтверждается, то работа операции завершается со значением true
. Если же второй операнд присутствует, то прежде всего проверяется возможное условие совпадения первого и второго операндов.
Если же в тройке из продукции операнды различны, то выполняется обработка второго операнда. Алгоритм обработки аналогичен алгоритму обработки первого операнда.
Рисунок 9, лист 1- Схема алгоритма операции trojka
.
primenima
Рисунок 9, лист 2.
Выводы
Таким образом, процесс унификации выражения складывается из трех последовательно выполняемых этапов:
преобразование выражения в инфиксной форме в выражение в префиксной форме
Þ
унификация выражения в префиксной форме
Þ
преобразование результата унификации из префиксной формы в инфиксную форму
.
Что касается последнего преобразования, то оно реализуется в виде несложной рекурсивной процедуры.
Литература
1
. Уоссермен Ф., Нейрокомпьютерная техника, - М.,Мир, 1992.
2
. Горбань А.Н. Обучение нейронных сетей. - М.: ПараГраф, 1990
3
. Горбань А.Н., Россиев Д.А. Нейронные сети на персональном компьютере. - Новосибирск: Наука, 1996
4
. Gilev S.E., Gorban A.N., Mirkes E.M. Several methods for accelerating the training process of neural networks in pattern recognition // Adv. Modelling & Analysis, A. AMSE Press. – 1992. – Vol.12, N4. – P.29-53
5
. С. Короткий. Нейронные сети: алгоритм обратного распространения.
6
. С. Короткий, Нейронные сети: обучение без учителя. Artificial Neural Networks: Concepts and Theory, IEEE Computer Society Press, 1992.
7
. Заенцев И. В. Нейронные сети: основные модели./Учебное пособие к курсу "Нейронные сети" для студентов 5 курса магистратуры к. электроники физического ф-та Воронежского Государственного университета – e-mail: ivz@ivz.vrn.ru
8
. Лорьер Ж.Л. Системы искусственного интеллекта. – М.: Мир, 1991. – 568 с.
9
. Искусственный интеллект. – В 3-х кн. Кн. 2. Модели и методы: Справочник/ Под ред. Поспелова Д. А. – М.: Радио и связь, 1990. – 304 с.
10
. Бек Л. Введение в системное программирование.- М.: Мир, 1988.
11. Шлеер С., Меллор С. Объектно-ориентированный анализ: моделирование мира в состояниях. – К.: Диалектика, 1993. – 240 с.
12
. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++. - http://www.nexus.odessa.ua/files/books/booch.
13. Аджиев В. MS: корпоративная культура разработки ПО – http:// www.osp.ru
14. Трофимов С.А. Case-технологии. Практическая работа в RationalRose. – М.: ЗАО "Издательство БИНОМ", 2001.
15
. Новичков А. Эффективная разработка программного обеспечения с использованием технологий и инструментов компании RATIONAL. – http://www.interface.ru
16. Selic B., RumbaughJ. Использование UML при моделировании сложных систем реального времени. - http://www.interface.ru.