Інтелектуальні системи(лекції) / Лекция 2 Техника использования знаний (06.02.2013) / ТЕХНИКА ИСПОЛЬЗОВАНИЯ ЗНАНИЙ НА ЯЗЫКЕ ПРОЛОГ_ 01
.pdfНужно определение всей задачи в целом:
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, НЕ играется в помещении, ТО это - '"теннис"