Добавил:
wolfain@mail.ru Хз кто это читает, но знайте - открыт к любым новым знакомствам (нет). Хех. Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LabsSIILisp

.pdf
Скачиваний:
39
Добавлен:
04.03.2018
Размер:
776.89 Кб
Скачать

41

3.6.13.Какие с помощью функции LIST создать список из символов-ключей

иих значений?

3.6.14.Что такое функционал?

3.6.15.Что такое функция с функциональным значением?

3.6.16.Что такое функции высших порядков?

3.6.17.Назовите и объясните использование применяющих функционалов?

3.6.18.Объясните синтаксис передачи функционального аргумента?

3.6.19.Объясните отображающий функционал MAPCAR?

3.6.20.Объясните отображающий функционал MAPLIST?

3.6.21.Объясните отображающий функционал MAP?

3.6.22.Объясните функционал REMOVE-IF(–NOT)?

3.6.23.Что называют функциональной блокировкой?

3.6.24.Что такое лексическое замыкание? Приведите пример.

42

4. ЛАБОРАТОРНАЯ РАБОТА № 4 «ЕЯ ДОСТУП К БАЗЕ ДАННЫХ НА ОСНОВЕ АЛГОРИТМА

СОПОСТАВЛЕНИЯ С ОБРАЗЦОМ»

4.1. Цель работы

Исследование алгоритма сопоставления с образцом и особенностей его применения для формирования запросов к базам данных, а также для организации доступа к базам данных на ограниченном подмножестве естественного языка.

4.2. Краткие теоретические сведения

4.2.1. Общие правила сопоставления с образцом

Сопоставление с образцом является важнейшей операцией, выполняемой во многих системах искусственного интеллекта. Под сопоставлением с образцом (pattern matching) понимается процедура, при которой с известной символьной структурой (образцом) сопоставляется некоторая другая структура (факт, данные) с целью выявления единообразия или подобия структур.

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

Рассмотрим сопоставление с образцом, представляя образец и сопоставляемые с ним факты (данные) в виде списков языка Лисп. Простейшие возможности сопоставления реализуются встроенными предикатами Лиспа, например EQ, EQL,

EQUAL.

Для большей гибкости при сопоставлении в образце применяются условные обозначения в виде символов ? и $. Символу ? из образца можно поставить в соответствие любой элемент из списка данных, находящийся на том же месте, но только один; символу $ можно поставить в соответствие один или несколько элементов из списка данных, в том числе и пустой элемент. Ниже приведен пример, когда образец и данные сопоставимы:

ОБРАЗЕЦ — (? позволяет распознавать $)

ДАННЫЕ — (сопоставление позволяет распознавать ситуации или причины)

Обозначим сопоставимость символьных структур знаком :=:, и сформулируем основные правила сопоставления:

ОБРАЗЕЦ :=: ДАННЫЕ если ; правило 1 , пример: ( ):=: ( )

ДАННЫЕ = NIL и ОБРАЗЕЦ = NIL

43

или

; правило 2 , пример: ($ ):=: ( )

 

ДАННЫЕ = NIL и (CAR ОБРАЗЕЦ) = $

 

и (CDR ОБРАЗЕЦ) = NIL

или

; правило 3 , пример: (a b c d ):=: (a b c d )

 

(ДАННЫЕ NIL) и (ОБРАЗЕЦ) NIL

 

и (CAR ОБРАЗЕЦ) = (CAR ДАННЫЕ)

 

и (CDR ОБРАЗЕЦ) :=: (CDR ДАННЫЕ)

или

; правило 4 , пример: (? b c d ):=: (a b c d )

 

(ДАННЫЕ NIL) и (ОБРАЗЕЦ NIL)

 

и (CAR ОБРАЗЕЦ) = ?

 

и (CDR ОБРАЗЕЦ) :=: (CDR ДАННЫЕ)

или

; правило 5, пример: ($ b c d ):=: (b c d )

 

