Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Інтелектуальні системи(лекції) / Лекция 2 Техника использования знаний (06.02.2013) / ТЕХНИКА ИСПОЛЬЗОВАНИЯ ЗНАНИЙ НА ЯЗЫКЕ ПРОЛОГ_ 01

.pdf
Скачиваний:
17
Добавлен:
20.02.2016
Размер:
347.98 Кб
Скачать

Нужно определение всей задачи в целом:

6.1.0запуск:-

6.1.1это - ( Y ) ,

2 написать ('я думаю, что это'),

3написать (Y), nl, nl.

6.2.0запуск:-

написать ('я не знаю такое животное'), nl.

Все, что нужно сделать пользователю, — это набрать команду запуск, а остальное сделает сама система.

------------------------

ОБРАБОТКА ПРОГРАММЫ В ПРОЛОГЕ

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

Для того чтобы выполнить такую команду пользователя, система Пролог должна

доказать то, что появляется в строках 6.1.1 — 6.1.3.

Система начинает с первой из них. Это приводит к другому поиску в базе данных,

начинающемуся со строки 1.1.0, где Y принимает значение "обезьяна", и управление передается строке 1.1.1, чтобы доказать "это млекопитающее".

Другой поиск в базе данных ведет к строке 2.1.0, причем на этот раз значением Y

становится "млекопитающее", что и является предметом поиска в настоящий момент. У

элемента 2.1.0 всего лишь одно предусловие "имеет (волосы) ".

Следующий этап поиска в базе данных ведет к строке 3.1.0. Предусловие 3.1.1

удовлетворяется посредством встроенного оператора, что приводит к тому, что на терминале пользователя появляются слова "имеет ли оно".

Предусловие 3.1.2 ведет к тому, что там же печатается слово "волосы" и курсор переходит на новую строку.

---------------------------

Предусловие 3.1.3 также удовлетворяется с помощью встроенного в систему оператора, который читает то, что печатает на терминале пользователь, и подставляет это в качестве значения переменной "Ответ".

Теперь у пользователя на терминале появился первый вопрос: "имеет ли оно волосы".

Например, ответим согласием и скажем "да".

Благодаря этому переменная "Ответ" получит значение "да".

Предусловие 3.1.4 снова приводит к поиску в базе данных, пока не будет обнаружено 5.1.0, которое безусловно выполняется, и никаких других предусловий не возникает.

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

-------------------------------

----------------------------

В нашем случае "имеет (волосы)" будет добавлено непосредственно перед строкой 5.1.0. Система, таким образом, установила первый факт, касающийся обсуждаемого животного.

5внести ((Y)).

5.1.0положительный (да)

Наконец, нам нужно определение всей задачи в целом:

6.1.0запуск:-

6.1.1это- ( У) ,

2 написать ('я думаю, что это'),

3написать (Y), nl, nl.

6.2.0запуск:-

написать ('я не знаю такое животное'), nl.

Все, что теперь нужно сделать пользователю, — это набрать на терминале команду запуск, а остальное сделает сама система.

-------------------------------

ОБРАБОТКА ПРОГРАММЫ ПРОЛОГОМ

Результатом управления системой Пролог будет поиск в базе данных смысла команды запуск.

Он содержится в строке 6.1.0.

Для того чтобы выполнить такую команду пользователя, система Пролог должна

доказать то, что появляется в строках 6.1.1 — 6.1.3.

Система начинает с первой из них. Это приводит к другому поиску в базе данных,

начинающемуся со строки 1.1.0, где Y принимает значение "обезьяна", и управление передается строке. 1.1.1, чтобы доказать "это — млекопитающее".

Другой поиск в базе данных ведет к строке 2.1.0, причем на этот раз значением Y

становится "млекопитающее", что и является предметом поиска в настоящий момент.

У элемента 2.1.0 всего лишь одно предусловие "имеет (волосы) ". Следующий этап

поиска в базе данных ведет к строке 3.1.0.

Предусловие 3.1.1 удовлетворяется посредством встроенного оператора, что приводит к тому, что на терминале пользователя появляются слова "имеет ли оно".

--------------------------

----------------------

Предусловие 3.1.2 ведет к тому, что там же печатается слово "волосы" и курсор переходит на новую строку.

Предусловие 3.1.3 также удовлетворяется с помощью встроенного в систему оператора, который читает то, что печатает на терминале пользователь, и подставляет это в качестве значения переменной "Ответ".

Теперь у пользователя на терминале появился первый вопрос: "имеет ли оно волосы".

Cначала ответим согласием и скажем "да". Благодаря этому переменная "Ответ" получит

значение "да".

Предусловие 3.1.4 снова приводит к поиску в базе данных, пока не будет обнаружено

5.1.0, которое безусловно выполняется, и никаких других предусловий не возникает.

-------------------------

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

В нашем случае "имеет (волосы)" будет добавлено непосредственно перед строкой 5.1.0.

