Искусственный интеллект и экспертные системы

Автор работы: Пользователь скрыл имя, 11 Декабря 2012 в 13:13, курс лекций

Описание

Достаточно трудно дать точное определение, что такое интеллект человека, потому что интеллект - это сплав многих навыков в области обработки и представления информации. Интеллект ( intelligence ) происходит от латинского intellectus — что означает ум, рассудок, разум; мыслительные способности человека. С большой степенью достоверности интеллектом можно называть способность мозга решать (интеллектуальные) задачи путем приобретения, запоминания и целенаправленного преобразования знаний в процессе обучения на опыте и адаптации к разнообразным обстоятельствам.

Содержание

1.1. Основные понятия искусственного интеллекта
1.2. История развития искусственного интеллекта
1.3. Задачи искусственного интеллекта
1.4. Экспертные системы - направление исследований по искусственному интеллекту
1.5. Классификация и виды экспертных систем
1.6. Область применения экспертных систем
Структура и функционирование экспертных систем
2.1. Типовая структура экспертных систем
2.2. Интерфейс пользователя
2.3. Подсистема приобретения знаний
2.4. База знаний
2.5. База данных
2.6. Механизм логического вывода
2.7. Объяснение решений
2.8. Функционирование экспертных системах
Представление знаний
3.1. Основные понятия и состав знаний
3.2. Модели представления знаний
3.3. Представление нечетких знаний
Методы поиска решений
4.1. Поиск решений в одном пространстве
4.2. Поиск решений в иерархии пространств
4.3. Поиск решений в альтернативных пространствах
4.4. Поиск решений с использованием нескольких моделей
4.5. Выбор метода решения задач

Инструментальные средства разработки экспертных систем
5.1. Классификация инструментальных средств
5.2. Языки программирования
5.3. Языки инженерии знаний
5.4. Средства автоматизации разработки экспертных систем
5.5. Оболочки экспертных систем
Технология разработки экспертных систем
6.1. Стадии создания экспертных систем
6.2. Этапы разработки экспертных систем
6.3. Разработка прототипа экспертной системы

Работа состоит из  1 файл

Искусственный интеллект и экспертные системы.docx

— 150.06 Кб (Скачать документ)

    Одним из самых  распространённых диалектов Лиспа  является Common Lisp. Его реализации существуют для большинства платформ. Есть реализации распространяемые свободно под лицензиями, позволяющими использовать Лисп без ограничений в коммерческих приложениях, кроме этого существуют коммерческие реализации, предлагающие дополнительные возможности (IDE, дополнительные библиотеки и т. п.), в том числе техническую поддержку. С полным списком реализаций можно ознакомиться здесь: Common Lisp Implementation.

Синтаксис

    Любая программа  на Лиспе состоит из последовательности  выражений (форм). Результат работы  программы состоит в вычислении  этих выражений. Все выражения  записываются в виде списков  — одной из основных структур  Лиспа, поэтому они могут легко  быть созданы посредством самого  языка. Это позволяет создавать  программы, изменяющие другие  программы или макросы, позволяющие  существенно расширить возможности  языка. 

    Список является  последовательностью элементов  любого рода, в том числе других  списков. Например, (1 3/7 'foo #'+) состоит из целого числа, рациональной дроби, символа foo и указателя на функцию сложения. Выражения представляются списками в префиксной записи: первый элемент должен быть формой, то есть функцией, оператором, макросом или специальным оператором; прочие элементы суть аргументы, передаваемые форме для обработки. Функция list возвращает список состоящий из ее аргументов: например, (list 1 3/7 'foo #'+) возвращает список, упомянутый ранее. Если некоторые элементы являются выражениями, то сначала вычисляется их значение: (list 1 2 (list 1 2)) возвращает (1 2 (1 2)). Арифметические операторы действуют так же, например (+ 4 (* 2 3)) выдаёт 10.

    Специальные операторы  позволяют управлять последовательностью  вычислений. С их помощью реализуются  ветвление и циклы. Оператор  if позволяет вычислить одно из двух выражений в зависимости от выполнения условия, которое тоже является выражением. Если его результат не nil, то вычисляется первый аргумент, иначе вычисляется второй. Например, (if nil (list 1 2 "foo") (list 3 4 "bar")) всегда возвращает (3 4 "bar").

Примеры

    Пример куина (программы, выводящей свой исходный код) на Лиспе:

((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))

    Данная программа должна работать на большинстве диалектов Лиспа, в том числе и на Scheme.

    Итеративная версия  функции определения N-го числа Фибоначчи:

(defun fibonacci (x)

(if (= x 0)

1

(loop with result = 1

 with prev = 1

 for i from 0 below (1- x)

do (psetq result (+ result prev) prev result))))

 

Многофункциональные программные  среды 

 

     Многофункциональные  программные среды позволяют  опытному программисту экспериментировать  при решении новых классов  проблем, выбирая подходящие сочетания  различных методов, представленных  в имеющемся модульном наборе. Поскольку не существует единственного  универсального языка представления  знаний для произвольной экспертной  системы, у разработчиков возникает  желание объединить несколько  различных схем представления,  особенно на этапе создания  прототипа. Хотя исчерпывающей  теории таких гибридных систем  и не существует, эксперименты  с разными схемами представления  и логического вывода показали, что каждая из них имеет  свои слабые стороны. Поэтому  понятно желание объединить разные  методики таким образом, чтобы  достоинства одних компенсировали  слабости других.

    Мы уже не  раз обращали ваше внимание  на то, что порождающие правила  позволяют представить в программе  эмпирически выявленные связи  между условиями и действиями, между наблюдениями и гипотезами, но они значительно хуже подходят  для представления отношений  между объектами предметной области,  включая и такие важнейшие,  как отношения множество/элемент  или множество/подмножество. Структурированные  объекты, например фреймы, оказываются  более удобным средством для  хранения и манипулирования описаниями объектов предметной области, но применение таких знаний требует включения в программу фрагментов программного кода (например, на языке LISP), которые затем трудно анализировать. Рациональное зерно в первых попытках свести вместе стили, основанные на правилах и фреймах, состояло в том, чтобы объединить способность представлять объекты, характерные для фреймов, с возможностями связывать условия и действия с помощью порождающих правил.

    Одной из первых многофункциональных сред искусственного интеллекта является LOOPS. в которой в рамках единой архитектуры обмена сообщениями были объединены четыре парадигмы программирования, перечисленные ниже[18]:

Процедурно-ориентированное  программирование. Эта парадигма  была представлена языком LISP, в котором  активным компонентом являются процедуры, а пассивным — данные, несмотря на то, что в LISP процедуры сами по себе также являются данными, поскольку  имеют вид списков. В рамках единой среды процедуры могут быть использованы для обработки внешних данных, в частности изменения значений общедоступных переменных.

Программирование, ориентированное  на правила. Эта парадигма аналогична предыдущей, но роль процедур играют правила "условие-действие". В среде LOOPS наборы правил сами по себе являются объектами, которые можно рекурсивно вкладывать один в другой. Таким образом, часть "действие" одного правила, в свою очередь, может активизировать подчиненный набор правил. С множествами правил связываются управляющие компоненты, с помощью которых в простейшей форме выполняется разрешение конфликтов.

Объектно-ориентированное  программирование. Структурированные  объекты обладают свойствами и процедур, и данных, причем побочные эффекты  обычно локализуются в пределах объекта. Обработка поступающих сообщений  приводит к передаче данных или изменению  их значений, но все манипуляции  данными выполняются под управлением  того компонента, который обратился  к объекту. При этом вызывающий объект совершенно не интересует, как хранятся данные и как они модифицируются внутри объекта.

Программирование, ориентированное  на данные. Доступ к данным и обновление данных запускает определенные процедуры, причем не имеет значения, почему изменен  компонент данных, — то ли это  результат побочного эффекта, то ли результат действия других процедур. С переменными, в которых хранятся значения данных, связываются определенные процедуры, подобно тому, как это  делается в слотах фрейма, причем такие  переменные часто называют активными  величинами. В таких приложениях, как моделирование, этот стиль программирования оказывается довольно продуктивным, поскольку позволяет распространить эффект изменения какого-либо компонента на прочие, с ним связанные.

 

    В рамках основной  объектно-ориентированной парадигмы  модули среды, поддерживающие  разные стили программирования, можно комбинировать. Обычно условия  в порождающих правилах и логические  фразы связываются со значениями  слотов структурированных объектов, а правила модифицируют значения  этих слотов. Именно такой стиль  объединения парадигм в настоящее  время реализован в языке CLIPS.

    В системах  КЕЕ и LOOPS поведение объектов  описывается в терминах множества  порождающих правил, как это сделала  Эйкинс (Aikins) в системе CENTAUR. В средах КЕЕ и Knowledge Craft к перечисленным выше парадигмам добавлено и логическое программирование в стиле языка PROLOG. Новая версия КЕЕ, известная под названием КАРРА-РС, предоставляет в распоряжение программиста еще более широкий набор стилей для комбинирования правил, объектов и процедур.

 

