Лабораторная работа №3
Создание экспертной системы на языке Пролог с использованием обратной цепочки рассуждений
Общие сведения
Структура версии программы с обратной цепочкой рассуждений проектируется с помощью введения группы правил высокого уровня. Каждое такое правило описывает одно животное, четко указывая, какая именно информация нужна системе, чтобы прийти к выводу, что именно данное конкретное животное является искомым ответом. Например:
identify(octopus):-
not(it_is(mammal)),
it_is(carnivorous),
confirm(does,swim),
confirm(has,tentacles),!.
Сходные правила имеются для всех животных, которые предстоит классифицировать программе.
Предикаты с правой стороны правил is_animal всегда специфицируются другими правилами, помимо тех случаев, когда предикат просто проверяет, находится ли определенная информация в базе данных. Информация, вводимая в базу данных, извлекается из ответов пользователя на задаваемые вопросы. Все ответы сохраняются, так как они могут потребоваться позднее.
Правила, проверяющие, находится ли в базе данных определенная информация, состоят из двух частей. Первая часть обеспечивает просмотр базы данных, причем ответ может быть найден сразу. Во второй части находятся запрос пользователю и запись его ответа в базу данных.
Свою работу программа начинает с использования главного правила, называемого guess_animal.
guess_animal:-
Identify(X),
write("Задуманное вами животное - ",X),
nl,
!.
Далее система пытается по очереди установить истинность или ложность каждого из правил высокого уровня, т.е. найти кандидата, которого она сможет проверить на соответствие предикату identify. Как и характерно для Пролога, установление статуса правила высокого уровня влечет за собой проверку всего дерева подчиненных фактов и свидетельств, которые должны быть истинными, чтобы подтвердить основное заключение. По мере продвижения вниз по дереву программа соответственно ситуации задает нужные вопросы в нужное время для получения недостающей информации, поэтому ее поведение кажется разумным.
В программе правила просто применяются одно за другим, начиная с вершины дерева. В процессе такого сканирования ответ, безусловно, будет найден, если только правило для идентификации задуманного животного существует.
Линейное сканирование списка правил делает эту систему похожей на продукционную, а дерево подчиненных свидетельств, которое должно быть создано для использования одного правила, - на логическую программную систему.
Если располагать правила по-разному, то будут происходить различные диалоги, причем одни из них могут быть длиннее, другие короче. Однако программа всегда извлекает пользу из всей поступившей информации и, безусловно, ведет себя не хуже, чем человек, выполняющий такое же задание.
В этой архитектуре важен порядок правил identify. Если речь идет о части настоящей экспертной системы, которая запускается многократно, и если животное X - наиболее подходящий ответ, а животное Y - следующий по приоритету, то правило для определения животного X должно находиться в программе первым, а правило для определения животного Y - за ним. Это позволяет минимизировать количество задаваемых вопросов при использовании обратной цепочки рассуждений.
Как работает программа?
Рассмотрим теперь правила высокого уровня, описывающие свидетельства в пользу конкретного животного. Между прочим, все аргументы любого правила системы описаны как symbol в domain, поэтому мы не приводим предикат и описание типа.
