Контрольная работа по предмету "Информатика"


Унификация алгебраических выражений

Содержание


Введение


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.



Не сдавайте скачаную работу преподавателю!
Данную контрольную работу Вы можете использовать для выполнения своих заданий.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :