Процедура explore
Основой командного интерпретатора является процедура explore; Goal, Trace, Answer)
Эта процедура находит в стиле обратного логического вывода ответ Answer на указанный вопрос Goal с использованием принципов, описанных в разделе 16.2.2. Для этого она находит Goal как факт в базе знаний, или применяет к базе знаний некоторое правило, или запрашивает пользователя, или обрабатывает Goal как комбинацию подцелей, соединенную операторами AND или OR
366 Часть II. Применение языка Prolog в области искусственного интеллекта
• Назначение и структура параметров этой процедуры описаны ниже.
• Goal. Это - рассматриваемый вопрос, представленный в виде комбинации простых высказываний, связанных операторами AND/OR, например, следующим образом:
(X has feathers) or {X flies} and (X lays eggs)
• Trace. Это — цепочка дочерних целей и правил, соединяющая текущую цель
Goal с первоначальной целью верхнего уровня и представленная как список
элементов в форме:
Goal by Rule Это означает, что выполнена проверка цели Goal с помощью правила Rule. Например, допустим, что целью верхнего уровня является "peter isa tiger" (Питер - тигр), а проверяемой в данный момент целью является "peter eats meat" (Питер питается мясом). Соответствующая трассировка, сформированная согласно базе знаний, которая приведена в листинге 16.1, показана ниже. t (peter isa carnivore) by rule3, (peter isa tiger) by rule5 ]
Эта трассировка означает следующее.
• Я могу использовать правило "peter eats meat", чтобы проверить с помощью правила rule3 истинность высказывания "peter isa carnivore" (Питер — плотоядное животное). Кроме того, я могу использовать высказывание "peter isa carnivore", чтобы проверить с помощью правила ruleS истинность высказывания "peter isa tiger".
• Answer. Это — дерево доказательства (т.е. дерево решения AND/OR) для вопроса Goal. Общая форма ответа Answer состоит в следующем:
Conclusion was Found
где Found представляет обоснование для заключения Conclusion. Ниже приведены три примера ответов, иллюстрирующих различные ситуации, возникающие при формировании ответов.
1. Обнаружен факт:
( connected| heater, fusel) is true ) was 'found as a fact1
2. Получен ответ на запрос к пользователю; ( peter eats neat) is false was told
3. Сформирован логический вывод на основании имеющихся и полученных сведений:
( peter isa carnivore ) i3 true was ('derived by' rule3 from ( peter isa mammal) is true was ('derived by- rulel from ( peter has hair ) is true was told ) and ( peter eats meat) is true was told )
Код процедуры explore на языке Prolog приведен в листинге 16.3. В этом коде реализованы принципы, описанные в разделе 16.2.2, с использованием структур данных, указанных выше.
Листинг 16.3. Основная процедура командного интерпретатора экспертной системы
Процедура t % explore( Goal, Trace, Answer)
% находит ответ Answer, соответствующий заданной цели Goal, где Trace - цепочка
% родительских целей и правил, с помошьп которых процедура explore пытается
% кайти содержательный ответ на вопрос. Ответ Answer может принять ложное
I значение, только если ОЫЛИ проверены все варианты и для всех ник получен
I ложный результат
:- ор( 900, xfx, : : ) .
Глава 16. Командный интерпретатор экспертной системы
- op ( | 800, | xfx, | was) . |
- op ( | 870, | fx, | |
- op ( | 880, | xfx, | then). |
- Op ( | 550, | xf у, | or) . |
- op ( | 540, | xfy, | and) . |
- op( | 300, | fx, | 'derivedby') |
- op ( | 600, | xfx, | from). |
- op( | 600, | xfx, | by) . |
% в этой программе предполагается, что директивы ор( 700, xfx, is) 4 и op! 900, fx, not) уже введены
explore! Goal, Trace, Goal is true was ' found as a fact') :-fact :: Goal.
Ь Предполагается, что для цели каждого типа предусмотрено только одно правило
Goall |
explore! Goal, Trace,
•derived by' Rule from Answer] :- Правило Rule, соответствующее цели Goal Trace] , Answer) , |
Goal is TruthValue was
Rule :: if Condition then Goal,
explore [ Condition, [Goal by Rule
! , |
truth{ Answer, TruthValue) . explore) Goall and Goal2, Trace, Answer)
explore С Goall, Trace, Answerl),
continues Answerl, Goall and Goal2, Trace, Answer). explore! Goal] or Goal2, Trace, Answer]:-
exploreyes! Goall, Trace, Answer) - Ответ, соответствующий
exploreyes! Goal2, Trace, Answer). l Ответ, соответствующий цел:' Goal2 explore( Goall or Goal2, Trace, Answerl and Answer2) :- !, not exploreyes ! Goall, Trace, J),
not exploreyes i Goal2 , Trace, _~) , ': Соответствующий ответ отсутствует explore( Goall, Trace, Answerl), Ответ Answerl должен Сыть ложным explore ( Goal2, Trace, Answer2). % Ответ Answer; должен быть ложным explore! Goal, Trace, Goal is Answer was -old) :-
useransweri Goal, Trace, Answer). ! Ответ, предоставленный пользователем
exploreyes! Goal, Trace, Answer) :-
explore! Goal, Trace, Answer) ,
positive! Answer). continue! Answerl, Goall and Goal2, Trace, Answer) :-
positive! Answerl),
explore! Goal2, Trace, Answer2), {positive С Answer2!,
Answer = Answerl and Answer2
: - |
TruthValue) |
negative!. Answer2) ,
Answer = Answer2
) . continue; Answerl, Goall and Goal2, _, Answerl)
negative! Answerl). trutht Question is TruthValue was Found, truth [ Answerl andAnswer2, TruthValue)
truth( Answerl, true) ,
truth! Answer2r true], I,
TruthValue - true
: -
! .
TruthValue = false. positive( Answer) :-
truth I Answer, true) . negative{ Answer) :-
truth С Answer, false) .
getreply! Reply) :-read ( Answer) , means С Answer, Reply),!
% Ответ имеет смысл для программы?
Часть II.Применение языка Prolog в области искусственного интеллекта
i
nl, write( 'Answer unknown, try again please') , nl, % Нет
getreply( Reply) . % Сделать еще одну попытку
means( yesr yes) . means { y, yes ) ,. means { no, no) . means in, no) . means! why, why) . meansI w, why) .