- •Содержание
- •Введение
- •Глава 1. Основные понятия
- •1.1. Понятие об искусственном интеллекте
- •1.1.1. Точка зрения Петрунина.
- •1.1.2. Интеллектуальные алгоритмы.
- •1.2. Основные направления исследования в области ии
- •1.3. Данные и знания. Основные модели представления знаний
- •Глава 2. Логические модели представления знаний
- •2.1. Логика высказываний
- •2.1.1. Булева алгебра.
- •2.1.2. Понятие о логическом следствии.
- •2.1.3. Метод резолюции в лв.
- •Имеет место теорема о полноте резолютивного вывода. Множество клозов противоречиво тогда и только тогда, когда из него методом резолюции можно вывести пустой клоз.
- •2.2. Логика предикатов первого порядка
- •2.2.1. Основные определения.
- •2.2.2. Метод резолюции в лппп.
- •2.2.3. Стратегии проведения резолюции.
- •2.2.4. Упорядоченный линейный вывод в лппп.
- •2.2.5.Применение поиска в пространстве состояний при реализации автоматизированного логического вывода.
- •2.2.6. Логический вывод на хорновских дизъюнктах.
- •Понятие экспертной системы и применение логического вывода при построении экспертных систем.
- •2.2.9. Запросы класса b.
- •2.2.10. Запросы класса c.
- •2.3. Понятие о нечетком выводе
- •2.4. Неклассические логики
- •2.4.1. Логики высших порядков.
- •2.4.2. Модальные логики.
- •2.4.3. Многозначные логики.
- •Глава 3. Продукционные модели представления знаний
- •3.1. Основные понятия
- •3.2. Стратегии управления
- •3.2.1. Поиск с возвратом.
- •3.2.2. Поиск в пространстве состояний.
- •3.3. Понятие о коммутативных системах продукций
- •3.4. Понятие о нечетком выводе на продукциях
- •3.5. Сравнение продукционных и логических моделей
- •Глава 4. Реляционные языки представления знаний
- •4.1. Основные элементы естественных языков
- •4.2. Дескрипторные модели
- •4.2.1. Понятие об ипс.
- •4.2.2. Линейная модель работы ипс.
- •4.2.3. Понятие о многоуровневом поиске.
- •4.2.4. Основные характеристики ипс.
- •4.4. Синтагматические цепи
- •4.4.1. Понятие синтагматических цепей.
- •4.4.2. Фреймы.
- •4.5. Сетевые модели представления знаний
- •4.5.1. Понятие семантической сети.
- •4.5.2. Структура интеллектуальной системы доступа к данным на основе семантической сети.
- •4.5.3. Задача поиска кратчайшего обхода образца в семантической сети.
- •4.5.4. Понятие о логическом выводе на семантических сетях.
- •Глава 5. Нейронные сети
- •5.1. Параллели из биологии
- •5.2. Базовая искусственная модель
- •5.3. Применение нейронных сетей
- •5.4. Обучение сети
- •Глава 6. Организация диалога с эвм на естественном языке
- •6.1. Элементы теории формальных языков
- •6.2. Обратная польская запись
- •6.3. Недостатки применения аппарата формальных грамматик
- •6.4. Элементы семиотики
- •6.5. Модель непосредственных составляющих
- •6.6. Многозначность в естественных языках
- •6.7. Расширенные сети переходов
- •6.8. Глубинные (семантические) падежи
- •Глава 7. Логическое программирование на языке пролог
- •7.1. Основные понятия в языке Пролог
- •7.2. Пакет Turbo Prolog
- •7.3. Структура программы
- •7.4. Поиск решений
- •7.5. Механизм отката
- •7.6. Операторы. Декларативный и процедурный смысл программы
- •7.7. Повторение и рекурсия
- •7.8. Повторение и откат
- •7.8.1. Метод отката после неудачи (опн).
- •7.8.2. Метод отсечения и отката (оо).
- •7.8.3. Метод повтора, определенный пользователем.
- •7.9. Методы организации рекурсии
- •7.10. Отладка программы и обнаружение ошибок
- •7.11. Графика в Turbo Prolog’е
- •7.11.1 Создание меню.
- •7.11.2. Создание графического режима.
- •7.11.3. Черепашья графика
- •7.12. Списки и их использование
- •7.12.1. Использование списка.
- •7.12.2. Поиск элементов в списке.
- •7.12.3. Создание нового списка путем слияния двух списков
- •7.12.3. Разделение на два списка.
- •7.13. Сортировки
- •7.13.1. Наивная сортировка.
- •7.13.2. Сортировка включением.
- •7.13.3. Метод «пузырька».
- •7.13.4. Быстрая сортировка.
- •7.14. Компоновка данных из базы в список
- •7.15. Работа с символами и строками
- •7.16. Специальные строки
- •7.17. Работа с файлами
- •7.18. Создание динамических баз данных
- •7.19. Библиотеки Turbo Prolog’а
- •7.19. Модульное программирование
- •7.20. Решение задачи о волке, козе и капусте
- •Глава 8. Введение в язык лисп
- •8.1. Основные особенности языка Лисп
- •8.2. Понятия языка Лисп
- •8.2.1 Атомы и списки.
- •8.2.2 . Внутреннее представление списка.
- •8.2.3 .Написание программы на Лиспе.
- •8.2.4. Определение функций.
- •8.2.5. Рекурсия и итерация.
- •В) maplist. Эта функция действует подобно mapcar, но действия осуществляет не над элементами списка, а над последовательными cdr этого списка.
- •8.2.6 . Функции интерпретации выражения.
- •8.2.7. Макросредства.
- •8.2.8. Функции ввода-вывода.
- •Список используемых источников
- •Перечень используемых сокращений
7.17. Работа с файлами
К файловым обработкам относятся операции создания файлов, запись, чтение, изменение и добавление. Данные из файлов могут обрабатываться либо как непрерывный поток символов, либо как структурированные объекты типа записей базы данных.
Список предикатов работающих с файлами.
-
readevice (имя устройства) вводное устройство, тип операции – чтение (клавиатура).
Writedtvice (имя устройства) устройство вывода (принтер, экран, модем).
readevice – открыть устройство на чтение.
writedtvice – открыть устройство на запись.
Программа:
domains str=string
predicates
data (str)
writelines
goal
writelines.
clauses
data (“этот текст”).
data (“который мы”).
data (“хотим вывести”).
data (“на принтер”).
writelines: – data (Line),
write (“ “, Line), nl,
writedevice(printer),
write(“ “, Line), nl,
flush (printer),
writedtvice (screen) – переключение на экран
fail – неудача
writelines.
Flush (очистка буфера) – используется для сброса данных из внутреннего буфера. Принтер печатает только тогда, когда буфер будет заполнен.
В качестве устройств ввода–вывода могут быть назначены и файлы, например, readdevice(myfile). Чтение файла может быть целиком, либо выборочное, запись может быть в виде создания, дозаписи и модифицирования.
-
deletefile (Df) – уничтожение файла.
-
save (Df) – сохранение базы данных в виде файла.
-
renamefile (Df) – переименование файла.
-
existfile (Df) – проверка существования файла с данным именем.
-
disk (path) – выбор дисковода и траектории.
-
dir ( ) – выдача каталога директория.
-
flush(fd)-сброс данных из внутреннего буфера.
Df – dos_filеname – имя файла в директории, fd – описываемый пользователем файловый домен.
dir (траектория или маршрут, специализация файла, имя файла).
Этот предикат выдает каталог имен на выбранном диске, позволяет стрелками выбрать один из файлов, а вводом присваивает это имя имени файла.
Для работы с файлом необходимо в разделе domains описать файловый домен, который должен быть там единственным: File = datafile. Если доменов несколько: File = datafile1; datafile2;…
Символическое имя файла datafile является идентификатором, который логически отождествляется с dos именем файла (имя, расширение).
7.18. Создание динамических баз данных
Достоинством Пролога является простота создания динамических баз данных. Основной задачей систем управления баз данных СУБД является добавление, удаление и корректирование записей в базе. Как известно из курса «Информационные системы», самая распространенная модель данных – реляционная.
Данные в реляционной базе данных представляются в виде таблицы. Под каждую запись в БД отводится одна строка, которая рассматривается как элемент отношения. Число элементов отношения является мощностью отношения. Число колонок (полей) в записи называется арностью. Имя колонки является атрибутом. Например, табличный список студентов:
-
ФИО
Группа
№ студента
Фамилия, группа и номер образуют запись в базе, которую можно определить предикатом dstudent (name, groupe, position). Таким образом, можно установить следующие соответствия:
База данных Турбо Пролога |
Реляционная база |
Предикат базы |
Отношение |
Объект |
Атрибут |
Отдельное утверждение |
Элемент отношения |
Количество утверждений |
Мощность |
Имя предиката |
Имя таблицы |
Для работы с базами данных в Прологе имеются следующие встроенные предикаты.
-
asserta – заносит новый факт в базу данных (БД) в ?????(ОЗУ). Заносит так, что новый факт помещается перед всеми ранее внесенными фактами.
-
assertz – помещает новый факт в конец БД.
Например.
assertbase: - student (name, group, number),
assertz (dstudent (name, group, number)),
fail.
assertbase: -!.
-
retract – удаляет утверждение из БД (удаляет конкретную запись)
Например, из записи убрать конкретного студента:
Retract (dstudent («Иванов», 461, 5))
Предикаты для работы с базой в целом:
-
save – предикат, сохраняющий БД на диске из ОЗУ.
save (Dos_filename) – сохраняет из ОЗУ на диске.
-
consult (Dos_filename) – считывает базу из файла на диске в ОЗУ. Consult неуспешен, если нет файла, неправильный синтаксис описания, нельзя разместить в ОЗУ из-за недостатка места.
-
readterm (Domain, Term) – считывает из файла объекты, относящиеся к определенному домену: readterm(auto_record,auto(Name, Year, Price))
Пример:
domains
name = string
group = integer
number = integer
student(name, group, number)
readterm(dstudent, student(name, groupe, number))
Для получения списка всех студентов можно использовать предикат findall(Name, dstudent(Name, _, _), Namelist). Переменная Namelist будет содержать список всех имен.
При проектировании БД необходимо учитывать следующие факторы.
-
Размер БД (для того, чтобы выбрать, где будет делаться база в ОЗУ или на диске).
-
Организация элементов БД.
-
Способы работы и содержание БД.
База данных создается в ОЗУ, если размер базы данных относительномал. Сначала необходимо задать начальные данные и создать базу. После того как БД создана, необходимо организовать её работу, которая включает следующее:
-
занесение новых данных,
-
удаление данных,
-
выборка и вывод данных на экран.
Допустим, создаем базу данных студентов физического факультета, в которую заносим следующую информацию: фамилия, номер группы и номер студента в группе. Для работы с ней необходим предикат, кодирующий эту информацию.
student(p_name, /* полное имя (string) */
G_number,/* номер группы */
Pos ) /*номер в группе*/
Группа предикатов записывается в виде:
student(“Irina Fux, 484,5) и т.д.
Раздел domains
p_name=string
g_number,pos=integer
Предикаты динамической базы данных описываются в разделе Database:
dstudent (p_name, g_number, pos).
При запуске на выполнение, утверждения базы данных помещаются отдельно от обычных утверждений в оперативной памяти.
В разделе предикатов описываем все другие предикаты:
predicates
repeat
do_mbase
assert_database
menu
process(integer)
clear_database
student(p_name, g_number, pos)
error
Предикат student предназначен для задания начального содержимого базы данных. Эта информация засылается в утверждения предиката dstudent.
База данных «Студенты».
domains
p_name=string
g_number, pos=integer
database
dstudent(p_name, g_number, pos)
predicates
repeat
do_mbase
assert_database
menu
process(integer)
clear_database
student(p_name, g_number, pos)
error
goal
do_mbase
clauses
repeat
repeat:-repeat,
student(“Ivan Ivanov”, 543, 3)
student(.......)
assert_database:– student(P_name, G_name,Pos), assertz(dstudent(P_name, G_name, Pos), fail.
assert_databse:– !.
сlear_database:– retract(dstudent(_,_,_)), fail.
сlear_database:– !.
вo_mbase:– assert_database, makewindow(1, 7, 7, “Student Base”, 0, 0, 25, 80), menu, clear_database.
Menu:– repeat, clearwindow, write(«Text of help»), write(«Input choice(1,2,3,4):”), readint(Choice), nl, process(Choice), Choice=4, !.
Process(1):– makewindow(2, 7, 7, “Add student to base”, 2, 20, 18, 58), shiftwindow(2), write(“Input Name”), readln(P-name), write(“Input group”), readint(G-number), write(“Input number”), readint(Pos), assertz(dstudent(P_name, G_number, Pos)), write(P_name, “add to base”), nl, !, write(“press space”), readchar(_), removewindow.
Process(2):– makewindow(3, 7, 7, “Deleting”, 10, 30, 7, 40), shiftwindow(3), write(“Input Name”), readln(P_name), retract(dstudent(P_name,_,_)), write(P_name, “Deleted”), nl, !, write(“Press space”), readchar(_), removewindow.
Process(3):– makewindow(4, 7, 7, “review”, 7, 30, 16, 47), shiftwindow(4), write(“Input Name”), readln(P_name), dstudent(P_name, G_number, Pos), nl, write(“Name of student:”, P_name), write(“Group”, G_number), write(“Position”, Pos), nl, nl, !, write(“Space”), readchar(_), removewindow).
Process(3):– makewindow(5, 7, 7, ”Nobody”, 14, 7, 5, 60), shiftwindow(3), write(“Cant find”), nl, nl, write(“Sorry”), nl, !, write(“Space”), readchar(_), removewindow, shiftwindow(1).
Process(4):– write(“Are you shure?/Y/N”), readln(Answer), frontchar(Answer, ’Y’,_), !.
Process(Choice):– Choice<1, error.
Process(Choice):– Choice>4, error.
Error:– write(“Input number from 1 to 4”), write (“Space”), readchar(_).
Базы данных можно хранить и на внешних носителях. В этом случае к вышеприведенной программе добавляются правила чтения и записи внешних файлов. Вспомогательные модули dbassert и dbass заносят в базу новые данные. Вводятся два терма, обозначающие файл базы данных и служебный индексный файл.
domains
file=datafile; indexfile
name=string
group=integer
database
team(name, group)
predicates
repeat
menu
process(integer)
do_base
dbassert(dbasedom) – содержит ссылки на файл базы данных и служебный файл
dbass(dbaedom, string, string)
dbretract(dbasedom)
dbret(dbasedom, string, string) – ищет запись и удаляет
dbret1(dbasedom, real)
dbread(dbasedom)
dbrd(dbasedom, string, string) – ищет и читает данные
dbaaccess(dbasedom, real) –ищет и читает в индексном файле
goal
do_dbase
clauses
co_dbase:– makewindow(1, 7, 7, “Kurse”, 0, 0, 24, 80), menu.
menu:–repeat, clearwindow, nl, write(“1.add 2delete 3 review 4 exit”), nl, write(“Input choice 1 2 3 4”), readint(Choice), nl, Choice>0, Choice<5, process(Choice), Choice=4, !.
Process(1): – аналогично предыдущей программе/