CLIPS как многофункциональная  среда программирования(инженерии знаний)

 

     Кроме поддержки  интерпретатора порождающих правил CLIPS обладает следующими функциональными  возможностями: 

для определения стандартных  функций используется синтаксис, подобный LISP;

предоставляет в распоряжение разработчика родовые функции, аналогичные  мультиметодам CLOS;

располагает встроенным объектно-ориентированным  языком COOL, который, в отличие от CLOS, включает и средства поддержки  обмена сообщениями.

 

    Обращение к  стандартным функциям допускается  включать в правую часть правил  и в этом случае они выполняются  так, как если бы являлись  компонентом действий, специфицированных  в правиле. Функции вызываются  либо с целью получить побочный  эффект, либо для использования явно возвращаемого функцией результата, который может быть сохранен с помощью оператора присваивания. Для работы с переменными в этом случае используется тот же синтаксис, что и в языке описания правил. Например, можно определить функцию between (X, Y, 2), оперирующую с целыми переменными. Эта функция будет проверять выполнение неравенств X|Y|Z:

(deffunction between (?lb ?value ?ub)

(and (<= ?lb ?value) (<=?value ?ub))),

    Родовые функций (generic function) в CLIPS играют ту же роль, что и перегружаемые операторы в языке C++. Они обеспечивают возможность выполнять обработку разными методами последовательностей данных различного типа. Например, для конкатенации двух строковых значений оператором “+” можно следующим образом перегрузить этот оператор:

(defmethod + ((?a STRING) (?b STRING)) (art-cat ?a ?b)}

 Тогда результатом вычисления выражения

 

(+ "dog" "fish") будет "dogfish".

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

    Вычисление родовых  функций выполняется под "надзором" родового алгоритма диспетчирования (generic dispatch algorithm), который формирует индексированный список подходящих методов. Методы из этого списка затем вызываются соответственно уровню ограничений, указанному для параметров при обращении к функции. Алгоритм также принимает во внимание любые управляющие программные конструкции, представленные явно в тексте программы метода, например call-next-method или override-next-method.

    Механизм передачи  сообщений реализован по тому  же способу, что и в языках  SmallTalk и LOOPS, и требует, чтобы программист разработал свой обработчик сообщений для каждого отдельного класса. Диспетчер сообщений работает так же, как в исполняющей системе языка CLOS, и различает обработчики типов primary, around, before и after.

    В программе  на языке CLIPS можно вызывать  и функции, написанные на языке С, хотя это и выполняется несколько необычно. Исполняющая система CLIPS может выступать в качестве внедренного приложения, т.е. программа на CLIPS может быть скомпилирована и скомпонована с программой на языке С, которая будет вызывать CLIPS-фрагменты как подпрограммы. Это позволяет внедрять функции искусственного интеллекта в компоненты больших программных комплексов.

 

5.4 Средства автоматизации  разработки экспертных систем.

 

Дополнительные модули

    Под дополнительными  модулями понимаются те полезные  программы, которые можно выполнять  вместе с приложением. Как правило,  такие программы реализуют некоторые  специальные функции, как бы "снимая  их с полки", причем для обращения  к таким функциям не требуется  что-либо программировать в основном  приложении или заниматься его  индивидуальной настройкой. Одним  из примеров такого рода дополнительного  модуля может служить программный  пакет Simkit из комплекта среды КЕЕ. Этот пакет позволяет оснастить экспертную систему методами моделирования.

    Другой функцией, которая поддерживается дополнительными  модулями сред КЕЕ и ART, является  механизм обработки множества  различных контекстов логических  рассуждений. В первом приближении можно считать, что контексты формируются теми ветвями в пространстве поиска, которые допускают использование более чем одного оператора. Рассмотрим представленный ниже сценарий, в котором имеются два правила, в каждом из которых условная часть удовлетворяется в текущем контексте рассуждений.

 

[Правило 1]

  ЕСЛИ: сегодня рабочий  день И

  нет признаков недомогания, 

  ТО: посетить занятия  по информатике. 

 

[Правило 2]

  ЕСЛИ: сегодня рабочий  день И

  погода прекрасна, 

  ТО: покататься на  яхте.

 

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

Информация о работе Искусственный интеллект и экспертные системы