- •1 Общая характеристика дисциплины
- •1.1 Значение дисциплины ии
- •1.2 Понятие "искусственный интеллект"
- •1.3 Краткая история развития ии
- •1.4 Классификация систем ии
- •Представления знаний - центральная проблема ии.
- •Компьютерной лингвистики, решение которой обеспечивает процесс естественно- языкового общения с эвм и процесс автомтического перевода с иностранных языков.
- •Компьютерной логики, имеющей особо важное значение для развития экспертных систем, поскольку ее цель – моделирование человеческих рассуждений.
- •1.5 Основные направления развития ии
- •2Языки систем искусственного интеллекта
- •2.1 Общие сведения о языках сии
- •2.2 Язык лисп
- •2.2.1 Алфавит
- •2.2.2 Атомы и точечные пары
- •2.2.3 Списки
- •2.2.4 Арифметические функции языка лисп
- •2.2.5 Функции setq и quote
- •2.2.6 Функции car и cdr
- •2.2.7 Композиция функций саr и cdr.
- •2.2.8 Пустой список
- •2.2.9 Функция cons
- •2.2.10 Логические значения и предикаты
- •2.2.11 Предикаты атом и eq
- •2.2.12 Предикат null
- •2.2.13 Предикаты, классифицирующие атомы
- •2.2.14 Арифметические предикаты сравнения
- •2.2.15 Операции над строками битов
- •2.2.16 Функция cond
- •2.2.17 Определяющее выражение функции
- •2.2.18 Определяемые функции
- •2.2.19 Рекурсивные функции
- •2.2.20 Prog- механизм.
- •2.3 Обращение (инверсия) списков
- •2.4 Вычисление факториала числа
- •2.5 Вычисление длины списка
- •2.6 Вычисление длины списка и его подсписков
- •2.7 Соединение списков
- •2.8 Удаление элемента из списка
- •2.9 Функция, вычисляющая список общих элементов двух списков
- •2.10 Функция, объединяющая два списка и не включающая повторяющиеся элементы
- •2.11 Ассоциативные списки
- •2.12 Функции, изменяющие значения указателей
- •2.13 Функции read и print
- •2.14 Функция eval
- •3 Представление задач и поиск решений
- •3.1 Представление задач в пространстве состояний
- •3.2 Сведение задачи к подзадачам
- •3.3Представление задач в виде доказательства теорем
- •3.4 Поиск решения в пространстве состояний
- •3.5 Алгоритм поиска в ширину
- •3.6 Алгоритм поиска в глубину
- •3.7Алгоритм равных цен
- •3.8 Алгоритмы эвристического (упорядочного) поиска
- •3.9 Поиск решения задачи, при сведении задачи к подзадачам
- •3.10 Представление знаний
- •3.10.1 Продукционные системы
- •3.10.2Семантические сети
- •3.10.3 Представление знаний фреймами
- •3.11 Сопоставление с образцом
- •3.11.1 Функции Mapcad, Apply и Funcall
- •3.11.2 Свойства Атомов
- •3.11.3 Функция сопоставления с образцом
- •3.11.4 Присваивание значений при сопоставлении с образцом
- •3.11.5 Функции Explope, Compress, AtomCar, AtomCdr
- •3.11.6 Задание ограничений при сопоставлении с образцом
- •3.12 Программная реализация лисп - машин
- •3.12.1 Структура памяти лисп - машины
- •3.12.2 Диалекты языка лисп
- •3.12.3 Аппаратная реализация языка лисп
- •4 Математические основы логического вывода
- •4.1 Решение задач с помощью доказательства теорем
- •4.2 Тождественные преобразования при доказательстве теорем
- •4.3 Принцип резолюции
- •4.4Примеры применения принципа резолюции
- •4.5 Система управления роботом strips.
- •5Решение задач искусственного интеллекта на языке пролог
- •5.1 Применение метода доказательства теорем в системе пролог
- •5.2 Особенности программирования на пролоГе
- •5.4 Арифметические предикаты
- •5.5 Предикаты управления возвратом
- •5.6 Программа вычисления квадратного корня
- •5.7 Вычисление n!
- •5.8 Область действия предиката отсечения
- •5.9 Отрицание на пролоГе
- •5.10 Определение структур управления
- •5.11 Организация циклов в языке пролог
- •5.11.1 Цикл repeat-fail
- •5.11.2 Сопоставление цикла с возвратом и рекурсии
- •5.12 Операторная запись.
- •5.13 Ввод-вывод в системе пролог
- •5.13.1 Предикаты ввода-вывода символов
- •5.13.2 Предикаты ввода-вывода термов
- •5.13.3 Примеры применения предикатов ввода-вывода
- •5.14 Предикат name
- •5.15 Предикаты проверки типов термов
- •5.16 Создание и декомпозиция термов
- •5.17 Предикаты работы с базой данных .
- •5.18 Бинарные деревья
- •5.18.1 Построение бинарного дерева
- •5.18.2 Преобразование списка в упорядоченное дерево
- •5.18.3 Преобразование дерева в список
- •5.18.4 Удаление элемента из дерева
- •5.18.5 Поиск в глубину
- •5.18.6 Поиск в ширину
- •5.19 Поиск решений в игровых программах.
- •5.20 Обратное усечение дерева.
5.13.2 Предикаты ввода-вывода термов
Для чтения и записи термов используют предикаты read и write.
read(X) - читает терм из входного потока и сопоставляет его с X. В случае неуспеха не происходит возврата для ввода следующего терма и read терпит неудачу.
Терм, который считывается из входного потока должен заканчиваться '.' и, в зависимости от версии или ' '(пробел) или символом 'ВК'. Наиболее часто встречается '.' При считывании EOF Х принимает значение end_of_file.
?- read(X). элемент(Y,L).
X = элемент(Y,L).
write(X) - вывод терма в выходной поток в видимой форме.
read (<имя_потока>,X) - ввод/вывод в/из потока
write(<имя_потока>,X) -
Для форматирования вывода используются также предикаты
TAB(N) (от слова табуляция) и nl (new line).
tab(N) - вывести в выходной поток N пробелов
tab(<имя_потока>,N)
nl - заносит в текущий выходной поток 'ВК'/EOL
nl(<имя_потока>)
5.13.3 Примеры применения предикатов ввода-вывода
ПРИМЕР 1: Вывод списка - непрерывный; построчный.
непрерывный_вывод_списка( [] ).
непрерывный_вывод_списка( [A|L] ):-
write(A), tab(1),
непрерывный_вывод_списка(L).
построчный_вывод_списка( [] ).
построчный_вывод_списка( [A|L] ):-
write(A), nl,
построчный_вывод_списка(L).
ПРИМЕР 2: рейс(Ном, Откуда, Куда, Прилет, Отлет)
write(рейс(Ном, Откуда, Куда, Прилет, Отлет)).
вывод_на_экр_рейс(рейс(Ном, Откуда, Куда, Прилет, Отлет)):-
write(Откуда), write(' ---> '), write(Куда),nl,
write('Номер рейса'), write(Ном), nl,
write('Время вылета'), выв_время(Отлет), nl,
write('Время прилета'), выв_время(Прилет).
выв_времени( [Часов|Минут] ) :-
write(Часов), write(' часов '), write(':'),
write(Минут), write(' минут ').
ВЫВОД :
Симферополь ---> Москва
Номер рейса : А-20
Время вылета: 11 часов : 20 минут
Время прилета: 11 часов : 22 минут
ПРИМЕР 3: Пусть существует БД вида
адрес( Имя, Адрес ).
вывод_на_экран_адреса :-
repeat, write(' Введите имя '), nl,
read( Имя ),
( Имя = end, !;
адрес( Имя, Адрес),
write( Адрес ), nl, fail ).
ПРИМЕР 4:
чтение_файла :-
repeat, read(T),
( T = end_of_file, !;
обработка(T), fail ).
ПРИМЕР 5: Программа калькулятора .
вычислить :-
write('Введите выражения'), nl,
read(Выражение), обработка(Выражения).
обработка(end):- !.
обработка(Выражение):-
Res is Выражение,
write('Значение'), write(Res),
вычислить.
5.14 Предикат name
Часто желательно информацию, считанную как последовательность символов, представить в программе в виде атома или наоборот. Для этого используется предикат name.
name(A,L) - истинно, если L - список ASCII-кодов
объекта А.
?- name(help,L). ?- name(X, [100,87,...]).
L = [100,87,...] X = help
Существует два типичных случая использования name:
- необходимо разбить атом на символы;
- необходимо объединить символы в атом.
ПРИМЕР : Часто необходимо вводить из файла строку - пос ледовательность символов - до символа EOL. Все что вводится д.б. значением 1-ой переменной .
ввод_строки( Строка ):-
get0(C),
( C = 13;
ввод_символа(С, Список),
name( Cтрока, Список ) ), !.
ввод_символа(13,[]) :- !.
ввод_символа(С, [ C|Остаток ]):-
get0(C1), ввод_символа(C1, Остаток).