Система, таким образом, установила первый факт, касающийся обсуждаемого животного.

Теперь можно вернуться назад и посмотреть, какие предусловия на более высоком уровне

остались непроверенными.

Управляющий механизм системы Пролог поместил все такие невыполненные предусловия в стек, который обрабатывается по схеме "последним вошел - первым вышел", что приводит к удовлетворению 2.1.0, откуда возвращаемся назад к 1.1,1. Теперь готовы проверить 1.1.2.

Предусловие 1.1.2 ведет к 2.5.0 и такой же цепочке шагов, которые проделали выше, ведущей к тому, что на экране терминала будет напечатано "ест ли оно мясо".

Предположим, что на этот раз ответили отрицательно, сказав "нет". Это приведет к поиску в базе данных "положительный (нет)". В базе данных не найдется такого, что системой Пролог рассматривается как неудача, так что 4.1.0 также будет считаться неудачей вследствие того, что неудачей закончилось доказательство одного из его предусловий. Следовательно, и предусловие 2.5.0 заканчивается неудачей.

-------------------------------

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

Предположим, что снова говорим 'нет". Это приведет к неудаче 1.1.2. Пролог попытается проверить еще одну альтернативу для 1.2.1, прежде чем отказаться от 1.2.0.

Новый вариант 1.2.1 приведет к 2.2.0, что, в свою очередь, приведет к вопросу "дает ли оно молоко".

Пусть сказали "да", что привело к успеху 1.2.1. Это означает, что готовы двигаться дальше. Система Пролог реализует такое соображение: "Может быть, к настоящему моменту ситуация изменилась, так что можно ожидать успеха".

Проверка 1.2.2 приведет к тому, что опять появится вопрос, который уже однажды задавали: "ест ли оно мясо".

Повторно попробуем эту альтернативу и, чтобы не противоречить себе, скажем снова "нет".

Это приводит к неудаче для 1.2.2. Поскольку теперь все альтернативы для 1.2.1 опробованы, то и 1.1.0 терпит неудачу.

--------------------------

Таким образом, все, что удалось сделать, — это доказать, что обсуждаемое животное не является обезьяной, и при этом узнали, что животное имеет волосы.

При использовании языка ПРОЛОГ в качестве системы продукций используются правила, обеспечивающие достижение успеха, зависящего от того, как будут чередоваться положительные и отрицательные ответы пользователя.

ДАЛЬНЕЙШИЕ ОБОБЩЕНИЯ

Чтобы проиллюстрировать способ достижения необходимого решения,

использованы задачи различения животных.

Предложенная "программа" на языке Пролог достаточно простая для иллюстративных целей, далека от совершенства.

При использовании в программе широкого набора данных, она будет продолжать задавать вопросы, на которые уже давали ответы.

Одна из причин этого состоит в том, что программа не запоминает сообщенные ей факты отрицательного характера.

-------------------------------

-----------------------------------

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

также использованию встроенного нелогического оператора cut языка Пролог, называемого "отсечение", который обеспечивает подрезание дерева поиска, что приводит к более

эффективному поиску путей решения.

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

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

Дальнейшее обобщение позволяет пользователю задать вопрос: "Почему сделан некоторый запрос?"

На это система будет в состоянии представить рассматриваемое ею правило и причину запроса.

-----------------------------------------

Кларк и Маккейб (1982) опубликовали работу учебного характера [6], касающуюся характеристик типа "объяснение поведения", которые могут быть добавлены к системе, если использовать Пролог как базовую конструкцию.

Харди также несколько расширил синтаксис языка Пролог [9], чтобы обеспечить успешную работу в более сложном примере, в котором правила записываются более естественным образом:

Правило 100

ЕСЛИ

свойство — волосатый

ТО

группа - млекопитающие ку 800

В этом примере ку обозначает коэффициент уверенности, благодаря которому в систему

вносится в определенной степени вероятностное рассуждение.

-------------------------------------

Синтаксис языка Пролог легко поддается расширению путем определения новых операторов, так что правила, представленные в вышеуказанном виде, трактуются системой, как правила в форме, принятой в нашем примере об узнавании животного:

: -o п( 9 7 5 , x f y, : ) , oп (725,xfy,кy),

oп (948, xfy, потому что), oп (800, xfy, и),

oп (750, xfy, или), oп (959, fx, если), oп (949, xfy, тогда) .

Пользуясь такой системой, можем пометить правило, которое используем, так что в

дальнейшем сможем задать конкретный вопрос.

--------------------------------

Вызов правила тогда производился бы так:

вызвать (П) :—

П : если Р, то С ку N

(N < 200; заметить (С имеет ку.равное N, потому что [П])).

Отсюда, если коэффициент уверенности меньше 200, это правило игнорируется, в противном случае ("; " обозначает логический оператор ИЛИ) отмечаем заключение и номер правила, которое к нему привело.

