Лабораторная работа №4 Создание экспертной системы на языке Пролог с использованием прямой цепочки рассуждений
Версия программы классификации с прямой цепочкой рассуждени "играет" в ту же игру, что и предыдущая версия, но правила верхнего уровня здесь используются по-другому. Механизмы же задания вопросов низкого уровня в обеих версиях ПЗР используются одни и те же.
Версия 2 была спроектирована после тщательного изучения возможных ответов и проработки последовательности проверок. (Всякий раз после очередной проверки оставшееся пространство вопросов делится приблизительно на равные части.) Суть метода прямой цепочки рассуждений заключается в изобретении вопросов, позволяющих на каждом шаге отбросить большое количество возможных ответов, так что правильный ответ может быть установлен быстро. Обратите внимание на то, что задаваемые при каждой проверке вопросы целиком зависят от возможных ответов. Различные ответы (т.е. если бы были задуманы разные животные) подразумевают необходимость использования разных проверок.
На рис. изображена блок-схема, поясняющая алгоритм работы программы.

Как работает программа?
Изучение блок-схемы версии ПЗР с прямой цепочкой рассуждений показывает, что вне зависимости от выбранного маршрута поиска требуется не более четырех проверок (а иногда достаточно и трех). Это отражено в структуре основных правил:
guess_animal:-
find_animal,
have_found(X),
write("Задуманное вами животное - ",X),nl,!.
find_animal:-
test1(X),
test2(X,Y),
test3(X,Y,Z),
test4(X,Y,Z,_),!.
find_animal.
В программе предусмотрены четыре правила проверки:
test1(X) test2(X,Y) test3(X,Y,Z) test4(X,Y,Z,W)
Они должны охватить все, что может выясниться соответственно при первой, второй, третьей и четвертой проверках. Например, третья проверка управляет всем, что происходит в прямоугольниках решений, расположенных на блок-схеме (см. рис. 4.1) на глубине в три шага.
test3 представляет собой правило с несколькими предложениями. В зависимости от того, какое из предложений задействовано, могут быть заданы следующие вопросы:
Live on land? Живет на земле?
Has stripes? Имеет полосы?
Has tentacles? Имеет щупальца?
Does it fly? Летает?
Структура аргументов этих правил может показаться необычной. По мере углубления проверки требуется все больше аргументов для учета результатов предыдущих проверок.
Правила проверки предполагают перечисление всех возможностей. Различные комбинации аргументов в задействованном правиле отражают всю историю вывода до указанного места. Например, test1 может успешно завершиться одним из двух способов:
test1(m) животное — млекопитающее
test1(n) животное — не млекопитающее
ПЗР — программа классификации. Прямая цепочка рассуждений обеспечивает серию двоичных выборов, что позволяет отбрасывать половину оставшихся возможностей (или почти половину) до тех пор, пока не останется одна-единственная.
Каковы возможные значения аргументов для правила test2 ?
Если оно завершилось успешно, появляются четыре вероятных комбинации:
test2(m,c) млекопитающее и плотоядное
test2(m,n) млекопитающее и не плотоядное
test2(n,w) не млекопитающее и плавает
test2(n,n) не млекопитающее и не плавает
Для проверок третьего уровня имеется еще больше возможностей. Нам потребуется задать определяющее правило для каждого маршрута из прямоугольника решений третьего уровня (на блок-схеме рис. 4.1):
test3(m,c,s) млекопитающее, плотоядное, с полосами
test3(m,c,n) млекопитающее, плотоядное, без полос
test3(m,n,l) млекопитающее, не плотоядное, живет на суше
test3(m,n,n) млекопитающее, не плотоядное, не живет на суше
test3(n,w,t) не млекопитающее, плавает, имеет щупальца
test3(n,w,n) не млекопитающее, плавает, не имеет щупалец
test3(n,n,f) не млекопитающее, не плавает, летает
test3(n,n,n) не млекопитающее, не плавает, не летает
Для test4 имеется меньшее число возможных значений установок для аргумента, поскольку лишь в двух случаях требуется более трех проверок:
когда test3 успешно завершается как test3(m,n,l) или как test3(n,w,n). Во всех остальных случаях животное уже идентифицировано.
test4(m,n,l,s) млекопитающее, неплотоядное, с полосами, живет на суше
tesl4(m,n,l,n) млекопитающее, неплотоядное, без полос, живет на суше
test4(n,w,n,f) не млекопитающее, плавает, без щупалец, имеет крылья
test4(n,w,n,n) не млекопитающее, плавает, без щупалец, без крыльев
Ниже приводится полная структура тестовых правил, имеющихся во второй версии ПЗР.
test1(m):-
