
- •1 Основные понятия
- •1.1 Происхождение и понимание термина «искусственный интеллект»
- •1.2 Подходы к пониманию проблемы
- •Тест Тьюринга и интуитивный подход
- •Символьный подход
- •Логический подход
- •Агентно-ориентированный подход
- •Гибридный подход
- •1.3 Модели и методы исследований Символьное моделирование мыслительных процессов
- •Работа с естественными языками
- •Представление и использование знаний
- •Машинное обучение
- •Биологическое моделирование искусственного интеллекта
- •Робототехника
- •Машинное творчество
- •Другие области исследований
- •Современный искусственный интеллект
- •Некоторые из самых известных ии-систем:
- •1.4. Классификация интеллектуальных систем
- •1.5 Методы поиска решений
- •Генетические алгоритмы
- •2. Представление знаний в системах искусственного интеллекта
- •2.1 Представление знаний
- •Формальная (Аристотелева) логика и логика высказываний
- •Как упростить логическую формулу?
- •Как решать логические задачи?
- •Решение логических задач средствами алгебры логики
- •Решение логических задач табличным способом
- •Решение логических задач с помощью рассуждений
- •Логика предикатов
- •3 Логическое программирование на прологе
- •Объекты данных
- •Представление списков
- •Некоторые операции над списками
- •Ограничение перебора
- •Пример Пролог программы
- •4 Логика предикатов второго порядка
- •5. Нечеткая логика
- •Нечеткие множества
- •Основные характеристики нечетких множеств
- •Методы построения функций принадлежности нечетких множеств
- •Операции над нечеткими множествами
- •Наглядное представление операций над нечеткими множествами
- •Свойства операций и
- •Нечеткая и лингвистическая переменные
- •Нечеткие высказывания и нечеткие модели систем
- •Нечеткая база знаний
- •6 Байесовы сети
- •6.1. Простейший логический вывод
- •6.2. Распространение вероятностей в эс
- •6.3. Последовательное распространение вероятностей
- •6.4. Экспертные системы, использующие субъективные вероятности
- •6.5 Байесовские сети доверия как средство разработки эс
- •6.5.1. Основные понятия и определения
- •6.5.2. Пример построения простейшей байесовской сети доверия
- •6.5.3. Процесс рассуждения (вывода) в байесовских сетях доверия
- •6.5.4. Байесовские сети доверия как одно из направлений современных экспертных систем
- •6.6 Сети доверия с условными гауссовскими переменными
- •6.6.1. Непрерывные случайные величины
- •6.6.2. Непрерывные гауссовские переменные
- •6.6.3. Числовые характеристики случайных величин
- •6.6.4. Совместное использование дискретных и непрерывных переменных в байесовских сетях доверия
- •6.6.5. Логический вывод в байесовских сетях доверия с непрерывными и дискретными состояниями
- •6.7 Экспертные системы на основе теории Демстера-Шеффера
- •6.7.1. Предпосылки возникновения новой теории.
- •6.7.2. Основы теории Демстера-Шеффера
- •6.7.3. Меры доверия и правдоподобия в тдш
- •6.7.4. Отличие тдш от теории вероятностей
- •6.7.5. Связь между тдш и классической теорией вероятностей
- •6.7.6. Комбинация функций доверия
- •7 Решатели проблем, основанных на знаниях
- •7.1 Семантические сети
- •7.2 Фреймы
- •7.3 Нейронные сети
- •7.4 Экспертные системы
- •Модель экспертных систем
- •7 Распознание образов Контурный анализ
- •Код Фримена
- •Современные программные и инструментальные средства создания искусственного интеллекта
Представление списков
Список - это простая структура данных, широко используемая в нечисловом программировании. Список - это последовательность, составленная из произвольного числа элементов
Пример: энн, теннис, том, лыжи. На Прологе это записывается так:
[ энн, теннис, том, лыжи ]
Однако таково лишь внешнее представление списков. Каким образом можно представить список в виде стандартного прологовского объекта? Мы должны рассмотреть два случая: пустой список и не пустой список. В первом случае список записывается как атом [ ]. Во втором случае список следует рассматривать как структуру состоящую из двух частей:
(1) первый элемент, называемый головой списка;
(2) остальная часть списка, называемая хвостом.
Например, для списка
[ энн, теннис, том, лыжи ]
энн - это голова, а хвостом является список
[ теннис, том, лыжи ]
В общем случае, головой может быть что угодно (любой прологовский объект, например, дерево или переменная); хвост же должен быть списком. Голова соединяется с хвостом при помощи специального функтора. Выбор этого функтора зависит от конкретной реализации Пролога; мы будем считать, что это точка:
.( Голова, Хвост)
Поскольку Хвост - это список, он либо пуст, либо имеет свои собственную голову и хвост. Таким образом, выбранного способа представления списков достаточно для представления списков любой длины. Наш список представляется следующим образом:
.( энн, .( теннис, .( том, .( лыжи, [ ] ) ) ) )
Заметим, что показанный выше пример содержит пустой список [ ]. Дело в том, что самый последний хвост является одноэлементным списком:
[ лыжи ]
Хвост этого списка пуст
[ лыжи ] = .( лыжи, [ ] )
Рассмотренный пример показывает, как общий принцип структуризации объектов данных можно применить к спискам любой длины. Из нашего примера также видно, что такой примитивный способ представления в случае большой глубины вложенности подэлементов в хвостовой части списка может привести к довольно запутанным выражениям. Вот почему в Прологе предусматривается более лаконичный способ изображения списков, при котором они записываются как последовательности элементов, заключенные в квадратные скобки. Программист может использовать оба способа, но представление с квадратными скобками, конечно, в большинстве случаев пользуется предпочтением. Мы, однако, всегда будем помнить, что это всего лишь косметическое улучшение и что во внутреннем представлении наши списки выглядят как деревья. При выводе же они автоматически преобразуются в более лаконичную форму представления. Так, например, возможен следующий диалог:
Список1 = [а, b, с],
Список2 = (a, .(b, .(c,[ ]) ) ).
Список1 = [а, b, с]
Список2 = [а, b, с]
?- Увлечения1 = .( теннис, .(музыка, [ ] ) ),
Увлечения2 = [лыжи, еда],
L = [энн, Увлечения1, том, Увлечения2].
Увлечения1 = [теннис, музыка]
Увлечения2 = [лыжи, еда]
L = [энн, [теннис, музыка], том, [лыжи, еда]]
Приведенный пример также напоминает вам о том, что элементами списка могут быть любые объекты, в частности тоже списки. На практике часто бывает удобным трактовать хвост списка как самостоятельный объект. Например, пусть
L = [а, b, с]
Тогда можно написать:
Хвост = [b, с] и L = .(а, Хвост)
Для того, чтобы выразить это при помощи квадратных скобок, в Прологе предусмотрено еще одно расширение нотации для представления списка, а именно вертикальная черта, отделяющая голову от хвоста:
L = [а | Хвост]
На самом деле вертикальная черта имеет более общий смысл: мы можем перечислить любое количество элементов списка, затем поставить символ " | ", а после этого - список остальных элементов. Так, только что рассмотренный пример можно представить следующими различными способами:
[а, b, с] = [а | [b, с]] = [a, b | [c]] = [a, b, c | [ ]]
Подытожим:
Список - это структура данных, которая либо пуста, либо состоит из двух частей: головы и хвоста. Хвост в свою очередь сам является списком.
Список рассматривается в Прологе как специальный частный случай двоичного дерева. Для повышения наглядности программ в Прологе предусматриваются специальные средства для списковой нотации, позволяющие представлять списки в виде