Тогда предикат "почему" проанализирует базу данных с целью установить, каков номер текущего отмеченного правила, а потом выдать его пользователю в качестве оправдания заданного тому вопроса:

почему:-

написать ("Ваш ответ поможет мне в работе с правилом"), текущее (ПРАВИЛО), показать (ПРАВИЛО).

-----------------------------------

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

Однако, лучше сразу воспользоваться какой-то из оболочек для экспертных систем.

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

Ниже приведен неполный перечень характеристик, которые должны быть привнесены в экспертную систему, либо путем последовательного добавления, либо с самого начала:

1.Запрос данных, порождаемый ходом вывода.

2.Отчетность (объяснение поведения) .

3.Прозрачность (обучающая компонента).

4.Автоматическое пополнение совокупности правил.

5.Серьезное обучение.

6.Вероятностное рассуждение (неуверенность в фактах, правилах и управлении) .

---------------------------

ПРИЛОЖЕНИЕ А

Улучшенный вариант программы классификации животных

это - (обезьяна) :— это - (млекопитающее), это - (хищник),

положительный (имеет, рыжевато-коричневый-цвет). положительный (имеет, темные-пятна).

это - (тигр) :- это - (млекопитающее), это - (хищник),

положительный (имеет, рыжевато-коричневый-цвет), положительный (имеет, черные-полосы). это - (жираф) :- это - (копытное), положительный (имеет, длинную-шею),

положительный (имеет, длинные-ноги), положительный (имеет, темные-пятна).

это - (зебра) :- это - (копытное),

положительный (имеет,.черные-полосы). это - (страус) :-

это - (птица), положительный (имеет, длинную-шею),

положительный (имеет, длинные-ноги), положительный (имеет, черно-белый-цвет).

это - (пингвин) :- это - (птица),

отрицательный (умеет, летать), положительный (умеет, плавать), положительный (имеет, черно-белый-цвет).

это - (альбатрос) :- это - (птица),

положительнкй (умеет, летать-хорошо). это - (млекопитающее) :—

положительный (имеет, волосы). это - (млекопитающее) :-

положительный (дает-молоко). это - (птица) :-

положительный (имеет, оперенье). это - (птица) :-

положительный (умеет, летать), положительный (откладывает-яйца),

это - (хищник) :— положительный (умеет, ест-мясо).

это - (хищник) :- положительный (имеет, острые-зубы),

положительный (имеет, впередсмотрящие глаза), это - (копытное) :-

это - (млекопитающее), положительный (имеет, копыта).

это - (копытное) :- это - (млекопитающее),

положительный (умеет, жевать).

положительный (X, Y) :-

спросить (X, Y, Ответ), да-проверка (Ответ).

отрицательный (X, Y) :- спросить (X, Y, Ответ), нет-проверка (Ответ).

да-проверка (да). нет-проверка (нет). спросить (X, Y, Ответ) :-

написать (X), написать (это), написать (Y), прочесть (Ответ),

запомнить (Ответ, X, Y) . запомнить (да, X, Y):-

добавить (положительный (X, Y)). запомнить (нет, X, Y):-

добавить (отрицательный (X, Y)). добавить (X) :—

запуск:- внести (X:!). это- (Y), написать ('я думаю что это-'),

написать (Y), nl, nl.

ПРИЛОЖЕНИЕ Б

Напишите программу для экспертной системы, имеющей следующие правила:

1ЕСЛИ игра в мяч, две команды с числом игроков в команде более 2, число игроков в команде 9 ТО это - "бейсбол"

2ЕСЛИ игра в мяч, две команды с числом игроков в команде более 2, число игроков в команде = 15, мяч НЕ разрешается посылать вперед, ТО это "регби"

3ЕСЛИ игра в мяч, две команды с числом игроков в команде более 2, число игроков в команде = 11, бита НЕ используется, ТО это — "хоккей"

4ЕСЛИ игра в мяч, две команды с числом игроков в команде более 2, число игроков

вкоманде =11, мяч круглый, мяч НЕ твердый, ТО это - "европейский футбол" 5 ЕСЛИ игра в мяч, две команды с числом игроков в команде более 2, число игроков

вкоманде = 11, мяч НЕ круглый, ТО это - "американский футбол"

6ЕСЛИ игра в мяч, две команды с числом игроков в команде более 2, число игроков в команде = 5, ТО это - "баскетбол"

7ЕСЛИ игра в мяч, НЕ две команды с числом игроков в команде более 2, мяч сплошной, НЕ играется в помещении, мяч круглый, НЕ используется деревянный молоток, ТО это - "гольф"

8ЕСЛИ игра в мяч, НЕ две команды с числом игроков в команде более 2, используется ракетка, ТО это - "настольный теннис"

9ЕСЛИ игра в мяч, НЕ две команды с числом игроков в команде более 2, НЕ играется в помещении, ТО это - '"теннис"