(ДАННЫЕ NIL) и (ОБРАЗЕЦ NIL)

 

и (CAR ОБРАЗЕЦ) = $

 

и (CDR ОБРАЗЕЦ) :=: ДАННЫЕ

или

; правило 6, пример: ($ d ):=: (a b c d )

 

(ДАННЫЕ NIL) и (ОБРАЗЕЦ NIL)

 

и (CAR ОБРАЗЕЦ) = $

 

и ОБРАЗЕЦ :=: (CDR ДАННЫЕ)

Обратите внимание, что введенные правила определяют понятие “сопоставимость” рекурсивно. Назначение каждого из правил видно из примеров, записанных рядом с номером правила.

4.2.2. Базовая функция сопоставления с образцом

Определим функцию (MATCH P D), выполняющую сопоставление образца P и данных D с помощью введенных выше правил (полный листинг функции приведен в приложении А):

; функция сопоставления образца p и данных d (defun match (p d)

(cond

;правило 1

((and (null p)(null d)) t)

;правило 2

((and (null d)

(eq (car p) ’$) (null (cdr p))) t)

; один из списков исчерпан

((or (null p)(null d)) nil)

;правило 3 и правило 4

((or (equal (car p) ’?) (equal (car p) (car d)))

(match (cdr p)(cdr d)))

;правило 5 и 6

((eq (car p) ’$)

(cond ((match (cdr p) d) t) ((match p (cdr d)) t))) ))

GET-MATCHES
GET-MATCHES

44

Функцию MATCH можно легко расширить, чтобы она могла сопоставлять списки с вложенными подсписками. Для этого достаточно добавить в текст функции следующее правило:

;правило 7 - сопоставление списков, включающих подсписки

((and (not (atom (car p))) (not (atom (car d))) (match (car p)(car d)))

(match (cdr p) (cdr d)) )

В этом случае функция MATCH будет обеспечивать сопоставление более сложных символьных структур. Например,

(match ’( (a

b) ? (?

d)

$)

’( (a

b) c (c

d)

1 2 3 4 5))

T

4.2.3.Применение функции сопоставления с образцом для формирования запросов к базе данных

Несмотря на то, что введенная функция MATCH реализует простейшую схему сопоставления, её уже можно использовать для решения практических задач, например, доступа к базе данных. Определим для этого функцию с двумя аргументами, представленными s-выражениями. Первый аргумент будет представлять собой запрос к базе данных, записываемый в виде образца, а второй

– список, соответствующий базе данных, в которой выполняется поиск. Функция возвращает в качестве результата записи базы данных, сопостави-

мые с запросом (образцом).

Пусть рассматривается база данных, содержащая сведения о служащих:

(setq *database*

’(((Иванов Сергей) 14000 1235) ((Абрамов Николай) 17500 3325) ((Гавриленко Ольга) 14000 3143) ((Денисенко Сергей) 22000 2528) ((Коль Татьяна) 18250 3133)

))

Вбазе данных хранятся данные о годовых доходах служащих и их табельные номера. Определим функцию GET-MATCHES, используя рекурсию:

(defun get-matches (p db) ;db - база данных

;p - запрос (образец) (cond ((null db) nil)

((match p (car db))

(cons (car db) (get-matches p (cdr db)))) (t (get-matches p (cdr db)))))

45

С помощью функции GET-MATCHES, можно получать ответы на следующие запросы:

;проверка наличия конкретной записи

(get-matches ’((Денисенко Сергей) 22000 2528) *database*)(((Денисенко Сергей) 22000 2528))

;выдать сведения о всех сотрудниках с годовым доходом 14000 (get-matches ’(? 14000 ?) *database*)

((( Иванов Сергей) 14000 1235) ((Гавриленко Ольга) 14000 3143))

;выдать сведения о всех сотрудниках, которых зовут Сергей

(get-matches ’((? Сергей) ? ?) *database*)

(((Иванов Сергей) 14000 1235) ((Денисенко Сергей) 22000 2528))

