Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программы классификации 49 9 Программа классифи...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
944 Кб
Скачать
☆

3.9.1. Программа классификации с обратной цепочкой рассуждений

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

Обратная цепочка рассуждений предполагает продвижение от цели, в нашем случае от распознаваемого животного. Структура версии с обратной цепочкой рассуждений проектируется введением группы правил высокого уровня, т.е. включающих в себя несколько правил. Каждое такое правило описывает одно животное, Дадим описание нескольких животных:

animal_is(“тигр”) :– i

t_is(“млекопитающее”),

it_is(“хищник”),

positive(“имеет”, “рыжий цвет”),

positive(“имеет”, “черные полосы”).

animal_is("гепард") :–

it_is("млекопитающее"),

it_is("хищник"),

positive("имеет","рыжий цвет"),

positive("имеет", "черные пятна").

animal_is("зебра") :–

it_is("копытное"),

positive("имеет","черные полосы").

animal_is("пингвин") :–

it_is("птица"),

negative("умеет", "летать"),

positive("умеет", "плавать"),

positive("имеет", "черно-белый цвет").

Сходные правила должны быть для всех животных, которых предстоит классифицировать программе.

Все правила поддерживаются на следующем, более низком уровне некоторыми соподчиненными предикатами:

it_is("млекопитающее") :–

positive("имеет", "шерсть"),

positive("кормит", "детенышей молоком").

it_is("хищник") :–

positive("имеет", "острые зубы"),

positive("имеет", "когти"),

positive("имеет", "глаза, направленные вперед").

it_is("копытное") :–

it_is("млекопитающее"),

positive("имеет", "копыта"),

positive("жует", "жвачку").

Свою работу программа начинает с использования правила

Goal animal_is(X), !,

write("Отгаданное животное ", X),

retractall( _ ).

Далее система пытается по очереди установить истинность или ложность правил высокого уровня, т.е. найти кандидата, которого она сможет проверить на соответствие предикату animal_is.

Определение истинности такого правила влечет за собой проверку всего дерева подчиненных фактов и свидетельств, которые должны быть истинными, чтобы подтвердить основное заключение. По мере продвижения вниз по дереву программа соответственно ситуации задает нужные вопросы в нужное время для получения недостающей информации, поэтому ее поведение кажется разумным. Большая часть работы совершается правилами positive и negative, xpositive и xnegative. Они используются для проверки конкретных атрибутов животных, которые могут быть обнаружены в процессе диалога и записаны в базу данных.

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

database

xpositive( symbol, symbol )

xnegative( symbol, symbol )

Clauses

positive( X, Y ) :– % Положительный ответ обнаружен

Xpositive( X, y ), !. % в базе данных

positive( X, Y ):–

Xnegative( X, y ), !, fail. % Отрицательный ответ обнаружен в базе данных

positive( X, Y ) :– % Задается вопрос, для которого

ask( X, Y, yes ), !. % ожидается положительный ответ

ask( X, Y, yes ) :–

write( X, " оно ", Y, “?\n”),

readchar( Reply ),

ans_pos( X, Y, Reply ).

ans_pos( X, Y, 'y' ):– assertz( xpositive( X, Y )).

ans_pos( X, Y, 'n' ):– assertz( xnegative( X, Y )), !, fail.

Когда механизм вывода доходит до места, где требуется узнать, был ли установлен некоторый атрибут животного, он использует правила positive и negative. (Здесь у нас приведен предикат positive, соответствующий положительному значению атрибута. Сходный по работе с ним предикат negative записывается симметрично.)

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

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