- •Содержание
- •Введение
- •Глава 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.19. Библиотеки Turbo Prolog’а
Штатные средства языка Турбо Пролог достаточны только для того, чтобы писать на нем учебные программы. Для решения научных задач их недостаточно, поэтому разработчики программного обеспечения дополняют эти средства специальными библиотеками программ. Для использования например BGI-графики, т.е. стандартной Borland-графики в Турбо Прологе необходимо в разделе constants определить маршрут для bgi-модулей в виде
Constants bgi_path=”e:\\prolog\\bgi”
где указывается каталог, в котором находятся bgi-модули, затем подключить модуль описаний
include”e:\\prolog\\programs\\GRAPDECL.PRO”.
После этого в предикате необходимо инициализировать графику предикатом
initgraph(detect, 0, Graphdriver, Graphmode, bgi_path).
После такой инициализации становятся доcтупными предикаты стандартной Borland-графики, например:
-
arc(x, y, beg, end, r) – дуга с центром в (х, у), с углом (end-beg) и радиусом r.
-
line(xstart, ystart, xend, yend) – линия с начальной и конечной точками.
-
circle(x, y, r) – круг с центром в точке (х, у) и радиусом r.
-
rectangle(x1, y1, x2, y2) – прямоугольник с координатами противоположных вершин.
-
outtextxy(x, y, Title) – вывод текста Title, начиная с точки (х, у).
-
Полный список доступных операторов можно найти в справке Help.
-
Пример организации движения слов в Прологе.
-
сonstants
-
bgi_path=”e:\\prolog\\prolog\\bgi”
-
include “e:\\prolog\\prolog\\programs\\GRAPDECL.PRO”
-
Predicates
-
dvig(integer, string)
-
dvi(integer, string)
-
goal
-
initgraph(detect, 0, GraphDriver, PraphMode, bgi_path), setbkcolor(3), setcolor(12),
-
settextstyle(0, 0, 3), outtextxy(10, 50, “волк”), outtextxy(10, 70, “коза”), outtextxy(10, 90, «капуста»),
-
outtextxy(10, 110, “один”), getimage(10, 50, 100, 70,X), dvig(1, X),
-
getimage(10, 70, 100, 90, Y), dvig(1, Y), getimage(10, 90, 100, 110, Z), dvi(500, Z), readchar(_),
-
closegraph.
-
clauses
-
dvig(500,_).
-
dvig(A,X):–putimage(A, 0, X, 1), putimage(A, 0, X, 1), A1=A+1, A<500, dvig(A1, X).
-
dvi(1,_).
-
dvi(A,X):–putimage(A, 0, X, 1), putimage(A, 0, X, 1), A1=A-1, A>1, dvi(A1, X).
7.19. Модульное программирование
Программа в Turbo Prolog’е может состоять из отдельных модулей. Модули могут быть описаны, отредактированы отдельно, а затем связаны в программу. В модулях все имена и области значений считаются локальными (локальный – иначе местный), т.е. в разных модулях можно использовать одинаковые имена.
Всякий модуль определяется посредством своего первого имени (без типа файла). Все модули входят в одну программу, которая называется проект. Имя проекта должно быть задано в начале каждого модуля следующим предикатом:
Project «newproject» – уникальное (свое) имя
Файл, содержащий проект, имеет специальное расширение prj. Среди модулей, входящих в проект, только один модуль может иметь имя «global.pro» (обязательно – это главный)
Если программа состоит из модулей, то Turbo Prolog ищет заданные, определяющим словом Project, имена модулей, которые должны быть обработаны. Для этого необходимо, чтобы в библиотеке имелся специальный файл, который имеет имя librarian и который содержит список имен модулей в виде: имя1 + имя2 + имя3+ …
Для составления этого файла в меню SETUP имеется подменю librarian. При создании проекта автоматически создается символьная таблица, которая сохраняется в файле obj – оглавление и имеет расширение sym.
Для компиляции и связывания модулей должны быть выполнены следующие условия.
-
Всякий модуль должен начинаться с директивы Project.
-
Только один модуль может иметь имя global.pro.
-
Только один из модулей может иметь раздел goal.
-
Модули должны компилироваться с опцией to obj.
Последний модуль компилируется с to exe. В этом случае автоматически запускается редактор связи и создается исполнимая программа. Редактировать, значит связать все файлы в единое целое.
Процесс связывания можно реализовать с помощью файла проекта и ВАТ-файла PLINK следующим образом:
PLINK NEW proj, где NEW PROJ –имя проекта файла.
PLINK может быть использована из под DOS. В ней могут быть заданы групповые имена, т.е. параметры %1, %2, %3 (вместо % можно ставить имя):
%1 – имя проекта или модуля,
%2 – имя устройства и путь, задающий оглавление, в которое будет записан exe файл,
%3 – имя устройства и путь к каталогу, где располагаются следующие программы: prolog.lib, init. Obj.
При запуске из Turbo Prolog’а в режиме автоматического связывания эти параметры принимают следующие значения:
-
имя проекта или программы,
-
текущий путь exe оглавления системы Turbo Prolog,
-
текущий путь оглавления Turbo Prolog’а.
При запуске из-под DOS обязательно следует задать первый параметр. По умолчанию 2 и 3 параметры будут использовать текущие оглавления. Команда PLINK проверяет существует ли файл с расширением sym и выбирает связывать проект или редактировать один объектный файл.
Программы, которые взаимодействуют через границы модулей, должны использовать предикаты из специальной секции: global predicates, и иметь общие данные из секции: global domains.
При описании глобальных предикатов они записываются в следующем виде:
predicate (d1, d2,…dn) – (f, f, f)(f, f,…f), где d1, d2,…dn – глобальные области значений, группа f – задает потоковый шаблон.
Каждый модуль исходного проекта должен содержать одни и те же глобальные предикаты и одну и ту же глобальную область значений. Поэтому его записывают в один файл и подключают ко всем остальным с помощью оператора include.
Тогда общая структура модуля будет иметь следующий вид:
domains
global domains
database
predicates
global predicates
goal
clauses
Запишем пример содержимого файла проекта под именем coma.prj
main1+
delo+
и два файла *.pro
main1.pro
project «coma»
global domains
text=string
global predicates
write1(text)
predicates
turbo
goal
turbo
clauses
turbo:–write(“gggg”).
Файл delo.pro
project «coma»
global domains
text=string
global predicates
write1(text)-(i)
clauses
write1(X):–write(X).
Все файлы следует поместить в каталог, где находится файл prolog.exe со всеми своими модулями. Затем производится компиляция в режиме compile project. Откомпилированные модули записываются в директорию, куда распределяются файлы EXE (туда помещаются файлы coma.exe, coma.sym, delo.obj, main1.obj).