Кстати, функция будет успешно работать и с базой данной, представленной в виде списков с символами-ключами без переписывания её кода:

(setq *database2* (list

 

(list :FIO '(Иванов Сергей)

:Z 14000 :N 1235)

(list :FIO '(Абрамов Николай)

:Z 17500 :N 3325)

(list :FIO '(Гавриленко Ольга) :Z 14000 :N 3143)

(list :FIO '(Денисенко Сергей) :Z 22000 :N 2528)

(list :FIO '(Коль Татьяна)

:Z 18250 :N 3133)

))

;выдать сведения о всех сотрудниках с годовым доходом 14000 (get-matches '(:FIO ? :Z 14000 :N ?)*database2*)

((:FIO (Иванов Сергей) :Z 14000 :N 1235) (:FIO (Гавриленко Ольга) :Z 14000 :N 3143))

Единственное отличие заключается в форме записи образца при вызове функции GET-MATCHES.

4.2.4. Усовершенствование базовой функции сопоставления с образцом

Можно достигнуть еще большей универсальности приведенного выше алгоритма сопоставления, включив в него дополнительные параметры-переменные. Имена переменных в образце начинаются символом ?или $. Например, ?V или $V. В первом случае в переменную V будет подставляться произвольный символ данных, во втором — сегмент списка данных. Подстановка значений в переменные позволит получать ответы на запросы вида:

(match ’(AVTO ?MODEL ?YEAR) '(AVTO ford 1998)) T model ford

year 1998

Реализация соответствующих правил приведена в [1]. Функцию МАТСН можно совершенствовать и далее, используя ограничивающий параметр в образце

46

(restrict), который дает возможность накладывать определенные ограничения на сопоставляемое значение. Например,

(match ’((restrict ?V integerp evenp) b c) ’(36 b c)) T

(match ’((restrict ?V integerp evenp) b c) ’(36.0 b c)) NIL

В примере параметр ?V из подсписка ограничений сопоставляется с первым элементом списка данных. Если рассматриваемый элемент данных является целым четным числом, то сопоставление успешно. Использование переменных в образце позволяет запоминать сделанные подстановки и таким образом обрабатывать более сложные запросы к базе данных.

4.2.5. Обработка запросов к БД на естественном языке (ЕЯ)

Используя рассмотренную функцию сопоставления с образцом, можно написать простейшую программу, поддерживающую беседу на естественном языке. Такая программа основана на распознавании с помощью функции МАТСН ответа пользователя и формировании подходящего по смыслу вопроса для следующего шага диалога с пользователем [1]. Эту же идею можно использовать для формирования запросов к базе данных на естественном языке.

Существующие ЕЯ-интерфейсы баз данных используют различные подходы [1,3]: метод сопоставления с образцом, синтаксические грамматики, семантические грамматики, некоторый внутренний язык. Интерфейсы, основанные на методе сопоставления с образцом, являются наиболее простыми.

Приведем фрагмент программы возможной обработки ЕЯ-запросов к базе данных, представленной динамической переменной *database* (см. п.4.2.3) . Запросы вводятся в виде списка слов на естественном языке (ЕЯ). В программе примеры обрабатываемых ЕЯ-запросов представлены в виде комментариев:

(setq fact (read)) ; ввод ЕЯ запроса

; Запрос 1: (есть ли в базе запись о сотруднике Денисенко Сергей)

(cond

((match '( $ запись $ Денисенко Сергей $ ) fact) ; распознавание ЕЯ запроса

(princ (get-matches '((Денисенко Сергей) ? ?) *database*))) ; запрос к БД

; (((Денисенко Сергей) 22000 2528))

; Запрос 2: (выдать сведения о всех сотрудниках у которых годовой доход 14000)

((match '( $ всех $ годовой доход $ 14000 ) fact) (princ (get-matches '(? 14000 ?) *database*)))

; ((( Иванов Сергей) 14000 1235) ((Гавриленко Ольга) 14000 3143))

; Запрос 3: (выдать сведения о всех сотрудниках которых зовут Сергей)

((match '( $ всех $ зовут Сергей ) fact)

GET-

47

(princ (get-matches '((? Сергей) ? ?) *database*)))

; (((Иванов Сергей) 14000 1235) ((Денисенко Сергей) 22000 2528))

; Запрос 4: (как зовут сотрудника по фамилии Денисенко)

((match '( $ зовут $ фамилии Денисенко ) fact) (get-matches '((Денисенко ?V) ? ?) *database*) (princ V))…)

; Сергей

Поясним работу фрагмента программы на примере первого запроса. ЕЯзапрос, введенный с помощью функции READ, запоминается в переменой FACT. В форме COND введенный запрос сопоставляется с образцом, который подбирается так, чтобы описать распознаваемый запрос в общем виде. В примере вводится запрос «(есть ли в базе запись о сотруднике Денисенко Сергей)», который сопос-

тавляется с образцом «( $ запись $ Денисенко Сергей $ )». Так как ЕЯ-запрос сопоставим с образцом, то выполняется действие — вызывается функция MATCHES, которая выполняет поиск в базе данных нужной записи опять таки по образцу «((Денисенко Сергей) ? ?)» . Найденное значение выводится на экран с помощью функции PRINC.

Таким образом, каждый ЕЯ-запрос обрабатывается с помощью правила «образец — действие». Каждое из правил представляет клоз COND формы, которая легко дополняется новыми правилами.

ЕЯ-интерфейсы БД, построенные на основе метода сопоставления с образцом, могут приводить к ошибочным ответам, так как не учитывают семантических отношений между элементами запросов. Более гибкими являются ЕЯинтерфейсы, реализующие синтаксический разбор запросов к БД. При этом синтаксический анализ можно также выполнять на основе грамматических правил с использованием схемы сопоставления с образцом [1].

4.3. Варианты заданий

Для базы данных, созданной в лабораторной работе 3, необходимо написать на языке Лисп интерфейс, который позволяет выполнять ЕЯ-запросы с помощью алгоритма сопоставления с образцом. Ответ на запрос должен также представляться на естественном языке в виде списка слов предложения. Кроме запроса, заданного по варианту задания, предусмотреть 5-6 различных дополнительных запросов.

4.4. Порядок выполнения лабораторной работы

4.4.1.Изучить по лекционному материалу или учебному пособию [1] алгоритм сопоставления с образцом.

4.4.2.Написать функцию сопоставления с образцом в соответствии с примером, приведенным в [1]. Выполнить отладку функции по тестовым примерам.

4.4.3.Написать функцию обеспечивающую поиск записей в базе данных, по запросу, представленному в виде образца. В качестве аналога можно использовать

48

функцию GET-MATCHES. Рекомендуется переопределить её с использованием отображающего функционала MAPCAR.

4.4.4.Разработать запросы и соответствующие образцы к ним для тестирования разработанных функций. По результатам тестирования внести необходимые изменения (расширения) в разработанные функции.

4.4.5.Дополнить разработанную программу правилами обработки ЕЯзапросов. Для этого разработать соответствующие образцы, обеспечивающие распознавание ЕЯ-запросов и фрагменты кода, осуществляющего необходимые действия в случае успешного распознавания. Выполнить тестирование программы для всех разработанных запросов.

4.4.6.Написать функции, необходимые для преобразования результатов поиска в ЕЯ-форму, и дополнить ими правила из п.3.4.5. Выполнить окончательную отладку программы.

4.4.7.Выполнить анализ работы программы на разных запросах, определить ограничения программы и зафиксировать результаты её работы в виде экранных копий.

4.4.8.Факультативно предлагается расширить программу таким образом, чтобы она могла вести с пользователем диалог на естественном языке в рамках сведений, содержащихся в базе данных.

4.5.Содержание отчета

Цель работы, вариант задания, общие правила построения функции сопоставления с образцом, описание выполненных дополнений для функции сопоставления с образцом, описание разработанной функции поиска записей в БД по образцу, описание набора правил распознавания ЕЯ-запросов, описание тестовых ЕЯ-запросов и результатов их выполнения, оценка ограничений программы, выводы.

4.6. Контрольные вопросы

4.6.1.Объясните суть задачи сопоставления с образцом? Где встречается эта

задача?

4.6.2.Какие функции языка Лисп выполняют простейшее сопоставление с

образцом?

4.6.3.Какие специальные символы используют в образце и что они обозна-

чают?

4.6.4.Объясните общие правила сопоставления с образцом.

4.6.5.Напишите базовую функцию сопоставления с образцом.

4.6.6.Как расширить базовую функцию сопоставления с образцом, чтобы она могла сопоставлять списки, включающие подсписки?

4.6.7.Как выполнить доступ к базе данных по образцу? Определите необходимую функцию.

4.6.8.Как обозначают переменные в образце, если необходимо запоминать подстановки в ходе выполнения сопоставления?

49

4.6.9.Определите дополнительные правила для базовой функции сопоставления с образцом, если требуется запоминать подстановки.

4.6.10.Для чего вводится пакет ограничений образца?

4.6.11.Определите правила обработки пакета ограничений образца.

4.6.13.Объясните общий принцип построения программы, распознающей EЯ-запросы по образцу.

4.6.14.Приведите пример правил для распознавания ЕЯ-запроса по образцу.

4.6.15.Какие недостатки свойственны ЕЯ-интерфейсу, построенному на принципе сопоставления с образцом?

4.6.17. Что необходимо учитывать, чтобы улучшить обработку ЕЯзапросов?

50

5. ЛАБОРАТОРНАЯ РАБОТА № 5 «МЕТОДЫ ПОИСКА РЕШЕНИЙ ЗАДАЧ В ПРОСТРАНСТВЕ

СОСТОЯНИЙ»

5.1. Цель работы

Исследование методов поиска решений задач в пространстве состояний и овладение методологией решения логических задач с применением этих методов.

5.2. Краткие теоретические сведения

5.2.1. Формулировка задач в пространстве состояний

При решении любой задачи можно выделить два этапа: выбор способа представления задачи и собственно решение. Задача поиска в пространстве состояний, определяется совокупностью четырех составляющих

(S0, S, F, G),

(5.1)

где S — множество возможных состояний задачи; S0 — множество начальных состояний, S0 S; F — множество операторов, преобразующих одни состояния в другие; G — множество целевых состояний, G S [1].

Каждый оператор f F является функцией, отображающей одно состояние в другое — sj=f(si ) , где si, sj S. Решением задачи является последовательность операторов fi F, преобразующих начальные состояния в конечные, т.е. fn(fn-1(…(f2(f1(S0 )))…)) G . Если такая последовательность не одна и задан критерий оптимальности, то возможен поиск оптимальной последовательности.

Поиск решения в пространстве состояний представляют в виде графа состояний. Множество вершин графа соответствует состояниям задачи, а множество дуг (ребер) — операторам. Тогда решение задачи может интерпретироваться как поиск пути на графе.

Уточним сказанное на примере задачи игры в восемь. В игре используются фишки, пронумерованные от 1 до 8 (рисунок 5.1). Фишки располагаются в ячейках матрицы размером 3 3. Любая фишка, смежная с пустой ячейкой, может быть передвинута в позицию, соответствующую пустой ячейке. В игре ищут последовательность ходов, переводящих игру из начального состояния в конечное состояние, изображенное на рисунке 5.1 справа.

Формулировка этой задачи в пространстве состояний требует определения всех составляющих выражения (5.1).

Состояния. Описание состояния должно определять местонахождение каждой из восьми фишек и пустой ячейки.

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

Целевое состояние. Показано на рисунке 5.1 справа.

Соседние файлы в предмете Искусственный интеллект